import { Type } from "@simplysm/sd-core-common"; import { TQueryValue, TSdOrmDataType } from "../../types"; export type TQueryBuilderValue = string | ISelectQueryDef | TQueryBuilderValue[]; export type TQueryDef = (ISelectQueryDef & { type: "select"; }) | (IInsertIntoQueryDef & { type: "insertInto"; }) | (IInsertQueryDef & { type: "insert"; }) | (IUpdateQueryDef & { type: "update"; }) | (IDeleteQueryDef & { type: "delete"; }) | (IInsertIfNotExistsQueryDef & { type: "insertIfNotExists"; }) | (IUpsertQueryDef & { type: "upsert"; }) | (ITruncateTableQueryDef & { type: "truncateTable"; }) | (ICreateDatabaseIfNotExistsQueryDef & { type: "createDatabaseIfNotExists"; }) | (IClearDatabaseIfExistsQueryDef & { type: "clearDatabaseIfExists"; }) | (IGetDatabaseInfoDef & { type: "getDatabaseInfo"; }) | (IGetTableInfosDef & { type: "getTableInfos"; }) | (IGetTableInfoDef & { type: "getTableInfo"; }) | (IGetTableColumnInfosDef & { type: "getTableColumnInfos"; }) | (IGetTablePrimaryKeysDef & { type: "getTablePrimaryKeys"; }) | (IGetTableForeignKeysDef & { type: "getTableForeignKeys"; }) | (IGetTableIndexesDef & { type: "getTableIndexes"; }) | (ICreateTableQueryDef & { type: "createTable"; }) | (ICreateViewQueryDef & { type: "createView"; }) | (ICreateProcedureQueryDef & { type: "createProcedure"; }) | (IDropTableQueryDef & { type: "dropTable"; }) | (IAddColumnQueryDef & { type: "addColumn"; }) | (IRemoveColumnQueryDef & { type: "removeColumn"; }) | (IModifyColumnQueryDef & { type: "modifyColumn"; }) | (IRenameColumnQueryDef & { type: "renameColumn"; }) | (IDropPrimaryKeyQueryDef & { type: "dropPrimaryKey"; }) | (IAddPrimaryKeyQueryDef & { type: "addPrimaryKey"; }) | (IAddForeignKeyQueryDef & { type: "addForeignKey"; }) | (IRemoveForeignKeyQueryDef & { type: "removeForeignKey"; }) | (ICreateIndexQueryDef & { type: "createIndex"; }) | (IDropIndexQueryDef & { type: "dropIndex"; }) | (IConfigIdentityInsertQueryDef & { type: "configIdentityInsert"; }) | (IConfigForeignKeyCheckQueryDef & { type: "configForeignKeyCheck"; }) | (IExecuteProcedureQueryDef & { type: "executeProcedure"; }); export type TDbDateSeparator = "year" | "quarter" | "month" | "day" | "week" | "hour" | "minute" | "second" | "millisecond" | "microsecond" | "nanosecond"; export interface IQueryTableNameDef { database?: string; schema?: string; name: string; } export interface IQueryColumnDef { name: string; dataType: Type | TSdOrmDataType | string; autoIncrement?: boolean; nullable?: boolean; } export interface IQueryPrimaryKeyDef { columnName: string; orderBy: "ASC" | "DESC"; } export interface ICreateTableQueryDef { table: IQueryTableNameDef; columns: IQueryColumnDef[]; primaryKeys: IQueryPrimaryKeyDef[]; } export interface ICreateViewQueryDef { table: IQueryTableNameDef; queryDef: ISelectQueryDef; } export interface ICreateProcedureQueryDef { table: IQueryTableNameDef; columns: IQueryColumnDef[]; procedure: string; } export interface IExecuteProcedureQueryDef { procedure: IQueryTableNameDef; record: Record; } export interface ICreateDatabaseIfNotExistsQueryDef { database: string; } export interface IClearDatabaseIfExistsQueryDef { database: string; } export interface IGetDatabaseInfoDef { database: string; } export interface IGetTableInfosDef { database?: string; schema?: string; } export interface IGetTableInfoDef { table: IQueryTableNameDef; } export interface IGetTableColumnInfosDef { table: IQueryTableNameDef; } export interface IGetTablePrimaryKeysDef { table: IQueryTableNameDef; } export interface IGetTableForeignKeysDef { table: IQueryTableNameDef; } export interface IGetTableIndexesDef { table: IQueryTableNameDef; } export interface IDropTableQueryDef { table: IQueryTableNameDef; } export interface IAddColumnQueryDef { table: IQueryTableNameDef; column: IQueryColumnDef & { defaultValue?: TQueryBuilderValue; }; } export interface IRemoveColumnQueryDef { table: IQueryTableNameDef; column: string; } export interface IModifyColumnQueryDef { table: IQueryTableNameDef; column: IQueryColumnDef & { defaultValue?: TQueryBuilderValue; }; } export interface IRenameColumnQueryDef { table: IQueryTableNameDef; prevName: string; nextName: string; } export interface IDropPrimaryKeyQueryDef { table: IQueryTableNameDef; } export interface IAddPrimaryKeyQueryDef { table: IQueryTableNameDef; columns: string[]; } export interface IAddForeignKeyQueryDef { table: IQueryTableNameDef; foreignKey: { name: string; fkColumns: string[]; targetTable: IQueryTableNameDef; targetPkColumns: string[]; }; } export interface IRemoveForeignKeyQueryDef { table: IQueryTableNameDef; foreignKey: string; } export interface ICreateIndexQueryDef { table: IQueryTableNameDef; index: { name: string; columns: { name: string; orderBy: "ASC" | "DESC"; unique: boolean; }[]; }; } export interface IDropIndexQueryDef { table: IQueryTableNameDef; index: string; } export interface IConfigIdentityInsertQueryDef { table: IQueryTableNameDef; state: "on" | "off"; } export interface IConfigForeignKeyCheckQueryDef { table: IQueryTableNameDef; useCheck: boolean; } export interface ISelectQueryDef { from?: string | ISelectQueryDef | ISelectQueryDef[]; as?: string; join?: IJoinQueryDef[]; distinct?: true; where?: TQueryBuilderValue[]; top?: number; groupBy?: TQueryBuilderValue[]; having?: TQueryBuilderValue[]; orderBy?: [TQueryBuilderValue, "ASC" | "DESC"][]; limit?: [number, number]; pivot?: { valueColumn: TQueryBuilderValue; pivotColumn: TQueryBuilderValue; pivotKeys: string[]; }; unpivot?: { valueColumn: TQueryBuilderValue; pivotColumn: TQueryBuilderValue; pivotKeys: string[]; }; lock?: boolean; sample?: number; select?: Record; } export interface IJoinQueryDef extends ISelectQueryDef { isCustomSelect: boolean; } export interface IInsertIntoQueryDef extends ISelectQueryDef { select: Record; target: string; } export interface IInsertQueryDef { from: string; record: Record; output?: string[]; } export interface IUpdateQueryDef extends ISelectQueryDef { from: string; record: Record; output?: string[]; } export interface IInsertIfNotExistsQueryDef { from: string; as: string; insertRecord: Record; where: TQueryBuilderValue[]; output?: string[]; } export interface IUpsertQueryDef { from: string; as: string; updateRecord: Record; insertRecord: Record; where: TQueryBuilderValue[]; output?: string[]; aiKeyName?: string; pkColNames: string[]; } export interface ITruncateTableQueryDef { table: IQueryTableNameDef; } export interface IDeleteQueryDef extends ISelectQueryDef { from: string; output?: string[]; }