Разобрать SQLite ALTER, СОЗДАТЬ И ОБНОВИТЬ - PullRequest
3 голосов
/ 26 января 2011

Мой проект предусматривает запуск специальных операторов SQL для базы данных SQLite. Я ищу регулярное выражение JavaScript для анализа SQL-операторов ALTER, CREATE и UPDATE. Вот примеры и результаты, которые я ищу.

Создать индекс

CREATE INDEX Christy...
CREATE INDEX IF NOT EXISTS Christy...
CREATE UNIQUE INDEX Christy...
CREATE UNIQUE INDEX IF NOT EXISTS Christy...

Результат

a = [..."CREATE", "INDEX", "Christy"]

Создать таблицу без ограничения таблицы

CREATE TABLE Vicky (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,score REAL DEFAULT .10 CHECK (weight<=1));
CREATE TABLE IF NOT EXISTS Vicky (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,score REAL DEFAULT .10 CHECK (weight<=1));

Результат

a = [..."CREATE", "TABLE", "Vicky", "id INTEGER PRIMARY KEY AUTOINCREMENT","name TEXT","score REAL DEFAULT .10 CHECK (weight<=1)"]

Создание таблицы с ограничением таблицы

CREATE TABLE Vicky (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,score REAL DEFAULT .10 CHECK (weight<=1)),PRIMARY KEY (id, name));
CREATE TABLE IF NOT EXISTS Vicky (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,score REAL DEFAULT .10 CHECK (weight<=1)),PRIMARY KEY (id, name));

Результат

a = [..."CREATE", "TABLE", "Vicky", "id INTEGER PRIMARY KEY AUTOINCREMENT","name TEXT","score REAL DEFAULT .10 CHECK (weight<=1)","PRIMARY KEY (id, name))"]

Создать триггер

CREATE TRIGGER Arwen...
CREATE TRIGGER IF NOT EXISTS Arwen...

Результат

a = [..."CREATE", "TRIGGER", "Arwen"]

Создать вид

CREATE VIEW Snow...
CREATE VIEW IF NOT EXISTS Snow...

Результат

a = [..."CREATE", "VIEW", "Snow"]

Изменить таблицу

ALTER TABLE Vicky...

Результат

a = [..."ALTER", "TABLE", "Vicky"]

Обновление таблицы

UPDATE Vicky...
UPDATE OR ROLLBACK Vicky...
UPDATE OR ABORT Vicky...
UPDATE OR REPLACE Vicky...
UPDATE OR FAIL Vicky...
UPDATE OR IGNORE Vicky...

Результат

a = [..."UPDATE", "TABLE", "Vicky"] 


Вот ссылки на документы SQLite для этих операторов SQL.

ALTER TABLE
ИНДЕКС СОЗДАНИЯ
CREATE TABLE
CREATE TRIGGER
СОЗДАТЬ ВИД
ОБНОВЛЕНИЕ

Спасибо,
HeadDataZombie

Ответы [ 2 ]

0 голосов
/ 26 января 2011

SQL сложно (если не невозможно) проанализировать с помощью регулярных выражений.Однако ...

Странная диаграмма в верхней части каждой страницы руководства по SQLite фактически говорит вам все , что вам нужно знать, чтобы использовать генератор синтаксического анализатора, такой как PEG.js. или JS / CC для анализа ваших операторов SQL.

Например, следующий код PEG.js отлично проанализирует инструкцию ALTER TABLE:

start = altertable

altertable = "alter" w "table" w ( dbname:identifier w? "." ) ? w? tablename:identifier w ( renameto / addcolumn)

renameto = "rename" w "to" w newname:identifier

addcolumn = "add" w ( "column" w )? col:identifier

identifier = chars:([a-zA-Z][a-zA-Z_0-9]*)

w = " " +

Вам, конечно, нужно добавить действия, которые строят дерево разбора.

0 голосов
/ 26 января 2011

Вы пытаетесь разобрать их, чтобы проверить точность?Период действия?Безопасность?

Синтаксический анализ SQL не прост, и я сомневаюсь, что вы сможете сделать это в регулярном выражении с таким количеством шаблонов.Возможно эта ссылка может помочь.См. Также предыдущий вопрос parsing-sql-create-table-Statement-using-jquery и обратите внимание на упоминание TrimQuery, которое может помочь с реализацией JS.

Если вы пытаетесь войтидействия, выполняемые этими операторами модификации (CREATE / ALTER / UPDATE), возможно, достаточно просто создать триггеры для вставки в таблицу журналов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...