add methods to add and drop indexes with alter table

This commit is contained in:
Garth 2024-07-28 10:13:31 +02:00
parent 564fc5953c
commit ea94d33b87
4 changed files with 109 additions and 3 deletions

View file

@ -1,4 +1,5 @@
import 'package:angel3_orm/angel3_orm.dart';
import 'column.dart';
abstract class Table {
@ -49,4 +50,7 @@ abstract class MutableTable extends Table {
void changeColumnType(String name, ColumnType type);
void dropNotNull(String name);
void setNotNull(String name);
void addIndex(String name, List<String> columns, IndexType type);
void dropIndex(String name);
void dropPrimaryIndex();
}

View file

@ -1,6 +1,7 @@
import 'dart:collection';
import 'package:angel3_orm/angel3_orm.dart';
import 'package:angel3_migration/angel3_migration.dart';
import 'package:angel3_orm/angel3_orm.dart';
import 'package:charcode/ascii.dart';
abstract class MariaDbGenerator {
@ -170,4 +171,37 @@ class MariaDbAlterTable extends Table implements MutableTable {
void rename(String newName) {
_stack.add('RENAME TO $newName');
}
@override
void addIndex(String name, List<String> columns, IndexType type) {
String indexType = '';
switch (type) {
case IndexType.primaryKey:
indexType = 'PRIMARY KEY';
break;
case IndexType.unique:
indexType = 'UNIQUE INDEX IF NOT EXISTS `$name`';
break;
case IndexType.standardIndex:
case IndexType.none:
indexType = 'INDEX IF NOT EXISTS `$name`';
break;
}
// mask the column names, is more safety
columns.map((column) => '`$column`');
_stack.add('ADD $indexType (${columns.join(',')})');
}
@override
void dropIndex(String name) {
_stack.add('DROP INDEX IF EXISTS `$name`');
}
@override
void dropPrimaryIndex() {
_stack.add('DROP PRIMARY KEY');
}
}

View file

@ -1,6 +1,7 @@
import 'dart:collection';
import 'package:angel3_orm/angel3_orm.dart';
import 'package:angel3_migration/angel3_migration.dart';
import 'package:angel3_orm/angel3_orm.dart';
import 'package:charcode/ascii.dart';
abstract class MySqlGenerator {
@ -169,4 +170,37 @@ class MysqlAlterTable extends Table implements MutableTable {
void rename(String newName) {
_stack.add('RENAME TO $newName');
}
@override
void addIndex(String name, List<String> columns, IndexType type) {
String indexType = '';
switch (type) {
case IndexType.primaryKey:
indexType = 'PRIMARY KEY';
break;
case IndexType.unique:
indexType = 'UNIQUE INDEX `$name`';
break;
case IndexType.standardIndex:
case IndexType.none:
indexType = 'INDEX `$name`';
break;
}
// mask the column names, is more safety
columns.map((column) => '`$column`');
_stack.add('ADD $indexType (${columns.join(',')})');
}
@override
void dropIndex(String name) {
_stack.add('DROP INDEX `$name`');
}
@override
void dropPrimaryIndex() {
_stack.add('DROP PRIMARY KEY');
}
}

View file

@ -1,6 +1,7 @@
import 'dart:collection';
import 'package:angel3_orm/angel3_orm.dart';
import 'package:angel3_migration/angel3_migration.dart';
import 'package:angel3_orm/angel3_orm.dart';
import 'package:charcode/ascii.dart';
abstract class PostgresGenerator {
@ -165,4 +166,37 @@ class PostgresAlterTable extends Table implements MutableTable {
void rename(String newName) {
_stack.add('RENAME TO "$newName"');
}
@override
void addIndex(String name, List<String> columns, IndexType type) {
String indexType = '';
switch (type) {
case IndexType.primaryKey:
indexType = 'PRIMARY KEY';
break;
case IndexType.unique:
indexType = 'CONSTRAINT "$name" UNIQUE';
break;
case IndexType.standardIndex:
case IndexType.none:
// not working with postgres
return;
}
// mask the column names, is more safety
columns.map((column) => '"$column"');
_stack.add('ADD $indexType (${columns.join(',')})');
}
@override
void dropIndex(String name) {
_stack.add('DROP CONSTRAINT "$name"');
}
@override
void dropPrimaryIndex() {
_stack.add('DROP CONSTRAINT "${tableName}_pkey"');
}
}