118 lines
2.9 KiB
TypeScript
118 lines
2.9 KiB
TypeScript
import type { ColumnInfo, DatabaseType, ForeignKeyInfo, IndexInfo, TriggerInfo } from "@/types/database.ts";
|
|
|
|
export interface ColumnIdentity {
|
|
generation?: "BY DEFAULT" | "ALWAYS";
|
|
seed?: number;
|
|
increment?: number;
|
|
}
|
|
|
|
export interface ColumnExtra {
|
|
autoIncrement?: boolean;
|
|
onUpdateCurrentTimestamp?: boolean;
|
|
identity?: ColumnIdentity;
|
|
manticoreIndexed?: boolean;
|
|
manticoreStored?: boolean;
|
|
manticoreAttribute?: boolean;
|
|
manticoreSecondaryIndex?: boolean;
|
|
}
|
|
|
|
export interface EditableStructureColumn {
|
|
id: string;
|
|
name: string;
|
|
dataType: string;
|
|
enumValues?: string[];
|
|
isNullable: boolean;
|
|
defaultValue: string;
|
|
comment: string;
|
|
isPrimaryKey: boolean;
|
|
extra: ColumnExtra;
|
|
characterSet?: string;
|
|
collation?: string;
|
|
original?: ColumnInfo;
|
|
originalPosition?: number;
|
|
markedForDrop: boolean;
|
|
}
|
|
|
|
export interface EditableStructureIndex {
|
|
id: string;
|
|
name: string;
|
|
columns: string[];
|
|
nameEdited?: boolean;
|
|
isUnique: boolean;
|
|
isPrimary: boolean;
|
|
filter: string;
|
|
indexType: string;
|
|
includedColumns: string[];
|
|
comment: string;
|
|
/** Build the index with PostgreSQL `CREATE INDEX CONCURRENTLY` (PostgreSQL only, default off). */
|
|
concurrently?: boolean;
|
|
original?: IndexInfo;
|
|
markedForDrop: boolean;
|
|
}
|
|
|
|
export interface EditableStructureForeignKey {
|
|
id: string;
|
|
name: string;
|
|
column: string;
|
|
refSchema: string;
|
|
refTable: string;
|
|
refColumn: string;
|
|
onUpdate: string;
|
|
onDelete: string;
|
|
original?: ForeignKeyInfo;
|
|
markedForDrop: boolean;
|
|
}
|
|
|
|
export interface EditableStructureTrigger {
|
|
id: string;
|
|
name: string;
|
|
timing: string;
|
|
event: string;
|
|
statement: string;
|
|
original?: TriggerInfo;
|
|
markedForDrop: boolean;
|
|
}
|
|
|
|
export interface BuildTableStructureChangeSqlOptions {
|
|
databaseType?: DatabaseType;
|
|
schema?: string;
|
|
tableName: string;
|
|
columns: EditableStructureColumn[];
|
|
indexes: EditableStructureIndex[];
|
|
foreignKeys?: EditableStructureForeignKey[];
|
|
triggers?: EditableStructureTrigger[];
|
|
tableComment?: string;
|
|
originalTableComment?: string;
|
|
/** The target table is a PostgreSQL partitioned parent (`relkind = 'p'`);
|
|
* the backend rejects `CREATE INDEX CONCURRENTLY` on such tables (fail
|
|
* closed) instead of downgrading to a blocking `CREATE INDEX`. */
|
|
partitioned?: boolean;
|
|
/** When true, the connection is GaussDB M-mode which uses MySQL-compatible
|
|
* SQL dialect with backtick quoting. */
|
|
isGaussdbMMode?: boolean;
|
|
}
|
|
|
|
export interface TableStructureChangeSql {
|
|
statements: string[];
|
|
warnings: string[];
|
|
}
|
|
|
|
export interface BuildTableOwnerChangeSqlOptions {
|
|
databaseType?: DatabaseType;
|
|
schema?: string;
|
|
tableName: string;
|
|
owner: string;
|
|
originalOwner: string;
|
|
}
|
|
|
|
export interface SqliteTableStructureChangePreview extends TableStructureChangeSql {
|
|
schemaRevision: string;
|
|
}
|
|
|
|
export interface BuildSingleColumnAlterSqlOptions {
|
|
databaseType?: DatabaseType;
|
|
schema?: string;
|
|
tableName: string;
|
|
column: EditableStructureColumn;
|
|
}
|