From 3f3a6489da71ff2ea428eb2fcffd254a0181b10b Mon Sep 17 00:00:00 2001 From: welefen Date: Sun, 17 Nov 2013 15:05:21 +0800 Subject: [PATCH] get version from package file --- lib/Lib/Core/Db.class.js | 132 ++++++++++++++++++++++++++++++++++++++- lib/think.js | 4 +- 2 files changed, 134 insertions(+), 2 deletions(-) diff --git a/lib/Lib/Core/Db.class.js b/lib/Lib/Core/Db.class.js index bae6a985..edd288e2 100644 --- a/lib/Lib/Core/Db.class.js +++ b/lib/Lib/Core/Db.class.js @@ -1,4 +1,5 @@ var url = require("url"); +var querystring = require("querystring"); /** * 数据库基类 * @return {[type]} [description] @@ -143,6 +144,7 @@ var db = module.exports = Class(function(){ */ parseWhere: function(where){ var whereStr = ""; + var self = this; if (is_string(where)) { whereStr = where; }else{ @@ -168,10 +170,138 @@ var db = module.exports = Class(function(){ if (!keySafeRegExp.test(key.trim())) { throw_error(key + " is not safe"); }; - + var multi = where && where['_multi']; + key = key.trim(); + // 支持 name|title|nickname 方式定义查询字段 + if (key.indexOf('|') > -1) { + var arr = key.split("|"); + whereStr += arr.map(function(item, i){ + var v = multi ? val[i] : val; + return "(" + self.parseWhereItem(self.parseKey(item, v)) + ")"; + }).join(" OR "); + }else if (key.indexOf("&") > -1) { + var arr = key.split("&"); + whereStr += arr.map(function(item, i){ + var v = multi ? val[i] : val; + return "(" + self.parseWhereItem(self.parseKey(item, v)) + ")"; + }).join(" AND "); + }else{ + whereStr += this.parseWhereItem(this.parseKey(key), val); + } } + whereStr += ")" + operate; } + whereStr = whereStr.substr(0, -operate.length); } + return whereStr ? (" WHERE " + whereStr) : ""; + }, + parseWhereItem: function(key, val){ + + return ""; + }, + parseThinkWhere: function(key, val){ + var whereStr = ""; + switch(key){ + // 字符串模式查询条件 + case "_string": + return val; + // 复合查询条件 + case "_complex": + return this.parseWhere(val).substr(6); + // 字符串模式查询条件 + case "_query": + var where = querystring.parse(val); + var op = " AND "; + if ("_logic" in where) { + op = " " + where["_logic"].toLowerCase() + " "; + delete where["_logic"]; + }; + var arr = []; + for(var name in where){ + var val = where[name]; + val = this.parseKey(name) + " = " + this.parseValue(val); + arr.push(val); + } + whereStr = arr.join(op); + return whereStr; + default: + return ""; + } + return ""; + }, + parseLimit: function(limit){ + return limit ? (" LIMIT " + limit) : ""; + }, + parseJoin: function(join){ + var joinStr = ""; + if (join) { + if (is_object(join)) { + for(var key in join){ + var val = join[key]; + if (val.toLowerCase().indexOf("join") > -1) { + joinStr += val; + }else{ + joinStr += " LEFT JOIN " + val; + } + } + }else{ + joinStr += " LEFT JOIN " + join; + } + }; + //将__TABLE_NAME__这样的字符串替换成正规的表名,并且带上前缀和后缀 + joinStr = joinStr.replace(/__([A-Z_-]+)__/g, function(a, b){ + return C('db_prefix') + b.toLowerCase(); + }); + return joinStr; + }, + parseOrder: function(order){ + var orderStr = ""; + var self = this; + if (is_array(order)) { + orderStr = order.map(function(item){ + return self.parseKey(item); + }).join(","); + }else if (is_object(order)) { + var arr = []; + for(var key in order){ + var val = order[key]; + val = this.parseKey(key) + " " + val; + arr.push(val); + } + orderStr = arr.join(","); + }; + return order ? (" ORDER BY " + order) : ""; + }, + parseGroup: function(group){ + return group ? (" GROUP BY " + group) : ""; + }, + parseHaving: function(having){ + return having ? (" HAVING " + having) : ""; + }, + parseComment: function(comment){ + return comment ? (" /* " + comment + "*/") : ""; + }, + parseDistinct: function(distinct){ + return distinct ? (" Distinct " + distinct) : ""; + }, + parseUnion: function(union){ + if (!union) { + return ""; + }; + var str = ""; + if ("_all" in union) { + str = "UNION ALL "; + delete union["_all"]; + }else{ + str = "UNION "; + } + var sql = []; + for(var key in union){ + var val = union[key]; + val = str + (is_array(val) ? this.buildSelectSql(val) : val); + sql.push(sql); + } + return sql.join(" "); } } }); diff --git a/lib/think.js b/lib/think.js index ccdcec35..f9651ba2 100644 --- a/lib/think.js +++ b/lib/think.js @@ -12,6 +12,8 @@ if (!global.RUNTIME_PATH) { if (global.APP_DEBUG === undefined) { global.APP_DEBUG = false; }; -global.THINK_VERSION = "0.1.4"; global.THINK_PATH = __dirname; +//从package.json文件里获取版本号 +var version = JSON.parse(require("fs").readFileSync(THINK_PATH + "/../package.json", "utf8")).version; +global.THINK_VERSION = version; require(THINK_PATH + "/Common/runtime.js"); \ No newline at end of file