Skip to content

Commit 9141d43

Browse files
committed
Properties refactor
1 parent d014b37 commit 9141d43

File tree

11 files changed

+169
-174
lines changed

11 files changed

+169
-174
lines changed

lib/Associations/One.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ exports.prepare = function (Model, associations, association_properties, model_f
5151
for (k in association.field) {
5252
association_properties.push(k);
5353
if (!association.reversed) {
54+
Model.allProperties[k] = _.omit(association.field[k], k);
55+
Model.allProperties[k].klass = 'hasOne';
5456
model_fields.push(k);
5557
}
5658
}

lib/Drivers/DDL/mysql.js

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -23,39 +23,29 @@ exports.drop = function (driver, opts, cb) {
2323
exports.sync = function (driver, opts, cb) {
2424
var queries = [];
2525
var definitions = [];
26-
var k, i, pending;
26+
var k, i, pending, prop;
2727
var primary_keys = opts.id.map(function (k) { return driver.query.escapeId(k); });
2828
var keys = [];
2929

30-
for (i = 0; i < opts.id.length; i++) {
31-
if (opts.properties.hasOwnProperty(opts.id[i])) continue;
32-
33-
keys.push(driver.query.escapeId(opts.id[i]));
34-
}
35-
36-
for (i = 0; i < keys.length; i++) {
37-
definitions.push(keys[i] + " INT(10) UNSIGNED NOT NULL");
38-
}
39-
if (opts.id.length == 1 && !opts.extension) {
40-
definitions[definitions.length - 1] += " AUTO_INCREMENT";
41-
}
42-
43-
for (k in opts.properties) {
44-
definitions.push(buildColumnDefinition(driver, k, opts.properties[k]));
30+
for (k in opts.allProperties) {
31+
prop = opts.allProperties[k];
32+
definitions.push(buildColumnDefinition(driver, k, prop));
4533
}
4634

47-
for (i = 0; i < opts.one_associations.length; i++) {
48-
if (opts.one_associations[i].extension) continue;
49-
if (opts.one_associations[i].reversed) continue;
50-
for (k in opts.one_associations[i].field) {
51-
definitions.push(buildColumnDefinition(driver, k, opts.one_associations[i].field[k]));
35+
for (k in opts.allProperties) {
36+
prop = opts.allProperties[k];
37+
if (prop.unique === true) {
38+
definitions.push("UNIQUE (" + driver.query.escapeId(k) + ")");
39+
} else if (prop.index) {
40+
definitions.push("INDEX (" + driver.query.escapeId(k) + ")");
5241
}
5342
}
5443

55-
for (k in opts.properties) {
56-
if (opts.properties[k].unique === true) {
44+
for (k in opts.allProperties) {
45+
prop = opts.allProperties[k];
46+
if (prop.unique === true) {
5747
definitions.push("UNIQUE KEY " + driver.query.escapeId(k) + " (" + driver.query.escapeId(k) + ")");
58-
} else if (opts.properties[k].index) {
48+
} else if (prop.index) {
5949
definitions.push("INDEX (" + driver.query.escapeId(k) + ")");
6050
}
6151
}
@@ -142,6 +132,9 @@ function buildColumnDefinition(driver, name, prop) {
142132
def = driver.query.escapeId(name) + " VARCHAR(" + Math.min(Math.max(parseInt(prop.size, 10) || 255, 1), 65535) + ")";
143133
}
144134
break;
135+
case "serial":
136+
def = driver.query.escapeId(name) + " INT(10) UNSIGNED NOT NULL AUTO_INCREMENT";
137+
break;
145138
case "number":
146139
if (prop.rational === false) {
147140
def = driver.query.escapeId(name) + " " + colTypes.integer[prop.size || 4];

lib/Drivers/DDL/postgres.js

Lines changed: 16 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -24,46 +24,27 @@ exports.sync = function (driver, opts, cb) {
2424
var subqueries = [];
2525
var typequeries = [];
2626
var definitions = [];
27-
var k, i, pending;
27+
var k, i, pending, prop;
2828
var primary_keys = opts.id.map(function (k) { return driver.query.escapeId(k); });
2929
var keys = [];
30-
for (i = 0; i < opts.id.length; i++) {
31-
if (opts.properties.hasOwnProperty(opts.id[i])) continue;
3230

33-
keys.push(driver.query.escapeId(opts.id[i]));
34-
}
35-
36-
for (i = 0; i < keys.length; i++) {
37-
definitions.push(keys[i] + " INTEGER NOT NULL");
38-
}
39-
40-
if (opts.id.length == 1 && !opts.extension) {
41-
definitions[definitions.length - 1] = keys[0] + " SERIAL";
42-
}
31+
for (k in opts.allProperties) {
32+
prop = opts.allProperties[k];
33+
definitions.push(buildColumnDefinition(driver, opts.table, k, prop));
4334

44-
for (k in opts.properties) {
45-
definitions.push(buildColumnDefinition(driver, opts.table, k, opts.properties[k]));
46-
47-
if (opts.properties[k].type == "enum") {
35+
if (prop.type == "enum") {
4836
typequeries.push(
4937
"CREATE TYPE " + driver.query.escapeId("enum_" + opts.table + "_" + k) + " AS ENUM (" +
50-
opts.properties[k].values.map(driver.query.escapeVal.bind(driver)) + ")"
38+
prop.values.map(driver.query.escapeVal.bind(driver)) + ")"
5139
);
5240
}
5341
}
5442

55-
for (i = 0; i < opts.one_associations.length; i++) {
56-
if (opts.one_associations[i].extension) continue;
57-
if (opts.one_associations[i].reversed) continue;
58-
for (k in opts.one_associations[i].field) {
59-
definitions.push(buildColumnDefinition(driver, opts.table, k, opts.one_associations[i].field[k]));
60-
}
61-
}
62-
63-
for (k in opts.properties) {
64-
if (opts.properties[k].unique === true) {
43+
for (k in opts.allProperties) {
44+
prop = opts.allProperties[k];
45+
if (prop.unique === true) {
6546
definitions.push("UNIQUE (" + driver.query.escapeId(k) + ")");
66-
} else if (opts.properties[k].index) {
47+
} else if (prop.index) {
6748
definitions.push("INDEX (" + driver.query.escapeId(k) + ")");
6849
}
6950
}
@@ -77,7 +58,7 @@ exports.sync = function (driver, opts, cb) {
7758
typequeries: typequeries,
7859
subqueries : subqueries
7960
});
80-
61+
8162
for (i = 0; i < opts.one_associations.length; i++) {
8263
if (opts.one_associations[i].extension) continue;
8364
if (opts.one_associations[i].reversed) continue;
@@ -101,7 +82,7 @@ exports.sync = function (driver, opts, cb) {
10182
for (i = 0; i < opts.many_associations.length; i++) {
10283
definitions = [];
10384
typequeries = [];
104-
85+
10586
for (k in opts.many_associations[i].mergeId) {
10687
definitions.push(buildColumnDefinition(driver, opts.many_associations[i].mergeTable, k, opts.many_associations[i].mergeId[k]));
10788
}
@@ -120,7 +101,7 @@ exports.sync = function (driver, opts, cb) {
120101
);
121102
}
122103
}
123-
104+
124105
var index = null;
125106
for (k in opts.many_associations[i].mergeId) {
126107
if (index == null) index = driver.query.escapeId(k);
@@ -207,6 +188,9 @@ function buildColumnDefinition(driver, table, name, prop) {
207188
def = driver.query.escapeId(name) + " VARCHAR(" + Math.max(parseInt(prop.size, 10) || 255, 1) + ")";
208189
}
209190
break;
191+
case "serial":
192+
def = driver.query.escapeId(name) + " SERIAL";
193+
break;
210194
case "number":
211195
if (prop.rational === false) {
212196
def = driver.query.escapeId(name) + " " + colTypes.integer[prop.size || 4];

lib/Drivers/DDL/sqlite.js

Lines changed: 9 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -22,34 +22,13 @@ exports.drop = function (driver, opts, cb) {
2222
exports.sync = function (driver, opts, cb) {
2323
var queries = [];
2424
var definitions = [];
25-
var k, i, pending;
25+
var k, i, pending, prop;
2626
var primary_keys = opts.id.map(function (k) { return driver.query.escapeId(k); });
2727
var keys = [];
2828

29-
for (i = 0; i < opts.id.length; i++) {
30-
if (opts.properties.hasOwnProperty(opts.id[i])) continue;
31-
32-
keys.push(driver.query.escapeId(opts.id[i]));
33-
}
34-
35-
for (i = 0; i < keys.length; i++) {
36-
definitions.push(keys[i] + " INTEGER UNSIGNED NOT NULL");
37-
}
38-
39-
if (opts.id.length == 1 && !opts.extension) {
40-
definitions[definitions.length - 1] = keys[0] + " INTEGER PRIMARY KEY AUTOINCREMENT";
41-
}
42-
43-
for (k in opts.properties) {
44-
definitions.push(buildColumnDefinition(driver, k, opts.properties[k]));
45-
}
46-
47-
for (i = 0; i < opts.one_associations.length; i++) {
48-
if (opts.one_associations[i].extension) continue;
49-
if (opts.one_associations[i].reversed) continue;
50-
for (k in opts.one_associations[i].field) {
51-
definitions.push(buildColumnDefinition(driver, k, opts.one_associations[i].field[k]));
52-
}
29+
for (k in opts.allProperties) {
30+
prop = opts.allProperties[k];
31+
definitions.push(buildColumnDefinition(driver, k, prop));
5332
}
5433

5534
if (keys.length > 1) {
@@ -75,7 +54,7 @@ exports.sync = function (driver, opts, cb) {
7554
);
7655
}
7756
}
78-
57+
7958
for (i = 0; i < opts.one_associations.length; i++) {
8059
if (opts.one_associations[i].extension) continue;
8160
if (opts.one_associations[i].reversed) continue;
@@ -112,7 +91,7 @@ exports.sync = function (driver, opts, cb) {
11291
for (k in opts.many_associations[i].props) {
11392
definitions.push(buildColumnDefinition(driver, k, opts.many_associations[i].props[k]));
11493
}
115-
94+
11695
var index = null;
11796
for (k in opts.many_associations[i].mergeId) {
11897
if (index == null) index = driver.query.escapeId(k);
@@ -153,6 +132,9 @@ function buildColumnDefinition(driver, name, prop) {
153132
case "text":
154133
def = driver.query.escapeId(name) + " TEXT";
155134
break;
135+
case "serial":
136+
def = driver.query.escapeId(name) + " INTEGER PRIMARY KEY AUTOINCREMENT";
137+
break;
156138
case "number":
157139
if (prop.rational === false) {
158140
def = driver.query.escapeId(name) + " INTEGER";

lib/Drivers/DML/postgres.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,8 @@ Driver.prototype.clear = function (table, cb) {
238238
};
239239

240240
Driver.prototype.valueToProperty = function (value, property) {
241+
var v;
242+
241243
switch (property.type) {
242244
case "object":
243245
if (typeof value == "object" && !Buffer.isBuffer(value)) {
@@ -256,14 +258,17 @@ Driver.prototype.valueToProperty = function (value, property) {
256258
return { x : parseFloat(m[1], 10) , y : parseFloat(m[2], 10) };
257259
}
258260
}
259-
return value;
261+
break;
260262
case "number":
261-
if (value !== null) {
262-
return Number(value);
263+
if (typeof value != 'number' && value !== null) {
264+
v = Number(value);
265+
if (!isNaN(v)) {
266+
return v;
267+
}
263268
}
264-
default:
265-
return value;
269+
break;
266270
}
271+
return value;
267272
};
268273

269274
Driver.prototype.propertyToValue = function (value, property) {

0 commit comments

Comments
 (0)