diff --git a/node-mysql-wrapper/node-mysql-wrapper-tests.ts b/node-mysql-wrapper/node-mysql-wrapper-tests.ts
index 869aa823e..ac5837c19 100644
--- a/node-mysql-wrapper/node-mysql-wrapper-tests.ts
+++ b/node-mysql-wrapper/node-mysql-wrapper-tests.ts
@@ -1,4 +1,5 @@
-///
+///
+
var express = require('express');
var app = express();
var server = require('http').createServer(app);
@@ -9,42 +10,37 @@ class User { //or interface
userId: number;
username: string;
mail: string;
+ password:string;
comments: Comment[];
+ myComments: Comment[];
+ info: UserInfo;
}
interface Comment {
commentId: number;
content: string;
+ likes: CommentLike[];
}
+interface CommentLike {
+ commentLikeId: number;
+ userId: number;
+ commentId: number;
+}
+
+interface UserInfo {
+ userInfoId: number;
+ userId: number;
+ hometown: string;
+}
db.ready(() => {
var usersDb = db.table("users");
- usersDb.rules.orderBy("userId", true);
-
+
+ //or var usersDb = db.table("users"); if you don't want intel auto complete from your ide/editor
- usersDb.findAll().then(users=> {
- users.forEach(user=> {
- console.log(user.userId);
- });
- });
-
-
- //define new table rules: usersDb.rules.clear().orderBy....limit....groupBy...
-
- //define rules but keep unchanged (table's rules) in find method:
- usersDb.find({ yearsOld: 22 }, (_users) => {
-
- console.log("-------------------------------------------------------");
- _users.forEach(_user=> {
- console.log(_user.userId + " " + _user.username + " found with limit 3 but this doesnt...");
-
- });
-
- }).limit(3).execute();
-
usersDb.findById(16, (_user) => {
console.log("TEST1: \n");
@@ -56,20 +52,27 @@ db.ready(() => {
}, (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);
+ usersDb.findSingle(
+ {
+ userId: 18,
+ myComments: {
+ userId: '=',
+ tableRules: { //NEW: SET rules to joined tables too!
+ table: "comments", //NEW SET table name inside any property u want!
+ limit: 50,
+ orderByDesc: "commentId" //give me the first 50 comments ordered by -commentId (DESC) from table 'comments' and put them at 'myComments' property inside the result object.
+ }
+ }
+ }).then(_user=> { // to get this promise use : .promise()
+ console.log("\n-------------TEST 2 ------------\n");
+ console.log(_user.username + " with ");
+ console.log(_user.myComments.length + " comments ");
+ _user.myComments.forEach(_comment=> {
+ console.log("--------------\n" + _comment.content);
+ });
});
- }).execute();
-
- usersDb.safeRemove(5620, answer=> {
+ usersDb.remove(5620, answer=> {
console.log("TEST 3: \n");
console.log(answer.affectedRows + ' (1) has removed from table: ' + answer.table);
@@ -86,8 +89,107 @@ db.ready(() => {
});
+
+ usersDb.find(
+ {
+ yearsOld: 22,
+ comments: {
+ userId: "=",
+ tableRules: {
+ limit: 2
+ }
+ }
+
+ }, (_users) => {
+
+ console.log("---------------TEST 6----------------------------------------");
+ _users.forEach(_user=> {
+ console.log(_user.userId + " " + _user.username + " found with " + _user.comments.length + " comments");
+
+ });
+
+ });
+ //if no rules setted to find method it's uses the table's rules ( if exists)
+
+
+
+ let _criteriaFromBuilder = usersDb.criteria
+ .except("password") // or .exclude(...columns). the only column you cannot except/exclude is the primary key (because it is used at where clause), be careful.
+ .where("userId", 24)
+ .joinAs("info", "userInfos", "userId")
+ .at("info")
+ .limit(1) //because we make it limit 1 it will return this result as object not as array.
+ .parent()
+ .joinAs("myComments", "comments", "userId")
+ .at("myComments").limit(2)
+ .joinAs("likes", "commentLikes", "commentId")
+ .original().orderBy("userId", true).build();
+
+ /* console.dir(_criteriaFromBuilder);
+ prints this object: ( of course you can create your own in order to pass it on .find table methods )
+ {
+ userId:23,
+
+ myComments:{
+ userId: '=',
+
+ tableRules:{
+ table: 'comments',
+ limit:2
+
+ },
+
+ likes:{
+ commentId: '=',
+
+ tableRules:{
+ table: 'commentLikes'
+ }
+
+ }
+ },
+
+ tableRules:{
+ orderByDesc: 'userId',
+ except: ['password']
+ }
+
+ }
+
+
+ */
+
+
+
+ usersDb.find(_criteriaFromBuilder).then(_users=> {
+ console.log("\n----------------\nTEST ADVANCED 1\n-------------------\n ");
+ _users.forEach(_user=> {
+ console.log(_user.userId + " " + _user.username);
+
+ if (_user.info !== undefined) {
+ console.log(' from ' + _user.info.hometown);
+ //console.dir(_user.userInfos);
+ }
+
+ if (_user.myComments !== undefined) {
+ _user.myComments.forEach(_comment=> {
+ console.log(_comment.commentId + " " + _comment.content);
+
+ if (_comment.likes !== undefined) {
+ console.log(' with ' + _comment.likes.length + ' likes!');
+ }
+ });
+ }
+ });
+
+ });
+
+
});
+server.on('uncaughtException', function(err) {
+ console.log(err);
+})
var httpPort = 1193;//config.get('Server.port') || 1193;
server.listen(httpPort, function() {