Loading...
Loading...
Compare original and translation side by side
mkdir sqlite_introspect
cd sqlite_introspect
flutter create .
flutter pub add sqlite3 mustache_templatesqlite3mkdir sqlite_introspect
cd sqlite_introspect
flutter create .
flutter pub add sqlite3 mustache_templatesqlite3final Database db = sqlite3.openInMemory();db.dispose();final Database db = sqlite3.openInMemory();db.dispose();TableInfoclass TableInfo {
final String name;
final List<Map<String, dynamic>> fields;
final List<Map<String, dynamic>> indexes;
TableInfo({
required this.name,
required this.fields,
required this.indexes,
});
Map<String, dynamic> toJson() {
return {
'name': name,
'fields': [
for (var i = 0; i < fields.length; i++)
{
'index': i,
'table': name,
'isLast': i == fields.length - 1,
...fields[i],
},
],
'indexes': [
for (var i = 0; i < indexes.length; i++)
{
'index': i,
'table': name,
'isLast': i == indexes.length - 1,
...indexes[i],
},
],
};
}
}const template = '''
{{#tables}}
CREATE TABLE {{name}} (
{{#fields}}
{{name}} {{#type}} {{.}}{{/type}}{{#notnull}} NOT NULL{{/notnull}}{{#pk}} PRIMARY KEY{{/pk}}{{#dflt_value}} DEFAULT {{.}}{{/dflt_value}}{{^isLast}},{{/isLast}}
{{/fields}}
);
{{#indexes}}
CREATE {{#unique}} UNIQUE{{/unique}} {{name}}
ON {{table}}({{#values}} {{name}} {{/values}}{{^isLast}},{{/isLast}});
{{/indexes}}
{{/tables}}
''';TableInfoclass TableInfo {
final String name;
final List<Map<String, dynamic>> fields;
final List<Map<String, dynamic>> indexes;
TableInfo({
required this.name,
required this.fields,
required this.indexes,
});
Map<String, dynamic> toJson() {
return {
'name': name,
'fields': [
for (var i = 0; i < fields.length; i++)
{
'index': i,
'table': name,
'isLast': i == fields.length - 1,
...fields[i],
},
],
'indexes': [
for (var i = 0; i < indexes.length; i++)
{
'index': i,
'table': name,
'isLast': i == indexes.length - 1,
...indexes[i],
},
],
};
}
}const template = '''
{{#tables}}
CREATE TABLE {{name}} (
{{#fields}}
{{name}} {{#type}} {{.}}{{/type}}{{#notnull}} NOT NULL{{/notnull}}{{#pk}} PRIMARY KEY{{/pk}}{{#dflt_value}} DEFAULT {{.}}{{/dflt_value}}{{^isLast}},{{/isLast}}
{{/fields}}
);
{{#indexes}}
CREATE {{#unique}} UNIQUE{{/unique}} {{name}}
ON {{table}}({{#values}} {{name}} {{/values}}{{^isLast}},{{/isLast}});
{{/indexes}}
{{/tables}}
''';final tables = <TableInfo>[];
// Export table names
final tableNames = db
.select("SELECT name FROM sqlite_master WHERE type='table';")
.map((e) => e['name'] as String);
for (final t in tableNames) {
// Export column information
final info = db.select('PRAGMA table_info($t);');
final tbl = TableInfo(name: t, fields: [], indexes: []);
for (final c in info) {
tbl.fields.add(c);
}
// Export index names
final indexList = db.select('PRAGMA index_list($t);');
for (final index in indexList) {
final name = index['name'] as String;
// Export index information
final infos = db.select('PRAGMA index_info($name);');
final indexValue = {...index, 'values': infos};
tbl.indexes.add(indexValue);
}
tables.add(tbl);
}final tables = <TableInfo>[];
// 导出表名
final tableNames = db
.select("SELECT name FROM sqlite_master WHERE type='table';")
.map((e) => e['name'] as String);
for (final t in tableNames) {
// 导出列信息
final info = db.select('PRAGMA table_info($t);');
final tbl = TableInfo(name: t, fields: [], indexes: []);
for (final c in info) {
tbl.fields.add(c);
}
// 导出索引名
final indexList = db.select('PRAGMA index_list($t);');
for (final index in indexList) {
final name = index['name'] as String;
// 导出索引信息
final infos = db.select('PRAGMA index_info($name);');
final indexValue = {...index, 'values': infos};
tbl.indexes.add(indexValue);
}
tables.add(tbl);
}final tml = Template(template);
final args = {"tables": tables.map((e) => e.toJson()).toList()};
final str = tml.renderString(args);
print(str);final tml = Template(template);
final args = {"tables": tables.map((e) => e.toJson()).toList()};
final str = tml.renderString(args);
print(str);