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);
+
});
+
+
});
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;
+
}