Разбор оператора SQL CREATE TABLE с помощью jQuery? - PullRequest
1 голос
/ 31 октября 2010

Я пишу веб-приложение, которое использует SQL в качестве входных данных.Этот SQL всегда должен быть оператором CREATE TABLE, и мое приложение должно получать из него следующие атрибуты:

  • Имя поля
  • Тип
  • Длина (если доступно)
  • Двоичный (если доступно)
  • Разрешить NULL (если доступно)
  • Автоинкремент (если доступно)

ПримерSQL:

CREATE TABLE customer
(First_Name char(50),
Last_Name char(50),
Address char(50),
City char(50),
Country char(25),
Birth_Date date)

Понятия не имею, с чего начать, и я не так хорош в написании таких парсеров.Есть ли парсеры SQL для JavaScript / jQuery, которые я могу использовать, или любой пример кода?Спасибо.

Ответы [ 2 ]

2 голосов
/ 31 октября 2010

Это не полное решение, но, надеюсь, что-то, с чего можно начать.

Вы можете проверить следующее регулярное выражение:

/^CREATE\s+TABLE\s+(\S*)\s*\((.*)\)$/

Это грубо, но должно совпадать.

Затем вы можете вытащить первую совпавшую группу (при условии, что вам нужно имя таблицы), а затем вторую совпавшую группу для списка полей

Затем вы можете разделить список полей на запятую, чтобы получить информацию для каждого поля. Помимо этого, вы можете получить имя поля, сопоставив первую группу в /^(.)\s(.)$/ ... Вам нужно будет немного более креативно разбирать вторую половина утверждения (типы, длины, ноль / не ноль, по умолчанию, идентичность (1,1)), но если вы можете определить какой-то шаблон, который всегда будет применяться, я уверен, что это можно сделать. Обратите внимание, что в приведенном выше тексте также предполагается, что пробел правильно обрезан, но это достаточно просто.

1 голос
/ 31 октября 2010

Существует проект OpenSource, расположенный в Google Projects, который называется " TrimQuery ", ниже приведен пример:

var selectStatement = queryLang.parseSQL("SELECT Customer.* FROM Customer");

Имеет большую поддержку общих языков SQL, таких как JOINS и SELECT item.*,relation.other FROM X

Надеюсь, это поможет.

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