createTable method
Implementation
Future<Table> createTable(String name, Schema schema) async {
if (tables.containsKey(name)) {
throw Exception('Table "$name" already exists');
}
final meta = TableMeta(name: name, schema: schema);
final legacyIndexes = <String, BTree>{};
final binaryIndexes = <String, BTreeV2>{};
for (final col in schema.columns) {
if (col.isIndexed || col.isPrimaryKey) {
legacyIndexes[col.name] =
BTree(path: '$dir/idx_${name}_${col.name}.json');
binaryIndexes[col.name] = BTreeV2.empty();
}
}
final table = Table(
meta: meta, cache: cache, indexes: legacyIndexes, indexDir: dir);
tables[name] = table;
pageTables[name] = PageTable(meta: meta, cache: cache, indexDir: dir);
mvccTables[name] = MvccTable(name);
btreeIndexes[name] = binaryIndexes;
// WAL-before-data (INV-1)
final lsn = await wal.append(WalOp.createTable, name, schema.toJson());
pager.setWalFlushedLsn(lsn);
await _saveCatalog();
await _maybeAutoCheckpoint();
return table;
}