UNPKG

alasql

Version:

Use SQL to select and filter javascript data - including relational joins and search in nested objects (JSON). Export to and import from Excel and CSV

211 lines (186 loc) 5.21 kB
// Project: https://github.com/alasql/alasql declare module 'alasql' { import * as xlsx from 'xlsx'; // Callback with error-first convention and optional data interface AlaSQLCallback<T = unknown> { (err: Error | null, data?: T): void; } interface AlaSQLOptions { errorlog: boolean; valueof: boolean; dropifnotexists: boolean; // drop database in any case datetimeformat: string; // how to handle DATE and DATETIME types casesensitive: boolean; // table and column names are case sensitive and converted to lower-case logtarget: string; // target for log. Values: 'console', 'output', 'id' of html tag logprompt: boolean; // print SQL at log modifier?: 'RECORDSET' | 'VALUE' | 'ROW' | 'COLUMN' | 'MATRIX' | 'TEXTSTRING' | 'INDEX'; columnlookup: number; // how many rows to lookup to define columns autovertex: boolean; // create vertex if not found usedbo: boolean; // use dbo as current database (for partial T-SQL comaptibility) autocommit: boolean; // the AUTOCOMMIT ON | OFF cache: boolean; // use cache nocount: boolean; // for SET NOCOUNT OFF nan: boolean; // check for NaN and convert it to undefined angularjs: boolean; tsql: boolean; mysql: boolean; postgres: boolean; oracle: boolean; sqlite: boolean; orientdb: boolean; excel?: xlsx.WorkBook; // now typed } // compiled Statement interface AlaSQLStatement { <T = unknown>(params?: any, cb?: AlaSQLCallback<T>, scope?: unknown): T; } // abstract Syntax Tree interface AlaSQLAST { compile(databaseid: string): AlaSQLStatement; } // see https://github.com/alasql/alasql/wiki/User%20Defined%20Functions interface userDefinedFunction { (...x: unknown[]): unknown; } interface userDefinedFunctionLookUp { [x: string]: userDefinedFunction; } // see https://github.com/alasql/alasql/wiki/User%20Defined%20Functions interface userAggregator { (value: unknown, accumulator: unknown, stage: number): unknown; } interface userAggregatorLookUp { [x: string]: userAggregator; } interface userFromFunction { ( dataReference: unknown, options: unknown, callback: (res: unknown) => void, index: unknown, query: unknown ): void; } interface userFromFunctionLookUp { [x: string]: userFromFunction; } /** * AlaSQL database object. This is a lightweight implimentation * * @interface database */ interface database { /** * The database ID. * * @type {string} * @memberof database */ databaseid: string; /** * The collection of tables in the database. * * @type {tableLookUp} * @memberof database */ tables: tableLookUp; } /** * AlaSQL table object. This is a lightweight implimentation * * @interface table */ interface table { /** * The array of data stored in the table which can be queried * * @type {any[]} * @memberof table */ data: unknown[]; } /** * AlaSQL database dictionary * * @interface databaseLookUp */ interface databaseLookUp { [databaseName: string]: database; } /** * AlaSQL table dictionary * * @interface tableLookUp */ interface tableLookUp { [tableName: string]: table; } interface Database { new (databaseid?: string): Database; databaseid: string; dbversion: number; tables: {[key: string]: unknown}; views: {[key: string]: unknown}; triggers: {[key: string]: unknown}; indices: {[key: string]: unknown}; objects: {[key: string]: unknown}; counter: number; sqlCache: {[key: string]: unknown}; sqlCacheSize: number; astCache: {[key: string]: unknown}; resetSqlCache(): void; exec<T = unknown>(sql: string, params?: any, cb?: AlaSQLCallback<T>): T; autoval(tablename: string, colname: string, getNext: boolean): unknown; } interface AlaSQL { options: AlaSQLOptions; error: Error; <T = unknown>(sql: string, params?: any, cb?: AlaSQLCallback<T>, scope?: unknown): T; parse(sql: string): AlaSQLAST; promise<T = unknown>(sql: string, params?: any): Promise<T>; fn: userDefinedFunctionLookUp; from: userFromFunctionLookUp; aggr: userAggregatorLookUp; autoval(tablename: string, colname: string, getNext?: boolean): number; yy: {}; setXLSX(xlsxlib: typeof xlsx): void; Database: { new (databaseid?: string): Database; }; /** * Array of databases in the AlaSQL object. * * @type {databaseLookUp} * @memberof AlaSQL */ databases: databaseLookUp; /** * Equivalent to alasql('USE '+databaseid). This will change the current * database to the one specified. This will update the useid property and * the tables property. * * @param {string} databaseid * @memberof AlaSQL */ use(databaseid: string): void; /** * The current database ID. If no database is selected, this is the * default database ID (called alasql). * * @type {string} * @memberof AlaSQL */ useid: string; /** * Array of the tables in the default database (called alasql). If * the database is changed via a USE statement or the use method, this * becomes the tables in the new database. * * @type {tableLookUp} * @memberof AlaSQL */ tables: tableLookUp; } const alasql: AlaSQL; export = alasql; }