Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@
* node-sqlparser: index.js
* Create : 2014-05-21 18:05:12
*/
module.exports = require('./lib/ast');
exports.AST = require('./lib/ast');
exports.parse = require('./lib/parse').parse;
exports.stringify = require('./lib/stringify');
16 changes: 12 additions & 4 deletions lib/ast.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,25 @@
var parse = require('./parser');
/**
* @class AST Helper
*/
var parse = require('./parse').parse;
var stringify = require('./stringify');

function AST(ast) {
this.ast = ast;
}

AST.parse = parse;
AST.stringify = stringify;

AST.prototype = {
/**
* parse sql string to ast object
* @param {String} sql
*/
parse: function (sql) {
this.ast = parse(sql);
},
/**
* stringify ast object to sql
* @return {String} sql
*/
stringify: function () {
return stringify(this.ast);
},
Expand Down
8 changes: 4 additions & 4 deletions lib/parse.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions lib/stringify.js
Original file line number Diff line number Diff line change
Expand Up @@ -141,8 +141,6 @@ function columnRefToSQL(e) {
}
}

exports.exprToSQL = exprToSQL;

function exprToSQL(e) {
var t = e.type;
var res ;
Expand Down Expand Up @@ -438,3 +436,6 @@ module.exports = function (ast, opt) {
}
return res;
};

module.exports.exprToSQL = exprToSQL;

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
],
"name": "node-sqlparser",
"description": "a sql parser for node.js",
"version": "1.0.0",
"version": "1.0.4",
"repository": {
"url": "git://github.com/alibaba/nquery.git"
},
Expand Down
8 changes: 4 additions & 4 deletions peg/sqlparser.pegjs
Original file line number Diff line number Diff line change
Expand Up @@ -816,10 +816,10 @@ literal_int "LITERAL INT"
}

number
= int_:int frac:frac exp:exp __ { return parseFloat(int_ + frac + exp); }
/ int_:int frac:frac __ { return parseFloat(int_ + frac); }
/ int_:int exp:exp __ { return parseFloat(int_ + exp); }
/ int_:int __ { return parseFloat(int_); }
= int_:int frac:frac exp:exp __ { var x = parseFloat(int_ + frac + exp); return (x % 1 != 0) ? x.toString() : x.toString() + ".0"}
/ int_:int frac:frac __ { var x = parseFloat(int_ + frac); return (x % 1 != 0) ? x.toString() : x.toString() + ".0"}
/ int_:int exp:exp __ { return parseFloat(int_ + exp).toString(); }
/ int_:int __ { return parseFloat(int_).toString(); }

int
= digit19:digit19 digits:digits { return digit19 + digits; }
Expand Down
11 changes: 10 additions & 1 deletion test/unit/select.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ describe('SQL select', function () {

describe('check selected fields', function () {
it('should return ok when simple fields', function () {
var sql = 'select custom(abc), def from a.tablename where custom(id) in (1, 2, 2, 3) and c = ?';
var sql = 'select custom(abc), def from a.tablename where custom(id) in (1.0, 2.1, 2, 3) and c = ?';
var result = parser.parse(sql);
var resSql = stringify(result);
expect(result)
Expand All @@ -28,6 +28,15 @@ describe('SQL select', function () {
.type('select')
.columns(['sum(abc,1)', 'def']);
});
it('should keep decimals in floats', function () {
var sql = 'select a from b where x = 1.0';
var result = parser.parse(sql);
var resSql = stringify(result);
expect(result)
.type('select')
.columns(['a']);
resSql.toLowerCase().should.equal(sql);
});
it('should ok when limit 10', function () {
var sql = 'select a from b limit 10';
var result = parser.parse(sql);
Expand Down