Skip to content

Commit 26d88a9

Browse files
committed
Adds point support for all drivers (#221)
Changes unknown property type error to throw a well defined code
1 parent 3da4e00 commit 26d88a9

File tree

5 files changed

+35
-8
lines changed

5 files changed

+35
-8
lines changed

lib/Drivers/DDL/mysql.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
var ErrorCodes = require("../../ErrorCodes");
2+
13
exports.drop = function (driver, opts, cb) {
24
var i, queries = [], pending;
35

@@ -172,12 +174,14 @@ function buildColumnDefinition(driver, name, prop) {
172174
def = driver.query.escapeId(name) + " ENUM (" +
173175
prop.values.map(driver.query.escapeVal.bind(driver.query)) +
174176
")";
175-
break;
176-
case "point":
177-
def = driver.query.escapeId(name) + " POINT";
177+
break;
178+
case "point":
179+
def = driver.query.escapeId(name) + " POINT";
178180
break;
179181
default:
180-
throw new Error("Unknown property type: '" + prop.type + "'");
182+
throw ErrorCodes.generateError(ErrorCodes.NO_SUPPORT, "Unknown property type: '" + prop.type + "'", {
183+
property : prop
184+
});
181185
}
182186
if (prop.required === true) {
183187
def += " NOT NULL";

lib/Drivers/DDL/postgres.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
var ErrorCodes = require("../../ErrorCodes");
2+
13
exports.drop = function (driver, opts, cb) {
24
var i, queries = [], pending;
35

@@ -211,8 +213,13 @@ function buildColumnDefinition(driver, table, name, prop) {
211213
case "enum":
212214
def = driver.query.escapeId(name) + " " + driver.query.escapeId("enum_" + table + "_" + name);
213215
break;
216+
case "point":
217+
def = driver.query.escapeId(name) + " POINT";
218+
break;
214219
default:
215-
throw new Error("Unknown property type: '" + prop.type + "'");
220+
throw ErrorCodes.generateError(ErrorCodes.NO_SUPPORT, "Unknown property type: '" + prop.type + "'", {
221+
property : prop
222+
});
216223
}
217224
if (prop.required === true) {
218225
def += " NOT NULL";

lib/Drivers/DDL/sqlite.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
var ErrorCodes = require("../../ErrorCodes");
2+
13
exports.drop = function (driver, opts, cb) {
24
var i, queries = [], pending;
35

@@ -154,7 +156,9 @@ function buildColumnDefinition(driver, name, prop) {
154156
def = driver.query.escapeId(name) + " INTEGER";
155157
break;
156158
default:
157-
throw new Error("Unknown property type: '" + prop.type + "'");
159+
throw ErrorCodes.generateError(ErrorCodes.NO_SUPPORT, "Unknown property type: '" + prop.type + "'", {
160+
property : prop
161+
});
158162
}
159163
if (prop.required === true) {
160164
def += " NOT NULL";

lib/Drivers/DML/mysql.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,8 @@ Driver.prototype.propertyToValue = function (value, property) {
246246
return (value) ? 1 : 0;
247247
case "object":
248248
return JSON.stringify(value);
249-
case "point":
250-
return function() { return 'POINT(' + value.x + ', ' + value.y + ')'; };
249+
case "point":
250+
return function() { return 'POINT(' + value.x + ', ' + value.y + ')'; };
251251
default:
252252
return value;
253253
}

lib/Drivers/DML/postgres.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,14 @@ Driver.prototype.valueToProperty = function (value, property) {
265265
return null;
266266
}
267267
break;
268+
case "point":
269+
if (typeof value == "string") {
270+
var m = value.match(/\((\-?[\d\.]+)[\s,]+(\-?[\d\.]+)\)/);
271+
if (m) {
272+
return { x : parseFloat(m[1], 10) , y : parseFloat(m[2], 10) };
273+
}
274+
}
275+
return value;
268276
case "number":
269277
if (value !== null) {
270278
return Number(value);
@@ -278,6 +286,10 @@ Driver.prototype.propertyToValue = function (value, property) {
278286
switch (property.type) {
279287
case "object":
280288
return JSON.stringify(value);
289+
case "point":
290+
return function () {
291+
return "POINT(" + value.x + ', ' + value.y + ")";
292+
};
281293
default:
282294
return value;
283295
}

0 commit comments

Comments
 (0)