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

Commit 1a76f04c by Sascha Depold

added createdAt + updatedAt (not correctly working now)

1 parent 4a717db1
......@@ -14,6 +14,7 @@ var classMethods = {
STRING: 'VARCHAR(255)',
TEXT: 'VARCHAR(4000)',
INTEGER: 'INT',
DATE: 'DATETIME',
sqlQueryFor: function(command, values) {
var query = null
switch(command) {
......@@ -24,6 +25,7 @@ var classMethods = {
query = "DROP TABLE IF EXISTS %{table}"
break
case 'select':
values.fields = values.fields || "*"
query = "SELECT %{fields} FROM %{table}"
if(values.where) query += " WHERE %{where}"
if(values.order) query += " ORDER BY %{order}"
......@@ -32,7 +34,6 @@ var classMethods = {
if(values.offset) query += " LIMIT %{offset}, %{limit}"
else query += " LIMIT %{limit}"
}
values.fields = values.fields || "*"
break
case 'insert':
query = "INSERT INTO %{table} (%{fields}) VALUES (%{values})"
......@@ -44,6 +45,7 @@ var classMethods = {
query = "DELETE FROM %{table} WHERE id = %{id} LIMIT 1"
break
}
return SequelizeHelper.evaluateTemplate(query, values)
}
}
......@@ -58,6 +60,9 @@ Sequelize.prototype = {
},
define: function(name, attributes) {
attributes.createdAt = 'DATETIME NOT NULL'
attributes.updatedAt = 'DATETIME NOT NULL'
var table = new SequelizeTable(this, SequelizeHelper.SQL.asTableName(name), attributes)
table.attributes = attributes
......
......@@ -9,6 +9,17 @@ SequelizeHelper = {
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) {
var actualValues = object.values,
result = []
......@@ -28,14 +39,13 @@ SequelizeHelper = {
},
transformValueByDataType: function(value, dataType) {
var result = null
switch(dataType) {
case Sequelize.INTEGER:
result = value; break;
default:
result = "'" + value + "'"; break;
}
return result
if(dataType.indexOf(Sequelize.INTEGER) > -1)
return value
if(dataType.indexOf(Sequelize.DATE) > -1)
return ("'" + SequelizeHelper.SQL.asSqlDate(value) + "'")
return ("'" + value + "'")
},
valuesForUpdate: function(object, options) {
......@@ -54,13 +64,13 @@ SequelizeHelper = {
return result.join(options.seperator || ", ")
},
hashToWhereConditions: function(conditions) {
hashToWhereConditions: function(conditions, attributes) {
if(typeof conditions == 'number')
return ('id = ' + conditions)
else {
var result = []
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 ")
}
......@@ -95,6 +105,14 @@ SequelizeHelper = {
result.push(object[key])
})
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) {
)
},
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.sqlQueryFor('select', { table: tableName }),
Sequelize.sqlQueryFor('select', queryOptions),
function(result) {
var objects = []
result.forEach(function(resultSet) {
objects.push(table.sqlResultToObject(resultSet))
})
if(callback) callback(objects)
if(_callback) _callback(objects)
}
)
},
......@@ -48,15 +54,16 @@ SequelizeTable = function(sequelize, tableName, attributes) {
find: function(conditions, callback) {
sequelize.query(
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) {
if (callback) callback(table.sqlResultToObject(result[0]))
}
)
},
// TODO: mysql library currently doesn't support MYSQL_DATE!!! don't merge if fixed
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
return object
}
......@@ -79,11 +86,13 @@ SequelizeTable = function(sequelize, tableName, attributes) {
var query = null
var self = this
if(this.id == null)
this.updateAt = new Date()
if(this.id == null) {
this.createdAt = new Date()
query = Sequelize.sqlQueryFor('insert', {
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 })
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!