Skip to content

Commit

Permalink
Merge pull request #146 from Garthi/feature/migration_index_upgrade
Browse files Browse the repository at this point in the history
index handling for after table
  • Loading branch information
dukefirehawk authored Jul 29, 2024
2 parents 7cbdcb0 + ea94d33 commit 6bf4ad4
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 3 deletions.
4 changes: 4 additions & 0 deletions packages/orm/angel_migration/lib/src/table.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'package:angel3_orm/angel3_orm.dart';

import 'column.dart';

abstract class Table {
Expand Down Expand Up @@ -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();
}
36 changes: 35 additions & 1 deletion packages/orm/angel_migration_runner/lib/src/mariadb/table.dart
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down Expand Up @@ -194,4 +195,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');
}
}
36 changes: 35 additions & 1 deletion packages/orm/angel_migration_runner/lib/src/mysql/table.dart
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down Expand Up @@ -200,4 +201,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');
}
}
36 changes: 35 additions & 1 deletion packages/orm/angel_migration_runner/lib/src/postgres/table.dart
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down Expand Up @@ -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"');
}
}

0 comments on commit 6bf4ad4

Please sign in to comment.