sql-ddl-query-generator
Version:
To make it easy for you to get started with GitLab, here's a list of recommended next steps.
69 lines (54 loc) • 2.63 kB
text/typescript
import {IColumn} from './index.d';
export type operation = "ADD" | "DROP" | "MODIFY";
export function createDatabaseOrExercise(categoryName: string) {
return 'CREATE DATABASE ' + categoryName;
}
export function createSchema(schemaName: string) {
return 'CREATE SCHEMA ' + schemaName;
}
export function drop(tableName: string) {
return 'DROP TABLE ' + tableName;
}
export async function createTable(table: string, columns?: IColumn[]) {
const operation = 'CREATE TABLE';
let query = '';
if (columns) {
let tableColumns = '';
for (const column of columns) {
if (column.constraints.length) {
for (const constraint of column.constraints) {
tableColumns += `\n${column.fieldName} ${column.datatype} ${constraint} ,`
}
} else {
tableColumns += `\n${column.fieldName} ${column.datatype} ,`
}
}
query = `${operation} ${table} (${tableColumns.substring(0, tableColumns.length - 2)})`;
return query
}
query = `${operation} ${table}`;
return query;
}
export function alter(tablename: string, fields: any, operation: operation, modifyTableConstraints: boolean) {
if (operation === 'ADD') {
if (modifyTableConstraints) {
if (fields.constraint === "FOREIGN KEY" || fields.constraint === "UNIQUE FOREIGN KEY") {
return `ALTER TABLE ${tablename} ${operation} CONSTRAINT ${fields.constraint} (${fields.target}) REFERENCES ${fields.sourceTable} (${fields.source})`
} return `ALTER TABLE ${tablename} ${operation} CONSTRAINT ${fields.constraint} (${fields.column})`;
} else return `ALTER TABLE ${tablename} ${operation} (${fields.columnname} ${fields.datatype})`;
}
else if (operation === 'DROP') {
return modifyTableConstraints ? `ALTER TABLE ${tablename} ${operation} CONSTRAINT ${fields.constraint} (${fields.column})` :
`ALTER TABLE ${tablename} ${operation} (${fields.columnname})`
}
else if (operation === 'MODIFY') {
return modifyTableConstraints ? `ALTER TABLE ${tablename} ${operation} CONSTRAINT ${fields.constraint} (${fields.column})` :
`ALTER TABLE ${tablename} ${operation} (${fields.columnname} ${fields.datatype})`
}
}
export function truncate(tableName: string) {
return `TRUNCATE TABLE ${tableName}`;
}
export function rename(Old_Table_Name: string, New_Table_Name: string) {
return `RENAME TABLE ${Old_Table_Name} TO ${New_Table_Name}`;
}