Created
October 1, 2011 23:11
-
-
Save kommander/1256787 to your computer and use it in GitHub Desktop.
A patch to add multi level prefetch to persistencejs, a javascript ORM.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From b6b903a3f6f9c1d5113bf98baab12bbfa009dadf Mon Sep 17 00:00:00 2001 | |
From: Sebastian Herrlinger <[email protected]> | |
Date: Fri, 16 Sep 2011 13:36:58 -0700 | |
Subject: [PATCH 1/3] Hack: Multi Level Prefetch | |
--- | |
lib/persistence.store.sql.js | 34 +++++++++++++++++++++++++++++----- | |
1 files changed, 29 insertions(+), 5 deletions(-) | |
mode change 100644 => 100755 lib/persistence.store.sql.js | |
diff --git a/lib/persistence.store.sql.js b/lib/persistence.store.sql.js | |
old mode 100644 | |
new mode 100755 | |
index 70916cc..5d68b99 | |
--- a/lib/persistence.store.sql.js | |
+++ b/lib/persistence.store.sql.js | |
@@ -644,15 +644,28 @@ function config(persistence, dialect) { | |
joinSql += this._additionalJoinSqls.join(' '); | |
for ( var i = 0; i < this._prefetchFields.length; i++) { | |
- var prefetchField = this._prefetchFields[i]; | |
- var thisMeta = meta.hasOne[prefetchField].type.meta; | |
+ console.log(this._prefetchFields[i]); | |
+ var prefetchFieldParts = this._prefetchFields[i].split('.'); | |
+ var prefetchField = prefetchFieldParts[0]; | |
+ var eName = entityName; | |
+ //console.log(prefetchField, eName); | |
+ if(prefetchFieldParts.length > 1){ | |
+ prefetchField = prefetchFieldParts[1]; | |
+ eName = prefetchFieldParts[0]; | |
+ } | |
+ var theMeta = persistence.getMeta(eName); | |
+ var thisMeta = theMeta.hasOne[prefetchField].type.meta; | |
if (thisMeta.isMixin) | |
throw new Error("cannot prefetch a mixin"); | |
var tableAlias = thisMeta.name + '_' + prefetchField + "_tbl"; | |
+ var PrefetchFrom = mainAlias; | |
+ if(prefetchFieldParts.length > 1){ | |
+ PrefetchFrom = eName + '_' + eName + "_tbl";; | |
+ } | |
selectFields = selectFields.concat(selectAll(thisMeta, tableAlias, | |
prefetchField + "_")); | |
joinSql += "LEFT JOIN `" + thisMeta.name + "` AS `" + tableAlias | |
- + "` ON `" + tableAlias + "`.`id` = `" + mainAlias + '`.`' + prefetchField + "` "; | |
+ + "` ON `" + tableAlias + "`.`id` = `" + PrefetchFrom + '`.`' + prefetchField + "` "; | |
} | |
@@ -690,8 +703,19 @@ function config(persistence, dialect) { | |
var r = rows[i]; | |
var e = rowToEntity(session, entityName, r, mainPrefix); | |
for ( var j = 0; j < that._prefetchFields.length; j++) { | |
- var prefetchField = that._prefetchFields[j]; | |
- var thisMeta = meta.hasOne[prefetchField].type.meta; | |
+ | |
+ console.log(that._prefetchFields[j]); | |
+ var prefetchFieldParts = that._prefetchFields[j].split('.'); | |
+ var prefetchField = prefetchFieldParts[0]; | |
+ var eName = entityName; | |
+ if(prefetchFieldParts.length > 1){ | |
+ prefetchField = prefetchFieldParts[1]; | |
+ eName = prefetchFieldParts[0]; | |
+ } | |
+ var theMeta = persistence.getMeta(eName); | |
+ var thisMeta = theMeta.hasOne[prefetchField].type.meta; | |
+ | |
+ console.log(thisMeta.name, prefetchField, eName); | |
e._data_obj[prefetchField] = rowToEntity(session, thisMeta.name, r, prefetchField + '_'); | |
session.add(e._data_obj[prefetchField]); | |
} | |
-- | |
1.7.0.4 | |
From f33ca4f57e22b751ae5e49f230ece5fdd4adb5ee Mon Sep 17 00:00:00 2001 | |
From: Sebastian Herrlinger <[email protected]> | |
Date: Fri, 16 Sep 2011 13:40:58 -0700 | |
Subject: [PATCH 2/3] removed hack output | |
--- | |
lib/persistence.store.sql.js | 4 ---- | |
1 files changed, 0 insertions(+), 4 deletions(-) | |
diff --git a/lib/persistence.store.sql.js b/lib/persistence.store.sql.js | |
index 5d68b99..6f0da49 100755 | |
--- a/lib/persistence.store.sql.js | |
+++ b/lib/persistence.store.sql.js | |
@@ -644,11 +644,9 @@ function config(persistence, dialect) { | |
joinSql += this._additionalJoinSqls.join(' '); | |
for ( var i = 0; i < this._prefetchFields.length; i++) { | |
- console.log(this._prefetchFields[i]); | |
var prefetchFieldParts = this._prefetchFields[i].split('.'); | |
var prefetchField = prefetchFieldParts[0]; | |
var eName = entityName; | |
- //console.log(prefetchField, eName); | |
if(prefetchFieldParts.length > 1){ | |
prefetchField = prefetchFieldParts[1]; | |
eName = prefetchFieldParts[0]; | |
@@ -704,7 +702,6 @@ function config(persistence, dialect) { | |
var e = rowToEntity(session, entityName, r, mainPrefix); | |
for ( var j = 0; j < that._prefetchFields.length; j++) { | |
- console.log(that._prefetchFields[j]); | |
var prefetchFieldParts = that._prefetchFields[j].split('.'); | |
var prefetchField = prefetchFieldParts[0]; | |
var eName = entityName; | |
@@ -715,7 +712,6 @@ function config(persistence, dialect) { | |
var theMeta = persistence.getMeta(eName); | |
var thisMeta = theMeta.hasOne[prefetchField].type.meta; | |
- console.log(thisMeta.name, prefetchField, eName); | |
e._data_obj[prefetchField] = rowToEntity(session, thisMeta.name, r, prefetchField + '_'); | |
session.add(e._data_obj[prefetchField]); | |
} | |
-- | |
1.7.0.4 | |
From be9e2a5dac5018cac12f3da12c138e3435b8f68f Mon Sep 17 00:00:00 2001 | |
From: Sebastian Herrlinger <[email protected]> | |
Date: Wed, 21 Sep 2011 16:42:10 -0700 | |
Subject: [PATCH 3/3] Remove debug output | |
--- | |
lib/persistence.js | 1 - | |
1 files changed, 0 insertions(+), 1 deletions(-) | |
mode change 100644 => 100755 lib/persistence.js | |
diff --git a/lib/persistence.js b/lib/persistence.js | |
old mode 100644 | |
new mode 100755 | |
index 217fe14..53daae8 | |
--- a/lib/persistence.js | |
+++ b/lib/persistence.js | |
@@ -442,7 +442,6 @@ persistence.get = function(arg1, arg2) { | |
} | |
} | |
if(oldValueObj) { | |
- console.log("OldValue", oldValueObj); | |
var inverse = oldValueObj[meta.hasOne[ref].inverseProperty]; | |
if(inverse.list && inverse._filter) { | |
inverse.triggerEvent('change', that, ref, val); | |
-- | |
1.7.0.4 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment