0.7.1 • Published 3 years ago

@typed-query-builder/mssql v0.7.1

Weekly downloads
3
License
GPL-3.0-or-later
Repository
github
Last release
3 years ago

@typed-query-builder/mssql

See typed-query-builder README for more details.
See tests for more query examples.
See generator for a table generator example.

Examples

Generate tables given a connection

import { generate } from '@typed-query-builder/mssql/generator';

const gen = await generate(conn);
const genFile =  gen.map(t => t.tableDefinition).join('\n\n');

// genFile is now a series of `export const Table = table({ ... })` commands based on your tables.
// generate can be passed options to control variable name, table alias, column aliases, etc.

Query Examples

import mssql from 'mssql';
import { from, update, insert, table } from '@typed-query-builder/builder';
import { exec, prepare, stream } from '@typed-query-builder/mssql';
import { generate } from '@typed-query-builder/mssql/generator';

// Define tables
const PersonTable = table({
  name: 'Person',
  primary: ['ID'],
  fields: {
    ID: "INT",
    Name: ["NVARCHAR", 128],
    Email: ["NVARCHAR", 128],
    Location: ["NULL", "POINT"],
  },
});

const TaskTable = table({
  name: 'Task',
  primary: ['ID'],
  fields: {
    ID: "INT",
    GroupID: "INT",
    Name: ["NVARCHAR", 128],
    Details: "NTEXT",
    Done: "BIT",
    DoneAt: ["NULL", "TIMESTAMP"],
    ParentID: ["NULL", "INT"],
    AssignedTo: ["NULL", "INT"],
    AssignedAt: ["NULL", "TIMESTAMP"],
    CreatedAt: "TIMESTAMP",
    CreatedBy: ["NULL", "INT"],
  },
});

// Reusable functions to process builders. Can pass transaction or connection or nothing to use global connection.
const getResult = exec(conn);
const getCount = exec(conn, { affectedCount: true });
const getPrepared = prepare(conn);
const getStream = stream(conn);


// Select first record in a table
const first = await from(TaskTable)
  .select('*')
  .first()
  .run( getResult )
;

// Update Done to true
const { affected } = await update(TaskTable)
  .set('Done', true)
  .where(({ Task }) => Task.ID.eq(first.ID))
  .run( getCount )
;

// Select record in table by parameter ID
const paramedResult = await from(TaskTable)
  .select('*')
  .where(({ Task }, { param }) => Task.ID.eq(param('id')))
  .first()
  .run( exec(conn, { params: { id: first.ID } }))
;

// Do it with a prepared statement
const findById = await from(TaskTable)
  .select('*')
  .where(({ Task }, { param }) => Task.ID.eq(param('id')))
  .first()
  .run( getPrepared )
;

try {
  const first = await findById.exec({ id: 23 });
} finally {
  // Prepared statements NEED to be released in a finally
  findById.release();
}

// Inserts with values
const insertIds = await insert(PersonTable, ['Name', 'Email'])
  .returning(({ Person }) => [Person.ID])
  .values([
    { Name: 'Person 1', Email: 'Person1@gmail.com' },
    { Name: 'Person 2', Email: 'Person2@gmail.com' }
  ])
  .run( getResult )
;

// Inserts with prepared
const insertPrepared = await insert(TaskTable, ['GroupID', 'Name', 'Details'])
  .returning(({ Task }) => [Task.ID, Task.CreatedAt])
  .valuesFromParams()
  .run( getPrepared )
;

try
{
  // inserted = [{ ID: number, CreatedAt: Date }]
  const inserted = await insertPrepared.exec({
    GroupID: 1223,
    Name: 'Task 1b',
    Details: 'Task 1b Details',
  });
}
finally
{
  await insertPrepared.release();
}

// Stream large dataset
const streamer = from(TaskTable)
  .select('*')
  .run( getStream )
;

await streamer((task) => {
  // do something with task, potentially async
});
0.7.1

3 years ago

0.7.0

3 years ago

0.6.5

3 years ago

0.6.4

3 years ago

0.6.3

3 years ago

0.6.2

3 years ago

0.6.0

3 years ago

0.5.5

3 years ago

0.5.4

3 years ago

0.5.3

3 years ago

0.5.0

3 years ago

0.5.2

3 years ago

0.4.3

3 years ago

0.4.2

3 years ago

0.4.1

3 years ago

0.4.0

3 years ago

0.3.17

3 years ago

0.3.16

3 years ago

0.3.15

3 years ago

0.3.14

3 years ago

0.3.13

3 years ago

0.3.9

3 years ago

0.3.12

3 years ago

0.3.11

3 years ago

0.3.10

3 years ago

0.3.8

3 years ago

0.3.7

3 years ago

0.3.6

3 years ago

0.3.1

3 years ago

0.2.7

3 years ago

0.2.8

3 years ago

0.2.6

3 years ago

0.2.5

3 years ago

0.2.4

3 years ago

0.2.3

3 years ago

0.2.2

3 years ago

0.2.0

3 years ago

0.1.8

3 years ago

0.1.7

3 years ago

0.1.6

3 years ago

0.1.5

3 years ago