From f3aecb497b5408aac58ad58484b73b558f6a1656 Mon Sep 17 00:00:00 2001 From: Andrej T Date: Fri, 6 Nov 2015 17:35:41 +0100 Subject: [PATCH] added definitions for anydb-sql and anydb-sql-migrations --- .../anydb-sql-migrations-tests.ts | 17 ++ .../anydb-sql-migrations.d.ts | 34 +++ anydb-sql/anydb-sql-tests.ts | 70 +++++++ anydb-sql/anydb-sql.d.ts | 194 ++++++++++++++++++ 4 files changed, 315 insertions(+) create mode 100644 anydb-sql-migrations/anydb-sql-migrations-tests.ts create mode 100644 anydb-sql-migrations/anydb-sql-migrations.d.ts create mode 100644 anydb-sql/anydb-sql-tests.ts create mode 100644 anydb-sql/anydb-sql.d.ts diff --git a/anydb-sql-migrations/anydb-sql-migrations-tests.ts b/anydb-sql-migrations/anydb-sql-migrations-tests.ts new file mode 100644 index 000000000..f9c3da03a --- /dev/null +++ b/anydb-sql-migrations/anydb-sql-migrations-tests.ts @@ -0,0 +1,17 @@ +/// +/// +import anydbsql = require('anydb-sql'); +import { Table, Column } from 'anydb-sql' +import migrator = require('anydb-sql-migrations'); + +function do_not_run() { + + var db = anydbsql({ + url: 'postgres://user:pass@host:port/database', + connections: { min: 2, max: 20 } + }); + + migrator + .create(db, '/path/to/migrations/dir') + .run(); +} diff --git a/anydb-sql-migrations/anydb-sql-migrations.d.ts b/anydb-sql-migrations/anydb-sql-migrations.d.ts new file mode 100644 index 000000000..9ab421c3a --- /dev/null +++ b/anydb-sql-migrations/anydb-sql-migrations.d.ts @@ -0,0 +1,34 @@ +// Type definitions for anydb-sql-migrations +// Project: https://github.com/spion/anydb-sql-migrations +// Definitions by: Gorgi Kosev +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/// +/// + +declare module "anydb-sql-migrations" { + import Promise = require('bluebird'); + import { Column, Table, Transaction, AnydbSql } from 'anydb-sql'; + export interface Migration { + version: string; + } + export interface MigrationsTable extends Table { + version: Column; + } + export interface MigFn { + (tx: Transaction): Promise; + } + export interface MigrationTask { + up: MigFn; + down: MigFn; + name: string; + } + export function create(db: AnydbSql, tasks: any): { + run: () => Promise; + migrateTo: (target?: string) => Promise; + check: (f: (m: { + type: string; + items: MigrationTask[]; + }) => any) => Promise; + }; +} \ No newline at end of file diff --git a/anydb-sql/anydb-sql-tests.ts b/anydb-sql/anydb-sql-tests.ts new file mode 100644 index 000000000..9e0264f7b --- /dev/null +++ b/anydb-sql/anydb-sql-tests.ts @@ -0,0 +1,70 @@ +/// +import anydbsql = require('anydb-sql'); +import { Table, Column } from 'anydb-sql' + +function do_not_run() { + + var db = anydbsql({ + url: 'postgres://user:pass@host:port/database', + connections: { min: 2, max: 20 } + }); + + // Table Post + + interface Post { + content: string; + userId: string; + date: string; + } + + interface PostTable extends Table { + content: Column; + userId: Column; + date: Column; + } + + var post = db.define({ + name: 'posts', + columns: { + content: {}, + userId: {}, + date: {} + } + }); + + // Table User + + interface User { + id: string; + email: string; + password: string; + name: string; + } + + interface UserTable extends Table { + id: Column; + email: Column; + password: Column; + name: Column; + } + + var user = db.define({ + name: 'users', + columns: { + id: { primaryKey: true }, + email: {}, + password: {}, + name: {}, + date: {} + }, + has: { + posts: { from: 'posts', many: true }, + group: { from: 'groups'} + } + }); + + user.select(user.name, post.content) + .from(user.join(post).on(user.id.equals(post.userId))) + .where(post.date.gt('123')) + .all() +} \ No newline at end of file diff --git a/anydb-sql/anydb-sql.d.ts b/anydb-sql/anydb-sql.d.ts new file mode 100644 index 000000000..d8bce402b --- /dev/null +++ b/anydb-sql/anydb-sql.d.ts @@ -0,0 +1,194 @@ +// Type definitions for anydb-sql +// Project: https://github.com/doxout/anydb-sql +// Definitions by: Gorgi Kosev +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/// + +declare module "anydb-sql" { + import Promise = require('bluebird'); + + interface AnyDBPool extends anydbSQL.DatabaseConnection { + query:(text:string, values:any[], callback:(err:Error, result:any)=>void)=>void + begin:()=>anydbSQL.Transaction + close:(err:Error)=>void + } + + interface Dictionary { [key:string]:T; } + + module anydbSQL { + export interface OrderByValueNode {} + export interface ColumnDefinition { + primaryKey?:boolean; + dataType?:string; + references?: {table:string; column: string} + notNull?:boolean + } + + export interface TableDefinition { + name:string + columns:Dictionary + has?:Dictionary<{from:string; many?:boolean}> + } + + + export interface QueryLike { + query:string; + values: any[] + text:string + } + export interface DatabaseConnection { + queryAsync(query:string, ...params:any[]):Promise<{rowCount:number;rows:T[]}> + queryAsync(query:QueryLike):Promise<{rowCount:number;rows:T[]}> + } + + export interface Transaction extends DatabaseConnection { + rollback():void + commitAsync():Promise + } + + export interface SubQuery { + select(node:Column):SubQuery + where(...nodes:any[]):SubQuery + from(table:TableNode):SubQuery + group(...nodes:any[]):SubQuery + order(criteria:OrderByValueNode):SubQuery + notExists(subQuery:SubQuery):SubQuery + } + + interface Executable { + get():Promise + getWithin(tx:DatabaseConnection):Promise + exec():Promise + all():Promise + execWithin(tx:DatabaseConnection):Promise + allWithin(tx:DatabaseConnection):Promise + toQuery():QueryLike; + } + + interface Queryable { + where(...nodes:any[]):Query + delete():ModifyingQuery + select(...nodes:any[]):Query + selectDeep(table: Table): Query + selectDeep(...nodesOrTables:any[]):Query + } + + export interface Query extends Executable, Queryable { + from(table:TableNode):Query + update(o:Dictionary):ModifyingQuery + update(o:{}):ModifyingQuery + group(...nodes:any[]):Query + order(...criteria:OrderByValueNode[]):Query + limit(l:number):Query + offset(o:number):Query + } + + export interface ModifyingQuery extends Executable { + returning(...nodes:any[]):Query + where(...nodes:any[]):ModifyingQuery + } + + export interface TableNode { + join(table:TableNode):JoinTableNode + leftJoin(table:TableNode):JoinTableNode + } + + export interface JoinTableNode extends TableNode { + on(filter:BinaryNode):TableNode + on(filter:string):TableNode + } + + interface CreateQuery extends Executable { + ifNotExists():Executable + } + interface DropQuery extends Executable { + ifExists():Executable + } + export interface Table extends TableNode, Queryable { + create():CreateQuery + drop():DropQuery + as(name:string):Table + update(o:any):ModifyingQuery + insert(row:T):ModifyingQuery + insert(rows:T[]):ModifyingQuery + select():Query + select(...nodes:any[]):Query + from(table:TableNode):Query + star():Column + subQuery():SubQuery + eventEmitter:{emit:(type:string, ...args:any[])=>void + on:(eventName:string, handler:Function)=>void} + columns:Column[] + sql: SQL; + alter():AlterQuery + } + export interface AlterQuery extends Executable { + addColumn(column:Column): AlterQuery; + addColumn(name: string, options:string): AlterQuery; + dropColumn(column: Column): AlterQuery; + renameColumn(column: Column, newColumn: Column):AlterQuery; + renameColumn(column: Column, newName: string):AlterQuery; + renameColumn(name: string, newName: string):AlterQuery; + rename(newName: string): AlterQuery + } + + export interface SQL { + functions: { + LOWER(c:Column):Column + } + } + + export interface BinaryNode { + and(node:BinaryNode):BinaryNode + or(node:BinaryNode):BinaryNode + } + + export interface Column { + in(arr:T[]):BinaryNode + in(subQuery:SubQuery):BinaryNode + notIn(arr:T[]):BinaryNode + equals(node:any):BinaryNode + notEquals(node:any):BinaryNode + gte(node:any):BinaryNode + lte(node:any):BinaryNode + gt(node:any):BinaryNode + lt(node:any):BinaryNode + like(str:string):BinaryNode + multiply:{ + (node:Column):Column + (n:number):Column + } + isNull():BinaryNode + isNotNull():BinaryNode + sum():Column + count():Column + count(name:string):Column + distinct():Column + as(name:string):Column + ascending:OrderByValueNode + descending:OrderByValueNode + asc:OrderByValueNode + desc:OrderByValueNode + } + + export interface AnydbSql extends DatabaseConnection { + define(map:TableDefinition):Table; + transaction(fn:(tx:Transaction)=>Promise):Promise + allOf(...tables:Table[]):any + models:Dictionary> + functions:{LOWER:(name:Column)=>Column + RTRIM:(name:Column)=>Column} + makeFunction(name:string):Function + begin():Transaction + open():void; + close():void; + getPool():AnyDBPool; + dialect():string; + } + } + + function anydbSQL(config:Object):anydbSQL.AnydbSql; + + export = anydbSQL; +} \ No newline at end of file