Releases: codeschool/sqlite-parser
v0.9.1
Changed
-
sqlite-parseris now completely free of runtime dependencies aspromisehas been removed as a dependency. you can still use the library as a promise-based module, but you have to include andrequire('promise')manually.// Promise-based usage var Promise = require('promise'), sqliteParser = Promise.denodeify(require('sqlite-parser')); sqliteParser("SELECT * FROM bees") .then(function (res) { // Result AST console.log(res); }, function (err) { // Error console.log(err); });
// Standard usage var sqliteParser = require('sqlite-parser'); sqliteParser("SELECT * FROM bees", function (err, res) { if (err) { // Error console.log(err); } else { // Result AST console.log(res); } });
-
forked
pegjsrepository asnwronski/pegjsto get the changes intopegjscore into version control so they are not accidentally overwritten -
getting closer to displaying correct error location when there are multiple statements in the input SQL
-
removed
privateflag inpackage.jsonahead of first published release -
pulled out last remnants of
promisefrom coresqlite-parserlib
Notes
- Even though the
Traceris now pretty good at pinpointing where a SyntaxError occurred, it is still removingCREATE TABLEnode when there is a failure in the statement, even though that information should be part of the error message.
v0.8.0
Added
- additional rule descriptions in
grammar.pegjs - added several array methods (e.g.:
findLast(),takeRight(),pluck()) so that I could removelodashas a dependency of the "smart error"Tracerclass
Changed
- updated grammar to remove all dependence on
modifierclause as it was being used as a catch-all clause for stray parts of statements - created
deferclause - normalized format for common clauses and nodes across different statement types
- removed
rangevariant that was part ofBETWEENexpressions - renamed several clauses to match the SQL keywords and/or SQLite manual descriptions used to define them
- for
WITHOUT ROWIDinCREATE TABLE:modifier->optimization - for
IF NOT EXISTSin all places:modifier:condition
- for
- cleaned up css in the interactive demo
- removed
lodashdependency in coreTracer.lodashis now only adevDependencyagain!
Fixed
-
fixed error reporting when there is more than one statement in the input SQL.
- still need to make sure previous tree is not used if a subsequent statement has an error at the highest level
SELECT * FROM cats; SELECT * d
-
fixed rules for double-quoted, backticked, and bracketed identifiers to allow for escapes, leading or trailing spaces, and the full character set that is legal for quoted identifiers, where allowed.
-
fixed datatype names that did not display correctly in generated AST. fixed string literal definition to allow all possible input
-
fixed value format for direction key in
PRIMARY KEYtable conatrainsts -
do not show parenthesis in error message for syntax error when there is nothing to put inside them.
-
fixes for css in demo. for example, demo layout off by 1px when at smallest resolution, did a lot of cleanup on demo styles, responsive layout, error notification. also, changed error message format for smart errors.
Notes
- to support the "smart errors" changes were made to the
pegjslibrary code inlib/compiler/passes/generate-javascript.js. this was done to allowTracerto get thedescriptionnames for the rules that are referenced in the error messages. will need to forkpegjsto get the changes topegjscore into version control so they are not accidentally overwritten. - considering removing the
promisedependency from the coresqlite-parserlibrary beforev1.0.0, as well, so that the parser can be dependency free as a standalone library. people could choose to "promisify" the parser or just use it synchronously instead of being forced to bundle thepromisedependency when bundling this package for use in the browser. It actually looks like all the evergreen browsers except IE currently support a nativePromiseimplementation, so having a non-nativePromiseimplementation as a dependency will probably be obsolete pretty soon.
v0.6.0
Added
-
sqlite-parserdemodemo/folder containing interactive demo of parser. demo JavaScript is all in a self-contained, browserified packagebrowserifytask added toGruntfile.jsfor creatingsqlite-parser-demo.jsindemo/asgrunt demoand a watcher/livereload version asgrunt interactiveCodeMirrordependency intodevDependencies- updated
TODO.mdand.npmignorefor new Interactive demo
-
sqlite-parserdistributablebrowserifytask added toGruntfile.jsfor creatingsqlite-parser-dist.jsindist/asgrunt dist- attaches a single function to
windowassqliteParser
-
some missing names for grammar rules
-
smarter error messages using rule descriptions and tracer functionality in newest
pegjs -
turned tracer/smart error code into a
Tracerclass located attracer.jsinsrc/var t = Tracer(); return new Promise(function(resolve, reject) { resolve(parser.parse(source, { 'tracer': t })); }) .catch(function (err) { t.smartError(err); });
Changed
- renamed
parse.jsrandutil.jsfiles insrc/andlib/folders - pointing to latest
pegjsmaster to get latestSyntaxErrorformat parseError1.sqlspec updated for new smarter error syntax- cleaned up smart error code to follow the most relevant error path of the
pegjstrace output
Fixed
-
accidentally repeating first
descriptionin the error thrown from thesmartError()method ofTracerThere is a syntax error near FROM Clause [FROM Clause, Table Identifier]
Notes
- need to remove the
lodashdependency fromTracerbefore v1.0.0
v0.3.1
Added
-
rules line and block comments
-
specs for comment types
-- Line comment /* * Block comment /* nested comment */ */
-
rules for
CREATE INDEX -
specs for
CREATE INDEXstatement -
CREATE TRIGGERsyntax and AST -
specs for
CREATE TRIGGERstatement -
specs for some expression grouping issues that were experienced when using binary and unary expressions along with
AND,ORCREATE INDEX `bees`.`hive_state` ON `hive` (`happiness` ASC, `anger` DESC) WHERE `happiness` ISNULL AND `anger` > 0
-
CREATE VIEWsyntax and AST -
specs for
CREATE VIEWstatement -
CREATE VIRTUAL TABLEsyntax and AST -
specs for
CREATE VIRTUAL TABLEstatement -
allow subquery in parenthesis within
FROMclause -
New specs: Basic Drop Table, Basic Drop Trigger, Basic Function, Basic Subquery, Basic Union, Create Check 1, Create Check 2, Create Foreign Key 1, Create Foreign Key 2, Create Primary Key 1, Create Table Alt Syntax, Expression Like, Expression Table 1, Expression Unary 1, Function Mixed Args, Insert Into Default, Join Types 1, Join Types 2, Select Parts 1, Select Qualified Table 1, Transaction Rollback
-
LICENSEfile added -
.npmignorefile added
Changed
-
updated rules and specs to remove use of
modifierproperty in AST -
allow multiple expressions for
GROUP BYclauseSELECT color, type, name FROM hats GROUP BY type, color
-
changed AST for create table, constraints, joins, select parts, transactions, unions, triggers to pass new specs
-
INSERTstatementVALUESclause AST normalized for value lists andDEFAULT VALUES{ "type": "values", "variant": "list", "values": [] }, { "type": "values", "variant": "default", "values": null } -
normalized AST across all column constraints and table constraints. all table constraints are
{"type": "definition", "variant": "constraint"}and contain adefinitionarray that contains the constraint. the constraint indefinitionshas the same format as the column constraint definition. -
updated package dependencies
-
index.jsfile moved to file root, duplicate copies inlib/andsrc/removed -
going to try and keep (most significant) version numbers synchronized between
sqlite-parserandsqlite-treeto avoid confusion going forward
Fixed
-
some grouping errors for unary operators, unary null and binary concatenation
-
The
CREATE VIRTUAL TABLEstatement previously only worked with expression arguments. Fixed by checking for a column name followed by a type definition or column constraint before assuming the type is an expression list, if these things are found, then treat the arguments as a set of source definitions as in a creation statement for a table.CREATE VIRTUAL TABLE happy_table USING happy_module(...); id int -- treat as definitions for CREATE TABLE x != 2 -- treat as an expression list
-
allow for nested parenthesis
-
allow multiple binary expressions and concatenation operators within parenthesis
SELECT * FROM hats WHERE hat OR (shirt AND (shoes OR wig) AND pants)
Notes
-
CREATE VIRTUAL TABLEcurrently only works with expression arguments and does not support passing column definitions and/or table constraint definitions as is allowed in the SQLite spec for virtual table module arguments.CREATE VIRTUAL TABLE vtrl_ads USING tbl_creator( id int PRIMARY KEY, name varchar(50), category varchar(15), cost int);