不要怂,就是干,撸起袖子干!

Commit 1a76f04c by Sascha Depold

added createdAt + updatedAt (not correctly working now)

1 parent 4a717db1
...@@ -14,6 +14,7 @@ var classMethods = { ...@@ -14,6 +14,7 @@ var classMethods = {
STRING: 'VARCHAR(255)', STRING: 'VARCHAR(255)',
TEXT: 'VARCHAR(4000)', TEXT: 'VARCHAR(4000)',
INTEGER: 'INT', INTEGER: 'INT',
DATE: 'DATETIME',
sqlQueryFor: function(command, values) { sqlQueryFor: function(command, values) {
var query = null var query = null
switch(command) { switch(command) {
...@@ -24,6 +25,7 @@ var classMethods = { ...@@ -24,6 +25,7 @@ var classMethods = {
query = "DROP TABLE IF EXISTS %{table}" query = "DROP TABLE IF EXISTS %{table}"
break break
case 'select': case 'select':
values.fields = values.fields || "*"
query = "SELECT %{fields} FROM %{table}" query = "SELECT %{fields} FROM %{table}"
if(values.where) query += " WHERE %{where}" if(values.where) query += " WHERE %{where}"
if(values.order) query += " ORDER BY %{order}" if(values.order) query += " ORDER BY %{order}"
...@@ -32,7 +34,6 @@ var classMethods = { ...@@ -32,7 +34,6 @@ var classMethods = {
if(values.offset) query += " LIMIT %{offset}, %{limit}" if(values.offset) query += " LIMIT %{offset}, %{limit}"
else query += " LIMIT %{limit}" else query += " LIMIT %{limit}"
} }
values.fields = values.fields || "*"
break break
case 'insert': case 'insert':
query = "INSERT INTO %{table} (%{fields}) VALUES (%{values})" query = "INSERT INTO %{table} (%{fields}) VALUES (%{values})"
...@@ -44,6 +45,7 @@ var classMethods = { ...@@ -44,6 +45,7 @@ var classMethods = {
query = "DELETE FROM %{table} WHERE id = %{id} LIMIT 1" query = "DELETE FROM %{table} WHERE id = %{id} LIMIT 1"
break break
} }
return SequelizeHelper.evaluateTemplate(query, values) return SequelizeHelper.evaluateTemplate(query, values)
} }
} }
...@@ -58,6 +60,9 @@ Sequelize.prototype = { ...@@ -58,6 +60,9 @@ Sequelize.prototype = {
}, },
define: function(name, attributes) { define: function(name, attributes) {
attributes.createdAt = 'DATETIME NOT NULL'
attributes.updatedAt = 'DATETIME NOT NULL'
var table = new SequelizeTable(this, SequelizeHelper.SQL.asTableName(name), attributes) var table = new SequelizeTable(this, SequelizeHelper.SQL.asTableName(name), attributes)
table.attributes = attributes table.attributes = attributes
......
...@@ -9,6 +9,17 @@ SequelizeHelper = { ...@@ -9,6 +9,17 @@ SequelizeHelper = {
return name + "s" return name + "s"
}, },
asSqlDate: function(date) {
return [
[
date.getFullYear(),
((date.getMonth() < 9 ? '0' : '') + (date.getMonth()+1)),
((date.getDate() < 10 ? '0' : '') + date.getDate())
].join("-"),
date.toLocaleTimeString()
].join(" ")
},
valuesForInsertQuery: function(object) { valuesForInsertQuery: function(object) {
var actualValues = object.values, var actualValues = object.values,
result = [] result = []
...@@ -28,14 +39,13 @@ SequelizeHelper = { ...@@ -28,14 +39,13 @@ SequelizeHelper = {
}, },
transformValueByDataType: function(value, dataType) { transformValueByDataType: function(value, dataType) {
var result = null if(dataType.indexOf(Sequelize.INTEGER) > -1)
switch(dataType) { return value
case Sequelize.INTEGER:
result = value; break; if(dataType.indexOf(Sequelize.DATE) > -1)
default: return ("'" + SequelizeHelper.SQL.asSqlDate(value) + "'")
result = "'" + value + "'"; break;
} return ("'" + value + "'")
return result
}, },
valuesForUpdate: function(object, options) { valuesForUpdate: function(object, options) {
...@@ -54,13 +64,13 @@ SequelizeHelper = { ...@@ -54,13 +64,13 @@ SequelizeHelper = {
return result.join(options.seperator || ", ") return result.join(options.seperator || ", ")
}, },
hashToWhereConditions: function(conditions) { hashToWhereConditions: function(conditions, attributes) {
if(typeof conditions == 'number') if(typeof conditions == 'number')
return ('id = ' + conditions) return ('id = ' + conditions)
else { else {
var result = [] var result = []
SequelizeHelper.Hash.forEach(conditions, function(value, key) { SequelizeHelper.Hash.forEach(conditions, function(value, key) {
result.push(key + "=" + SequelizeHelper.SQL.transformValueByDataType(value)) result.push(key + "=" + SequelizeHelper.SQL.transformValueByDataType(value, attributes[key]))
}) })
return result.join(" AND ") return result.join(" AND ")
} }
...@@ -95,6 +105,14 @@ SequelizeHelper = { ...@@ -95,6 +105,14 @@ SequelizeHelper = {
result.push(object[key]) result.push(object[key])
}) })
return result return result
},
merge: function(source, target, force) {
SequelizeHelper.Hash.forEach(source, function(value, key) {
if(!target[key] || force)
target[key] = value
})
return target
} }
} }
} }
\ No newline at end of file
...@@ -30,17 +30,23 @@ SequelizeTable = function(sequelize, tableName, attributes) { ...@@ -30,17 +30,23 @@ SequelizeTable = function(sequelize, tableName, attributes) {
) )
}, },
findAll: function(callback) { // TODO: mysql library currently doesn't support MYSQL_DATE!!! look for fix
findAll: function(options, callback) {
// use the first param as callback if it is no object (hash)
var _callback = (typeof options == 'object') ? callback : options
var queryOptions = (typeof options == 'object') ? SequelizeHelper.Hash.merge(options, { table: tableName }) : { table: tableName }
sequelize.query( sequelize.query(
Sequelize.sqlQueryFor('select', { table: tableName }), Sequelize.sqlQueryFor('select', queryOptions),
function(result) { function(result) {
var objects = [] var objects = []
result.forEach(function(resultSet) { result.forEach(function(resultSet) {
objects.push(table.sqlResultToObject(resultSet)) objects.push(table.sqlResultToObject(resultSet))
}) })
if(callback) callback(objects) if(_callback) _callback(objects)
} }
) )
}, },
...@@ -48,15 +54,16 @@ SequelizeTable = function(sequelize, tableName, attributes) { ...@@ -48,15 +54,16 @@ SequelizeTable = function(sequelize, tableName, attributes) {
find: function(conditions, callback) { find: function(conditions, callback) {
sequelize.query( sequelize.query(
Sequelize.sqlQueryFor('select', { Sequelize.sqlQueryFor('select', {
table: tableName, where: SequelizeHelper.SQL.hashToWhereConditions(conditions), order: 'id DESC', limit: 1 table: tableName, where: SequelizeHelper.SQL.hashToWhereConditions(conditions, this.attributes), order: 'id DESC', limit: 1
}), function(result) { }), function(result) {
if (callback) callback(table.sqlResultToObject(result[0])) if (callback) callback(table.sqlResultToObject(result[0]))
} }
) )
}, },
// TODO: mysql library currently doesn't support MYSQL_DATE!!! don't merge if fixed
sqlResultToObject: function(result) { sqlResultToObject: function(result) {
var object = new table(result) var object = new table(SequelizeHelper.Hash.merge({createdAt: new Date(), updatedAt: new Date()}, result, true))
object.id = result.id object.id = result.id
return object return object
} }
...@@ -79,11 +86,13 @@ SequelizeTable = function(sequelize, tableName, attributes) { ...@@ -79,11 +86,13 @@ SequelizeTable = function(sequelize, tableName, attributes) {
var query = null var query = null
var self = this var self = this
if(this.id == null) this.updateAt = new Date()
if(this.id == null) {
this.createdAt = new Date()
query = Sequelize.sqlQueryFor('insert', { query = Sequelize.sqlQueryFor('insert', {
table: this.tableName, fields: SequelizeHelper.SQL.fieldsForInsertQuery(this), values: SequelizeHelper.SQL.valuesForInsertQuery(this) table: this.tableName, fields: SequelizeHelper.SQL.fieldsForInsertQuery(this), values: SequelizeHelper.SQL.valuesForInsertQuery(this)
}) })
else } else
query = Sequelize.sqlQueryFor('update', { table: this.tableName, values: SequelizeHelper.SQL.valuesForUpdate(this), id: this.id }) query = Sequelize.sqlQueryFor('update', { table: this.tableName, values: SequelizeHelper.SQL.valuesForUpdate(this), id: this.id })
sequelize.query(query, function() { sequelize.query(query, function() {
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!