Я принимаю запросы на создание операторов из SQLite следующим образом:
CREATE TABLE [users] ([id] INTEGER PRIMARY KEY AUTOINCREMENT, [username] VARCHAR, [password] VARCHAR, [default_project] VARCHAR)
созданный с помощью
SELECT sql FROM sqlite_master WHERE type = 'table' AND name = :table
и определение поля автоинкремента с помощью регулярного выражения, подобного этому:
/\b\[?id\]?\s+INTEGER\s+PRIMARY\s+KEY\s+AUTOINCREMENT\b/Ui
проблема в том, что существуют различные приемлемые способы написания ключевых слов, таких как "id"
, `id`
, 'id'
. Показано здесь http://www.sqlite.org/lang_keywords.html
Я хотел создать регулярное выражение, которое явно проверяло бы эти различные варианты ... с некоторой помощью других, к чему я пришел:
$pattern = "/\b\"(id)|(\"id\")|(\[id\])|(`id`)|('id')\"\s+INTEGER\s+PRIMARY\s+KEY\s+AUTOINCREMENT\b/Ui";
однако есть пара проблем с этим ... одна из них заключается в том, что INTEGER PRIMARY KEY AUTOINCREMENT
больше не проверяется ... и что ('id')
не соответствует должным образом ... однако, если бы я поменял его место с ("id")
... чем оно будет работать, а ("id")
не будет.