| 104 | # |
| 105 | |
| 106 | class SqliteDataSet(DataSet): |
| 107 | @property |
| 108 | def filename(self): |
| 109 | db_file = self._database.database |
| 110 | if db_file.startswith('file:'): |
| 111 | db_file = db_file[5:] |
| 112 | return os.path.realpath(db_file.rsplit('?', 1)[0]) |
| 113 | |
| 114 | @property |
| 115 | def basename(self): |
| 116 | return os.path.basename(self.filename) |
| 117 | |
| 118 | @property |
| 119 | def is_readonly(self): |
| 120 | db_file = self._database.database |
| 121 | return db_file.endswith('?mode=ro') |
| 122 | |
| 123 | @property |
| 124 | def base_name(self): |
| 125 | return os.path.basename(self.filename) |
| 126 | |
| 127 | @property |
| 128 | def created(self): |
| 129 | stat = os.stat(self.filename) |
| 130 | return datetime.datetime.fromtimestamp(stat.st_ctime) |
| 131 | |
| 132 | @property |
| 133 | def modified(self): |
| 134 | stat = os.stat(self.filename) |
| 135 | return datetime.datetime.fromtimestamp(stat.st_mtime) |
| 136 | |
| 137 | @property |
| 138 | def size_on_disk(self): |
| 139 | stat = os.stat(self.filename) |
| 140 | return stat.st_size |
| 141 | |
| 142 | def get_indexes(self, table): |
| 143 | return self._database.get_indexes(table) |
| 144 | |
| 145 | def get_all_indexes(self): |
| 146 | cursor = self.query( |
| 147 | 'SELECT name, sql FROM sqlite_master ' |
| 148 | 'WHERE type = ? ORDER BY name', |
| 149 | ('index',)) |
| 150 | return [IndexMetadata(row[0], row[1], None, None, None) |
| 151 | for row in cursor.fetchall()] |
| 152 | |
| 153 | def get_columns(self, table): |
| 154 | return self._database.get_columns(table) |
| 155 | |
| 156 | def get_foreign_keys(self, table): |
| 157 | return self._database.get_foreign_keys(table) |
| 158 | |
| 159 | def get_triggers(self, table): |
| 160 | cursor = self.query( |
| 161 | 'SELECT name, sql FROM sqlite_master ' |
| 162 | 'WHERE type = ? AND tbl_name = ?', |
| 163 | ('trigger', table)) |
no outgoing calls
no test coverage detected