Skip to content

Commit

Permalink
Add oracle DB statement field
Browse files Browse the repository at this point in the history
  • Loading branch information
blakeembrey committed Nov 28, 2023
1 parent ee664d6 commit af8b4be
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 6 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,12 @@ This package "just works" with [`pg`](https://www.npmjs.com/package/pg), [`mysql
mssql.query(query.strings, ...query.values);
```

### [OracleDB](https://github.com/oracle/node-oracledb)

```js
session.execute(query.statement, query.values);
```

### Stricter TypeScript

The default value is `unknown` to support [every possible input](https://github.com/blakeembrey/sql-template-tag/pull/26). If you want stricter TypeScript values you can create a new `sql` template tag function.
Expand Down
13 changes: 13 additions & 0 deletions src/index.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ describe("sql template tag", () => {

expect(query.sql).toEqual("SELECT * FROM books");
expect(query.text).toEqual("SELECT * FROM books");
expect(query.statement).toEqual("SELECT * FROM books");
expect(query.values).toEqual([]);
});

Expand All @@ -17,6 +18,7 @@ describe("sql template tag", () => {

expect(query.sql).toEqual("SELECT * FROM books");
expect(query.text).toEqual("SELECT * FROM books");
expect(query.statement).toEqual("SELECT * FROM books");
expect(query.values).toEqual([]);
});

Expand All @@ -26,16 +28,23 @@ describe("sql template tag", () => {

expect(query.sql).toEqual("SELECT * FROM books WHERE author = ?");
expect(query.text).toEqual("SELECT * FROM books WHERE author = $1");
expect(query.statement).toEqual("SELECT * FROM books WHERE author = :1");
expect(query.values).toEqual([name]);
});

it("should build sql with child sql statements", () => {
const subquery = sql`SELECT id FROM authors WHERE name = ${"Blake"}`;
const query = sql`SELECT * FROM books WHERE author_id IN (${subquery})`;

expect(query.sql).toEqual(
"SELECT * FROM books WHERE author_id IN (SELECT id FROM authors WHERE name = ?)"
);
expect(query.text).toEqual(
"SELECT * FROM books WHERE author_id IN (SELECT id FROM authors WHERE name = $1)"
);
expect(query.statement).toEqual(
"SELECT * FROM books WHERE author_id IN (SELECT id FROM authors WHERE name = :1)"
);
expect(query.values).toEqual(["Blake"]);
});

Expand All @@ -51,6 +60,9 @@ describe("sql template tag", () => {
expect(query.text).toEqual(
"SELECT * FROM books WHERE id IN ($1,$2,$3) OR author_id IN ($4,$5,$6)"
);
expect(query.statement).toEqual(
"SELECT * FROM books WHERE id IN (:1,:2,:3) OR author_id IN (:4,:5,:6)"
);
expect(query.values).toEqual([1, 2, 3, 1, 2, 3]);
});

Expand All @@ -59,6 +71,7 @@ describe("sql template tag", () => {

expect(query.sql).toEqual("SELECT * FROM books ");
expect(query.text).toEqual("SELECT * FROM books ");
expect(query.statement).toEqual("SELECT * FROM books ");
expect(query.values).toEqual([]);
});

Expand Down
22 changes: 16 additions & 6 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,16 +67,26 @@ export class Sql {
}

get text() {
let i = 1,
value = this.strings[0];
while (i < this.strings.length) value += `$${i}${this.strings[i++]}`;
const len = this.strings.length;
let i = 1;
let value = this.strings[0];
while (i < len) value += `$${i}${this.strings[i++]}`;
return value;
}

get sql() {
let i = 1,
value = this.strings[0];
while (i < this.strings.length) value += `?${this.strings[i++]}`;
const len = this.strings.length;
let i = 1;
let value = this.strings[0];
while (i < len) value += `?${this.strings[i++]}`;
return value;
}

get statement() {
const len = this.strings.length;
let i = 1;
let value = this.strings[0];
while (i < len) value += `:${i}${this.strings[i++]}`;
return value;
}

Expand Down

0 comments on commit af8b4be

Please sign in to comment.