Skip to content

Commit

Permalink
Fix deleteFrom syntax and testing (#31)
Browse files Browse the repository at this point in the history
  • Loading branch information
svemat01 authored Jan 4, 2022
1 parent b242386 commit a837e74
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 15 deletions.
44 changes: 44 additions & 0 deletions __tests__/live/deleteFrom.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { ScylloClient } from "../../lib";

type User = {
username: string,
uid: number
}

let DB: ScylloClient<{ 'users': User }>;

beforeAll(async () => {
DB = new ScylloClient({
client: {
contactPoints: [
'localhost:9042'
],
localDataCenter: 'datacenter1',
keyspace: 'scyllojestsuite'
}
});
await DB.awaitConnection();
});

it('Can delete a row from the database', async () => {
await DB.insertInto('users', {uid: 432894398023546, username: 'Jest2'})
expect(await DB.deleteFrom('users', '*', {uid: 432894398023546}));
});

it('Can delete a single field from the database', async () => {
await DB.insertInto('users', {uid: 65098546897342, username: 'Jest3'})
expect(await DB.deleteFrom('users', ['username'], {uid: 65098546897342}));
});

it('Expects deleting a non existent row to throw error', async () => {
expect.assertions(1);
try {
await DB.deleteFrom('users', '*', {uid: 949575482946512, username: 'ThisUserShouldNotExist'});
} catch (e) {
expect(e).toBeTruthy();
}
});

afterAll(async () => {
await DB.shutdown();
});
14 changes: 9 additions & 5 deletions __tests__/raw/deleteFromRaw.spec.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
import { selectOneFromRaw } from "../../lib";
import { deleteFromRaw } from "../../lib";

// fix
it('Can insert a user into the database', async () => {
expect(selectOneFromRaw<{'users': {uid: number, username: string}}, 'users'>('scyllo', 'users', '*', {uid: 1234567890, username: 'Jest'})).toEqual({query: 'SELECT * FROM scyllo.users WHERE uid=? AND username=? LIMIT 1', args: [1234567890, 'Jest']});
it('Can delete whole row', async () => {
expect(deleteFromRaw<{'users': {uid: number, username: string}}, 'users', 'uid' | 'username', 'uid' | 'username'>('scyllo', 'users', '*', {uid: 1234567890, username: 'Jest'})).toEqual({query: 'DELETE FROM scyllo.users WHERE uid=? AND username=?', args: [1234567890, 'Jest']});
});

it('Can add extra args to query', async () => {
expect(selectOneFromRaw<{'users': {uid: number, username: string}}, 'users'>('scyllo', 'users', '*', {uid: 1234567890, username: 'Jest'}, "ALLOW FILTERING")).toEqual({query: 'SELECT * FROM scyllo.users WHERE uid=? AND username=? LIMIT 1 ALLOW FILTERING', args: [1234567890, 'Jest']});
it('Can delete single field', async () => {
expect(deleteFromRaw<{'users': {uid: number, username: string}}, 'users', 'uid' | 'username', 'uid' | 'username'>('scyllo', 'users', ['username'], {uid: 1234567890, username: 'Jest'})).toEqual({query: 'DELETE username FROM scyllo.users WHERE uid=? AND username=?', args: [1234567890, 'Jest']});
});

it('Can delete multiple fields', async () => {
expect(deleteFromRaw<{'users': {uid: number, username: string}}, 'users', 'uid' | 'username', 'uid' | 'username'>('scyllo', 'users', ['username', 'uid'], {uid: 1234567890, username: 'Jest'})).toEqual({query: 'DELETE username,uid FROM scyllo.users WHERE uid=? AND username=?', args: [1234567890, 'Jest']});
});
7 changes: 4 additions & 3 deletions src/BatchBuilder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,14 +86,15 @@ export class BatchBuilder<Tables extends TableScheme> {

deleteFrom<
Table extends keyof Tables,
ColumnName extends keyof Tables[Table]
ColumnName extends keyof Tables[Table],
DeletedColumnName extends keyof Tables[Table]
>(
table: Table,
fields: '*' | ColumnName[],
fields: '*' | DeletedColumnName[],
criteria: { [key in ColumnName]?: Tables[Table][key] | string },
extra?: string
) {
const query = deleteFromRaw<Tables, Table, ColumnName>(
const query = deleteFromRaw<Tables, Table, ColumnName, DeletedColumnName>(
this.keyspace,
table,
fields,
Expand Down
9 changes: 5 additions & 4 deletions src/QueryBuilder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,16 +99,17 @@ export const deleteFromRaw = <
TableMap extends TableScheme,
TableName extends keyof TableMap,
ColumnName extends keyof TableMap[TableName],
DeletedColumnName extends keyof TableMap[TableName],
>(
keyspace: string,
table: TableName,
fields: '*' | ColumnName[],
fields: '*' | DeletedColumnName[],
criteria: { [key in ColumnName]?: TableMap[TableName][key] | string },
extra?: string,
): QueryBuild => ({
query: `DELETE ${
fields == '*' ? '' : fields.join(',')
} ${keyspace}.${table} ${
query: `DELETE${
fields == '*' ? '' : ' ' + fields.join(',')
} FROM ${keyspace}.${table} ${
criteria && Object.keys(criteria).length > 0
? 'WHERE ' +
Object.keys(criteria)
Expand Down
7 changes: 4 additions & 3 deletions src/ScylloClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -251,14 +251,15 @@ export class ScylloClient<Tables extends TableScheme> {
*/
async deleteFrom<
Table extends keyof Tables,
ColumnName extends keyof Tables[Table]
ColumnName extends keyof Tables[Table],
DeletedColumnName extends keyof Tables[Table]
>(
table: Table,
fields: '*' | ColumnName[],
fields: '*' | DeletedColumnName[],
criteria: { [key in ColumnName]?: Tables[Table][key] | string },
extra?: string
): Promise<types.ResultSet> {
const query = deleteFromRaw<Tables, Table, ColumnName>(
const query = deleteFromRaw<Tables, Table, ColumnName, DeletedColumnName>(
this.keyspace,
table,
fields,
Expand Down

0 comments on commit a837e74

Please sign in to comment.