From 8617e7b3c94a8354e37ebd6cdc3e4eab6f59d8f0 Mon Sep 17 00:00:00 2001 From: Makis Maropoulos Date: Sat, 29 Aug 2015 09:19:39 +0300 Subject: [PATCH 1/2] Update node-mysql-wrapper.d.ts --- node-mysql-wrapper/node-mysql-wrapper.d.ts | 208 ++++++++++----------- 1 file changed, 104 insertions(+), 104 deletions(-) diff --git a/node-mysql-wrapper/node-mysql-wrapper.d.ts b/node-mysql-wrapper/node-mysql-wrapper.d.ts index 55cd039e8..6f792d96d 100644 --- a/node-mysql-wrapper/node-mysql-wrapper.d.ts +++ b/node-mysql-wrapper/node-mysql-wrapper.d.ts @@ -3,129 +3,129 @@ // Definitions by: Makis Maropoulos // Definitions: https://github.com/borisyankov/DefinitelyTyped -/// +/// /// declare module "node-mysql-wrapper" { - import Mysql = require("mysql"); + import * as Mysql from 'mysql'; + import * as Promise from 'bluebird'; + import {EventEmitter} from 'events'; - function MySQLWrapperBuilder(connection: string | Mysql.IConnection, ...useOnlyTables: string[]): MySQLWrapper; + var EQUAL_TO_PROPERTY_SYMBOL: string; - enum EVENT_TYPES { - INSERT, UPDATE, DELETE, SAVE + interface Map { + [index: string]: T; } - interface MySQLConnection { - new (connection: string | Mysql.IConnection): MySQLConnection; + class MysqlUtil { + constructor(); + static copyObject(object: T): T; + static toObjectProperty(columnKey: string): string; + static toRowProperty(objectKey: string): string; + static forEachValue(map: Map, callback: (value: T) => U): U; + static forEachKey(map: Map, callback: (key: string) => U): U; + } - create(connectionUri: string): void; - create(connection: Mysql.IConnection): void; + interface ICriteria { + rawCriteriaObject: any; + tables: string[]; + noDatabaseProperties: string[]; + whereClause: string; + } + + class Criteria implements ICriteria { + rawCriteriaObject: any; + tables: string[]; + noDatabaseProperties: string[]; + whereClause: string; + constructor(rawCriteriaObject: any, tables: string[], noDatabaseProperties: string[], whereClause: string); + } + + class CriteriaBuilder { + private _table; + constructor(table: MysqlTable); + build(rawCriteriaObject: any): Criteria; + } + + class MysqlConnection extends EventEmitter { + connection: Mysql.IConnection; + eventTypes: string[]; + tableNamesToUseOnly: any[]; + tables: MysqlTable[]; + constructor(connection: string | Mysql.IConnection); + create(connection: string | Mysql.IConnection): void; attach(connection: Mysql.IConnection): void; - end(callback: () => void): void; + end(callback?: (error: any) => void): void; destroy(): void; - link(callback?: () => void): Promise; - connect(callback?: () => void): Promise; - - useOnly(...useOnlyTables: string[]): void; - - fetchDatabaseInfornation(): Promise; - + link(readyCallback?: () => void): Promise; + useOnly(...tables: any[]): void; + fetchDatabaseInfornation(): Promise; escape(val: string): string; - notice(tableWhichCalled: string, queryStr: string, parsedResults: Object[]): void; - fireEvent(tableWhichCalled: string, queryStr: string, parsedResults: Object[]): void; - - watch(tableName: string, evtType: EVENT_TYPES | string, callback: (parsedResults: Object[]) => void): void; - on(tableName: string, evtType: EVENT_TYPES | string, callback: (parsedResults: Object[]) => void): void; - unwatch(tableName: string, evtType: EVENT_TYPES | string, callbackToRemove: () => void): void; - off(tableName: string, evtType: EVENT_TYPES | string, callbackToRemove: () => void): void; - - query(mysqlQuery: Mysql.IQueryFunction): void; - - table(tableName: string): MySQLTable; + notice(tableWhichCalled: string, queryStr: string, parsedResults: any[]): void; + watch(tableName: string, evtType: any, callback: (parsedResults: any[]) => void): void; + unwatch(tableName: string, evtType: string, callbackToRemove: (parsedResults: any[]) => void): void; + query(queryStr: string, callback: (err: Mysql.IError, results: any) => any, queryArguments?: any[]): void; + table(tableName: string): MysqlTable; } - - interface MySQLTable { - new (tableName: string, connection: MySQLConnection): MySQLTable; - - setColumns(columns: string[]): void; - - setPrimaryKey(primaryKeyColumnName: string): void; - - toString(): string; - - model(jsObject: Object): MySQLModel; - - watch(evtType: EVENT_TYPES | string, callback: (parsedResults: Object[]) => void): void; - on(evtType: EVENT_TYPES | string, callback: (parsedResults: Object[]) => void): void; - unwatch(evtType: EVENT_TYPES|string, callbackToRemove: () => void): void; - off(evtType: EVENT_TYPES|string, callbackToRemove: () => void): void; - - ///START DYNAMIC METHODS FOR TABLES CANNOT BE PRE-DEFINED WITH DYNAMIC WAY, YET, SO: - find(jsObject: Object, callback?: (results: Object[]) => void): Promise; - save(jsObject: Object, callback?: (results: Object[]) => void): Promise; - remove(jsObject: Object, callback?: (results: Object[]) => void): Promise; - delete(jsObject: Object, callback?: (results: Object[]) => void): Promise; - safeDelete(jsObject: Object, callback?: (results: Object[]) => void): Promise; - ///END - findAll(callback?: (results: Object[]) => void): Promise; - - extend(functionName: string, functionToBeSupported: () => any): void; - + + class MysqlTable { + private _name; + private _connection; + private _columns; + private _primaryKey; + private _criteriaBuilder; + constructor(tableName: string, connection: MysqlConnection); + columns: string[]; + primaryKey: string; + connection: MysqlConnection; + name: string; + on(evtType: string, callback: (parsedResults: any[]) => void): void; + off(evtType: string, callbackToRemove: (parsedResults: any[]) => void): void; has(extendedFunctionName: string): boolean; - + extend(functionName: string, theFunction: (...args: any[]) => any): void; + objectFromRow(row: any): any; + rowFromObject(obj: any): any; + getRowAsArray(jsObject: any): Array; + getPrimaryKeyValue(jsObject: any): number | string; + parseQueryResult(result: any, criteria: ICriteria): Promise; + find(criteriaRawJsObject: any, callback?: (_results: T[]) => any): Promise; + findById(id: number | string, callback?: (result: T) => any): Promise; + findAll(callback?: (_results: T[]) => any): Promise; + save(criteriaRawJsObject: any, callback?: (_result: any) => any): Promise; + safeRemove(id: number | string, callback?: (_result: { + affectedRows: number; + table: string; + }) => any): Promise<{ + affectedRows: number; + table: string; + }>; + remove(criteriaRawJsObject: any, callback?: (_result: { + affectedRows: number; + table: string; + }) => any): Promise<{ + affectedRows: number; + table: string; + }>; } - interface MySQLModel { - - new (table: MySQLTable, jsObject: Object): MySQLModel; - - toObjectProperty(columnKey: string): string; - toRowProperty(objectKey: string): string; - - create(jsObject: Object): MySQLModel; - reUse(jsObject: Object): MySQLModel; - - toRow(): void; - getRawObject(): Object; - - parseTable(mysqlTableToSearch: String, parentObject: Object): Promise; - parseResult(result: Object, tablesToSearch: string[]): Promise; - - find(parentObj?: Object): Promise; - findAll(): Promise; - save(): Promise; - safeDelete(): Promise; - remove(): Promise; - delete(): Promise; - - } - - interface MySQLWrapper { - new (connection?: MySQLConnection): MySQLWrapper; - - setConnection(connection: MySQLConnection): void; - - useOnly(...useOnlyTables: string[]): void; - - has(tableName: string): boolean; - has(tableName: string, methodName: string): boolean; - + class MysqlWrapper { + connection: MysqlConnection; + readyListenerCallbacks: Function[]; + constructor(connection?: MysqlConnection); + static when(..._promises: Promise[]): Promise; + setConnection(connection: MysqlConnection): void; + useOnly(...useTables: any[]): void; + has(tableName: string, functionName?: string): boolean; ready(callback: () => void): void; + table(tableName: string): MysqlTable; noticeReady(): void; - removeReadyListener(callback: () => any): void; - - query: Mysql.IQueryFunction; - + removeReadyListener(callback: () => void): void; + query(queryStr: string, callback: (err: Mysql.IError, results: any) => any, queryArguments?: any[]): void; destroy(): void; - end(callback?: () => void): void; - - when(): Promise; - - ///START: WE CANNOT PRE-DEFINE THE DYNAMIC TABLES INTO PROPERTIES, SO WE USE INDEX(STRING-TABLENAME) TO GET A TABLE - table(tableName: string): MySQLTable; - ///END + end(maybeAcallbackError: (err: any) => void): void; } - export = MySQLWrapperBuilder; + function wrap(mysqlUrlOrObjectOrMysqlAlreadyConnection: Mysql.IConnection | string, ...useTables: any[]): MysqlWrapper; + } From a234874167a7d6634fdce467fb3f9afd2a655daf Mon Sep 17 00:00:00 2001 From: Makis Maropoulos Date: Sat, 29 Aug 2015 09:19:59 +0300 Subject: [PATCH 2/2] Update node-mysql-wrapper-tests.ts --- .../node-mysql-wrapper-tests.ts | 57 +++++++++++++++++-- 1 file changed, 51 insertions(+), 6 deletions(-) diff --git a/node-mysql-wrapper/node-mysql-wrapper-tests.ts b/node-mysql-wrapper/node-mysql-wrapper-tests.ts index 700c1ee6e..35acec27f 100644 --- a/node-mysql-wrapper/node-mysql-wrapper-tests.ts +++ b/node-mysql-wrapper/node-mysql-wrapper-tests.ts @@ -1,18 +1,63 @@ /// import wrapper = require("node-mysql-wrapper"); -var db = wrapper("mysql://kataras:pass@127.0.0.1/taglub?debug=false&charset=utf8"); +var db = wrapper.wrap("mysql://kataras:pass@127.0.0.1/taglub?debug=false&charset=utf8"); + + + + +class User { //or interface + userId: number; + username: string; + mail: string; + comments: Comment[]; +} + +interface Comment { + commentId: number; + content: string; + +} db.ready(() => { - db.table("users").on("insert", (parsedResults) => { + var usersDb = db.table("users"); + + usersDb.findById(16, (_user) => { + console.log("TEST1: \n"); + console.log("FOUND USER WITH USERNAME: " + _user.username); + }); + + /* OR usersDb.findById(18).then(_user=> { + console.log("FOUND USER WITH USERNAME: " + _user.username); + }, (err) => { console.log("ERROR ON FETCHING FINDBY ID: " + err) }); + */ + + usersDb.find({ userId: 18, comments: { userId: '=' } }, _users=> { + var _user = _users[0]; + console.log("TEST2: \n"); + console.log(_user.username + " with "); + console.log(_user.comments.length + " comments "); + _user.comments.forEach(_comment=> { + console.log("--------------\n" + _comment.content); + }); }); - db.table("users").findAll().then((results) => { - console.dir(results); + usersDb.safeRemove(5620, answer=> { + console.log("TEST 3: \n"); + console.log(answer.affectedRows + ' (1) has removed from table: ' + answer.table); + }); - db.table("users").find({ userId: 18 }, (results) => { - console.dir(results[0]); + var auser = new User(); + auser.username = ' just a username'; + auser.mail = ' just an email'; + + usersDb.save(auser, newUser=> { + console.log("TEST 4: \n"); + console.log("NEW USER HAS CREATED WITH NEW USER ID: " + newUser.userId); + }); + + });