106 lines
3.3 KiB
Dart
106 lines
3.3 KiB
Dart
import 'package:tuuli_api/tuuli_api.dart';
|
|
|
|
extension ColumnsParser on TableDefinition {
|
|
List<DBColumnDefinition> get parsedColumns {
|
|
return columns
|
|
.split(",")
|
|
.map((e) {
|
|
final parts = e.split(":");
|
|
final name = parts[0];
|
|
switch (parts[1]) {
|
|
case "serial":
|
|
return PrimarySerialColumnDefinition(name);
|
|
case "str":
|
|
return TextColumnDefinition(
|
|
name,
|
|
parts.contains("unique"),
|
|
parts.contains("default"),
|
|
);
|
|
case "bool":
|
|
return BooleanColumnDefinition(
|
|
name,
|
|
parts.contains("unique"),
|
|
parts.contains("default"),
|
|
);
|
|
case "datetime":
|
|
return TimestampColumnDefinition(
|
|
name,
|
|
parts.contains("unique"),
|
|
parts.contains("default"),
|
|
);
|
|
case "float":
|
|
return DoubleColumnDefinition(
|
|
name,
|
|
parts.contains("unique"),
|
|
parts.contains("default"),
|
|
);
|
|
case "int":
|
|
return IntegerColumnDefinition(
|
|
name,
|
|
parts.contains("unique"),
|
|
parts.contains("default"),
|
|
);
|
|
case "int-user":
|
|
return UserRefColumnDefinition(name);
|
|
case "int-asset":
|
|
return AssetRefColumnDefinition(name);
|
|
}
|
|
|
|
return null;
|
|
})
|
|
.whereType<DBColumnDefinition>()
|
|
.toList(growable: false);
|
|
}
|
|
}
|
|
|
|
abstract class DBColumnDefinition {
|
|
final String name;
|
|
final bool unique;
|
|
final bool hasDefault;
|
|
|
|
DBColumnDefinition({
|
|
required this.name,
|
|
required this.unique,
|
|
required this.hasDefault,
|
|
});
|
|
}
|
|
|
|
class PrimarySerialColumnDefinition extends DBColumnDefinition {
|
|
PrimarySerialColumnDefinition(String name)
|
|
: super(name: name, unique: false, hasDefault: false);
|
|
}
|
|
|
|
class TextColumnDefinition extends DBColumnDefinition {
|
|
TextColumnDefinition(String name, bool unique, bool hasDefault)
|
|
: super(name: name, unique: unique, hasDefault: hasDefault);
|
|
}
|
|
|
|
class BooleanColumnDefinition extends DBColumnDefinition {
|
|
BooleanColumnDefinition(String name, bool unique, bool hasDefault)
|
|
: super(name: name, unique: unique, hasDefault: hasDefault);
|
|
}
|
|
|
|
class TimestampColumnDefinition extends DBColumnDefinition {
|
|
TimestampColumnDefinition(String name, bool unique, bool hasDefault)
|
|
: super(name: name, unique: unique, hasDefault: hasDefault);
|
|
}
|
|
|
|
class DoubleColumnDefinition extends DBColumnDefinition {
|
|
DoubleColumnDefinition(String name, bool unique, bool hasDefault)
|
|
: super(name: name, unique: unique, hasDefault: hasDefault);
|
|
}
|
|
|
|
class IntegerColumnDefinition extends DBColumnDefinition {
|
|
IntegerColumnDefinition(String name, bool unique, bool hasDefault)
|
|
: super(name: name, unique: unique, hasDefault: hasDefault);
|
|
}
|
|
|
|
class UserRefColumnDefinition extends DBColumnDefinition {
|
|
UserRefColumnDefinition(String name)
|
|
: super(name: name, unique: false, hasDefault: false);
|
|
}
|
|
|
|
class AssetRefColumnDefinition extends DBColumnDefinition {
|
|
AssetRefColumnDefinition(String name)
|
|
: super(name: name, unique: false, hasDefault: false);
|
|
}
|