Skip to content

Commit

Permalink
add rename column
Browse files Browse the repository at this point in the history
  • Loading branch information
invisal committed Oct 11, 2024
1 parent b4d5585 commit 790b20a
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 8 deletions.
42 changes: 35 additions & 7 deletions src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ export interface QueryBuilderInternal {
oldName?: string;
newName?: string;
}[];

whereClauses: WhereClaues;
joins?: string[];
data?: Record<string, unknown>;
Expand Down Expand Up @@ -304,6 +305,34 @@ class QueryBuilderDropTable extends IQueryBuilder {
}
}

class QueryBuilderAlterTable extends IQueryBuilder {
state: QueryBuilderInternal = createBlankState(
QueryBuilderAction.ALTER_TABLE
);

constructor(connection: Connection, tableName: string) {
super(connection);
this.state.table = tableName;
}

renameTable(newTableName: string) {
this.state.originalValue = this.state.table;
this.state.newValue = newTableName;
return this;
}

renameColumn(columnName: string, newColumnName: string) {
this.state.action = QueryBuilderAction.RENAME_COLUMNS;
this.state.columns = [
{
oldName: columnName,
newName: newColumnName,
},
];
return this;
}
}

class QueryBuilder {
connection: Connection;

Expand Down Expand Up @@ -331,6 +360,10 @@ class QueryBuilder {
return new QueryBuilderDropTable(this.connection, tableName);
}

alterTable(tableName: string) {
return new QueryBuilderAlterTable(this.connection, tableName);
}

or(
...args: (WhereClaues | WhereCondition | WhereGenerator)[]
): WhereGenerator {
Expand Down Expand Up @@ -421,13 +454,8 @@ function buildQueryString(
// query
// ).query;
// break;
// case QueryBuilderAction.RENAME_COLUMNS:
// query.query = dialect.renameColumn(
// queryBuilder,
// queryType,
// query
// ).query;
// break;
case QueryBuilderAction.RENAME_COLUMNS:
return dialect.renameColumn(queryBuilder);
// case QueryBuilderAction.UPDATE_COLUMNS:
// query.query = dialect.updateColumn(
// queryBuilder,
Expand Down
31 changes: 30 additions & 1 deletion src/query-builder/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { QueryType } from '../query-params';
import {
OrderByClause,
QueryBuilderInternal,
Expand All @@ -16,6 +15,7 @@ interface Dialect {
// delete(builder: QueryBuilderInternal): Query;
createTable(builder: QueryBuilderInternal): Query;
dropTable(builder: QueryBuilderInternal): Query;
renameColumn(builder: QueryBuilderInternal): Query;
}

export enum ColumnDataType {
Expand Down Expand Up @@ -320,6 +320,35 @@ export abstract class AbstractDialect implements Dialect {
};
}

renameColumn(builder: QueryBuilderInternal): Query {
const tableName = builder.table;

if (!tableName) {
throw new Error(
'Table name is required to build a CREATE TABLE query.'
);
}

if (builder.columns.length !== 1) {
throw new Error('Exactly one column is required to rename.');
}

const column = builder.columns[0];

if (!column.oldName) {
throw new Error('Old column name is required to rename.');
}

if (!column.newName) {
throw new Error('New column name is required to rename.');
}

return {
query: `ALTER TABLE ${this.escapeId(tableName)} RENAME COLUMN ${this.escapeId(column.oldName)} TO ${this.escapeId(column.newName)}`,
parameters: [],
};
}

// delete(
// builder: QueryBuilderInternal,
// ): Query {
Expand Down
18 changes: 18 additions & 0 deletions tests/connections/connection.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -102,4 +102,22 @@ describe('Database Connection', () => {
{ id: 2, name: 'Outerbase', age: 30 },
]);
});

test('Rename table column', async () => {
await qb
.alterTable('persons')
.renameColumn('name', 'full_name')
.query();

const { data } = await qb
.select()
.from('persons')
.orderBy('id')
.query();

expect(data).toEqual([
{ id: 1, full_name: 'Visal In', age: 25 },
{ id: 2, full_name: 'Outerbase', age: 30 },
]);
});
});
11 changes: 11 additions & 0 deletions tests/units/query-builder/postgre.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -248,4 +248,15 @@ describe('Query Builder - Postgre Dialect', () => {
const { query } = qb().dropTable('persons').toQuery();
expect(query).toBe('DROP TABLE IF EXISTS "persons"');
});

test('Rename column', () => {
const { query } = qb()
.alterTable('persons')
.renameColumn('first_name', 'full_name')
.toQuery();

expect(query).toBe(
'ALTER TABLE "persons" RENAME COLUMN "first_name" TO "full_name"'
);
});
});

0 comments on commit 790b20a

Please sign in to comment.