diff --git a/packages/database-pg/src/index.ts b/packages/database-pg/src/index.ts index 2c99a4e9c..e1f814f0c 100644 --- a/packages/database-pg/src/index.ts +++ b/packages/database-pg/src/index.ts @@ -77,7 +77,10 @@ export class PostgresDatabaseClient implements DB.DatabaseClient { } public async delete(options: DB.DeleteDatabaseOptions): Promise<{ subrc: number; dbcnt: number; }> { - const sql = `DELETE FROM ${options.table} WHERE ${options.where}`; + let sql = `DELETE FROM ${options.table}`; + if (options.where !== "") { + sql += ` WHERE ${options.where}`; + } let subrc = 0; let dbcnt = 0; diff --git a/packages/database-sqlite/src/index.ts b/packages/database-sqlite/src/index.ts index 7eeb678fe..b7c2dce11 100644 --- a/packages/database-sqlite/src/index.ts +++ b/packages/database-sqlite/src/index.ts @@ -56,7 +56,10 @@ export class SQLiteDatabaseClient implements DB.DatabaseClient { } public async delete(options: DB.DeleteDatabaseOptions) { - const sql = `DELETE FROM ${options.table} WHERE ${options.where}`; + let sql = `DELETE FROM ${options.table}`; + if (options.where !== "") { + sql += ` WHERE ${options.where}`; + } let subrc = 0; let dbcnt = 0; diff --git a/packages/runtime/src/statements/delete_database.ts b/packages/runtime/src/statements/delete_database.ts index 95044df7f..75c1098b8 100644 --- a/packages/runtime/src/statements/delete_database.ts +++ b/packages/runtime/src/statements/delete_database.ts @@ -44,17 +44,15 @@ export async function deleteDatabase(table: string | ICharacter, options: IDelet abap.builtin.sy.get().subrc.set(subrc); // @ts-ignore abap.builtin.sy.get().dbcnt.set(dbcnt); - } else if (options.where) { + } else { const {subrc, dbcnt} = await context.defaultDB().delete({ table: buildDbTableName(table), - where: options.where, + where: options.where || "", }); // @ts-ignore abap.builtin.sy.get().subrc.set(subrc); // @ts-ignore abap.builtin.sy.get().dbcnt.set(dbcnt); - } else { - throw "deleteDatabase todo"; } } \ No newline at end of file diff --git a/packages/transpiler/src/statements/delete_database.ts b/packages/transpiler/src/statements/delete_database.ts index 5104f791e..d2e60b16c 100644 --- a/packages/transpiler/src/statements/delete_database.ts +++ b/packages/transpiler/src/statements/delete_database.ts @@ -9,7 +9,7 @@ export class DeleteDatabaseTranspiler implements IStatementTranspiler { public transpile(node: abaplint.Nodes.StatementNode, traversal: Traversal): Chunk { const dbtab = node.findFirstExpression(abaplint.Expressions.DatabaseTable); if (dbtab === undefined) { - throw new Error("internal error, InsertDatabaseTranspiler"); + throw new Error("internal error, DeleteDatabaseTranspiler"); } const table = new DatabaseTableTranspiler(false).transpile(dbtab, traversal); diff --git a/test/database.ts b/test/database.ts index b5faa3479..69e190604 100644 --- a/test/database.ts +++ b/test/database.ts @@ -144,6 +144,28 @@ describe("Top level tests, Database", () => { }); }); + it.skip("test, DELETE no conditions", async () => { + const code = ` + DATA tab TYPE STANDARD TABLE OF t100 WITH DEFAULT KEY. + DATA row LIKE LINE OF tab. + + row-arbgb = 'SDFDEL'. + APPEND row TO tab. + MODIFY t100 FROM TABLE tab. + + DELETE FROM t100. + + SELECT SINGLE * FROM t100 INTO row. + WRITE / sy-subrc.`; + const files = [ + {filename: "zfoobar.prog.abap", contents: code}, + {filename: "t100.tabl.xml", contents: tabl_t100xml}]; + await runAllDatabases(abap, files, () => { + const cons = abap.console.get(); + expect(cons).to.equal("4"); + }); + }); + it("SELECT SINGLE, WHERE char constant", async () => { const code = ` DATA ls_result TYPE t100.