pgsql-ast-parser
Advanced tools
Comparing version 4.1.4 to 4.1.5
@@ -1,2 +0,2 @@ | ||
export { parse, parseFirst, parseArrayLiteral, parseGeometricLiteral } from './parser'; | ||
export { parse, parseFirst, parseArrayLiteral, parseGeometricLiteral, parseIntervalLiteral } from './parser'; | ||
export { astVisitor } from './ast-visitor'; | ||
@@ -10,2 +10,3 @@ export { arrayNilMap, assignChanged, astMapper } from './ast-mapper'; | ||
export type { IAstPartialVisitor, IAstVisitor } from './ast-visitor'; | ||
export { intervalToString, normalizeInterval } from './literal-syntaxes/interval-builder'; | ||
//# sourceMappingURL=index.d.ts.map |
{ | ||
"name": "pgsql-ast-parser", | ||
"version": "4.1.4", | ||
"version": "4.1.5", | ||
"description": "Yet another simple Postgres SQL parser/modifier", | ||
@@ -12,5 +12,5 @@ "main": "index.js", | ||
"release-node": "git diff --exit-code && npm run test && npm run cover && npm run build && cp -r src lib/src && npm run build:deno && deno run deno-test.ts && npm publish lib", | ||
"release-deno": "git add -A && git commit -m \"Build deno\" && PACKAGE_VERSION=$(cat package.json | grep \\\"version\\\" | head -1 | awk -F: '{ print $2 }' | sed 's/[\",]//g' | tr -d '[[:space:]]') && git tag $PACKAGE_VERSION && git push --tags", | ||
"release-deno": "git add -A && git commit -m \"Build deno [autogenerated commit]\" && PACKAGE_VERSION=$(cat package.json | grep \\\"version\\\" | head -1 | awk -F: '{ print $2 }' | sed 's/[\",]//g' | tr -d '[[:space:]]') && git tag $PACKAGE_VERSION && git push --tags", | ||
"typecheck": "tsc --project tsconfig.json --noEmit", | ||
"deno:gen": "nearleyc src/syntax/main.ne -o .deno/syntax/main.ne.ts && nearleyc src/literal-syntaxes/array.ne -o .deno/literal-syntaxes/array.ne.ts&& nearleyc src/literal-syntaxes/geometric.ne -o .deno/literal-syntaxes/geometric.ne.ts", | ||
"deno:gen": "nearleyc src/syntax/main.ne -o .deno/syntax/main.ne.ts && nearleyc src/literal-syntaxes/array.ne -o .deno/literal-syntaxes/array.ne.ts&& nearleyc src/literal-syntaxes/geometric.ne -o .deno/literal-syntaxes/geometric.ne.ts&& nearleyc src/literal-syntaxes/interval.ne -o .deno/literal-syntaxes/interval.ne.ts&& nearleyc src/literal-syntaxes/interval-iso.ne -o .deno/literal-syntaxes/interval-iso.ne.ts", | ||
"build:deno": "rimraf .deno && node ./deno-transpile.js --copy && npm run deno:gen && node ./deno-transpile.js --process", | ||
@@ -17,0 +17,0 @@ "test": "mochapack src/**/*.spec.ts", |
@@ -1,2 +0,2 @@ | ||
import { Statement, Expr, QName, Point, Line, Segment, Box, Path, Polygon, Circle } from './syntax/ast'; | ||
import { Statement, Expr, QName, Point, Line, Segment, Box, Path, Polygon, Circle, Interval } from './syntax/ast'; | ||
/** Parse the first SQL statement in the given text (discards the rest), and return its AST */ | ||
@@ -9,2 +9,3 @@ export declare function parseFirst(sql: string): Statement; | ||
export declare function parseArrayLiteral(sql: string): string[]; | ||
export declare function parseIntervalLiteral(literal: string): Interval; | ||
export declare function parseGeometricLiteral(sql: string, type: 'point'): Point; | ||
@@ -11,0 +12,0 @@ export declare function parseGeometricLiteral(sql: string, type: 'line'): Line; |
@@ -1,2 +0,2 @@ | ||
export { parse, parseFirst, parseArrayLiteral, parseGeometricLiteral } from './parser'; | ||
export { parse, parseFirst, parseArrayLiteral, parseGeometricLiteral, parseIntervalLiteral } from './parser'; | ||
export { astVisitor } from './ast-visitor' | ||
@@ -10,1 +10,2 @@ export { arrayNilMap, assignChanged, astMapper } from './ast-mapper'; | ||
export type { IAstPartialVisitor, IAstVisitor } from './ast-visitor' | ||
export { intervalToString, normalizeInterval } from './literal-syntaxes/interval-builder'; |
@@ -1,2 +0,2 @@ | ||
import { Statement, Expr, LOCATION, QName, GeometricLiteral, Point, Line, Segment, Box, Path, Polygon, Circle } from './syntax/ast'; | ||
import { Statement, Expr, LOCATION, QName, GeometricLiteral, Point, Line, Segment, Box, Path, Polygon, Circle, Interval } from './syntax/ast'; | ||
import { Parser, Grammar } from 'nearley'; | ||
@@ -6,2 +6,5 @@ import sqlGrammar from './syntax/main.ne'; | ||
import geometricGrammar from './literal-syntaxes/geometric.ne'; | ||
import intervalTextGrammar from './literal-syntaxes/interval.ne'; | ||
import intervalIsoGrammar from './literal-syntaxes/interval-iso.ne'; | ||
import { buildInterval } from './literal-syntaxes/interval-builder'; | ||
@@ -11,2 +14,4 @@ let sqlCompiled: Grammar; | ||
let geometricCompiled: Grammar; | ||
let intervalTextCompiled: Grammar; | ||
let intervalIsoCompiled: Grammar; | ||
@@ -45,3 +50,18 @@ /** Parse the first SQL statement in the given text (discards the rest), and return its AST */ | ||
export function parseIntervalLiteral(literal: string): Interval { | ||
if (literal.startsWith('P')) { | ||
if (!intervalIsoCompiled) { | ||
intervalIsoCompiled = Grammar.fromCompiled(intervalIsoGrammar); | ||
} | ||
return buildInterval(literal, _parse(literal, intervalIsoCompiled)); | ||
} else { | ||
if (!intervalTextCompiled) { | ||
intervalTextCompiled = Grammar.fromCompiled(intervalTextGrammar); | ||
} | ||
const low = literal.toLowerCase(); // full text syntax is case insensitive | ||
return buildInterval(literal, _parse(low, intervalTextCompiled)); | ||
} | ||
} | ||
export function parseGeometricLiteral(sql: string, type: 'point'): Point; | ||
@@ -48,0 +68,0 @@ export function parseGeometricLiteral(sql: string, type: 'line'): Line; |
@@ -775,2 +775,12 @@ // import { IType } from '../../interfaces'; | ||
r: number; | ||
} | ||
} | ||
export interface Interval { | ||
years?: number; | ||
months?: number; | ||
days?: number; | ||
hours?: number; | ||
minutes?: number; | ||
seconds?: number; | ||
milliseconds?: number; | ||
} |
@@ -5,6 +5,7 @@ import { Parser, Grammar } from 'nearley'; | ||
import { trimNullish } from '../utils'; | ||
import { Expr, SelectStatement, CreateTableStatement, CreateIndexStatement, Statement, InsertStatement, UpdateStatement, AlterTableStatement, DeleteStatement, CreateExtensionStatement, CreateSequenceStatement, AlterSequenceStatement, DropTableStatement, SelectedColumn } from './ast'; | ||
import { Expr, SelectStatement, CreateTableStatement, CreateIndexStatement, Statement, InsertStatement, UpdateStatement, AlterTableStatement, DeleteStatement, CreateExtensionStatement, CreateSequenceStatement, AlterSequenceStatement, DropTableStatement, SelectedColumn, Interval } from './ast'; | ||
import { astMapper, IAstMapper } from '../ast-mapper'; | ||
import { IAstVisitor } from '../ast-visitor'; | ||
import { toSql, IAstToSql } from '../to-sql'; | ||
import { parseIntervalLiteral } from '../parser'; | ||
import { normalizeInterval } from '../literal-syntaxes/interval-builder'; | ||
@@ -147,2 +148,13 @@ export function checkSelect(value: string | string[], expected: SelectStatement) { | ||
: { expr }); | ||
} | ||
export function checkInterval(input: string | string[], expected: Interval) { | ||
for (const v of Array.isArray(input) ? input : [input]) { | ||
it('parses interval "' + v + '"', () => { | ||
expect(normalizeInterval(parseIntervalLiteral(v))) | ||
.to.deep.equal(expected); | ||
}) | ||
} | ||
} |
@@ -552,3 +552,12 @@ import { nil } from '../utils'; | ||
} | ||
export interface Interval { | ||
years?: number; | ||
months?: number; | ||
days?: number; | ||
hours?: number; | ||
minutes?: number; | ||
seconds?: number; | ||
milliseconds?: number; | ||
} | ||
export {}; | ||
//# sourceMappingURL=ast.d.ts.map |
@@ -1,2 +0,2 @@ | ||
import { Expr, SelectStatement, CreateTableStatement, CreateIndexStatement, Statement, InsertStatement, UpdateStatement, AlterTableStatement, DeleteStatement, CreateExtensionStatement, CreateSequenceStatement, AlterSequenceStatement, SelectedColumn } from './ast'; | ||
import { Expr, SelectStatement, CreateTableStatement, CreateIndexStatement, Statement, InsertStatement, UpdateStatement, AlterTableStatement, DeleteStatement, CreateExtensionStatement, CreateSequenceStatement, AlterSequenceStatement, SelectedColumn, Interval } from './ast'; | ||
export declare function checkSelect(value: string | string[], expected: SelectStatement): void; | ||
@@ -17,2 +17,3 @@ export declare function checkCreateSequence(value: string | string[], expected: CreateSequenceStatement): void; | ||
export declare function columns(...vals: (Expr | string)[]): SelectedColumn[]; | ||
export declare function checkInterval(input: string | string[], expected: Interval): void; | ||
//# sourceMappingURL=spec-utils.d.ts.map |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
1117667
158
12207