Это описание обычного языка запросов (VQL) для систем управления базами данных (СУБД).
Информация: VQL - это простой императивный язык для работы с базами данных, свободный от излишеств и помогающий создавать простые, понятные и эффективные запросы к СУБД.
Ревизия: VQL-24:1.2
Термин | Описание |
---|---|
БД | база данных |
Таблица | двумерных массив, является организационной единицей и реальным хранилищем информации внутри баз данных |
Запись | строка двумерного массива (таблицы) в котором хранятся данные |
Ячейка | элемент записи |
Столбец | совокупность всех ячеек находящихся в одной позиции во всех записях |
СУБД | система управления базами данных |
- создавать, удалять и изменять БД и таблицы
- описывать структуру данных
- определять данные в БД и управлять ими
- получать доступ к данным в СУБД
- устанавливать разрешения на доступ к данным и на манипулирование данными
- База данных -- это организованная коллекция данных, предназначенная для хранения информации.
- Коллекции данных можно представлять как двумерные массивы или таблицы.
- Строка таблицы может называться "запись".
- Запись состоит из ячеек, которые в контексте таблицы формируют столбцы.
- Столбцы должны иметь имена и определяют имена для ячеек в записях.
- Имена БД, таблиц и столбцов (ячеек) должны соответствовать формату
^[a-zA-Z][a-zA-Z0-9_-]*
- Записи могут иметь дополнительные служебные ячейки, имена которых должны начинаться с символа подчеркивания "_", то есть соответствовать формату
^_[a-zA-Z0-9_-]+
- Каждая запись в рамках таблицы должна иметь уникальный идентификатор "_id".
- Идентификатор записи является уникальным и при удалении записи этот идентификатор не может быть использован повторно для другой записи.
- Идентификатор записи НЕ является порядковым индексом в таблице.
- Идентификатор записи может быть сгенерирован криптографическим методом, либо может быть простым инкрементным идентификатором.
- Ячейки имена которых имеют в своем составе постфикс "_id", являются ячейками для связи таблиц, где левая часть имени (до "_id"), является названием таблицы.
- Ячейки не имеют типа, так как данные в ячейках это просто набор байт, и данные в ячейкам могут интерпретироваться как строки, которые можно преобразовывать в любой тип на стороне клиентского ПО, или в скрипте пользовательского запроса.
- Результаты выборок данных желательно представлять в формате JSON (для максимальной совместимости с другими языками).
- Запрос представляет собой сценарий обращений к СУБД (программу)
- Запрос состоит из логических блоков, называемых операциями
- Операция может состоять из одного или нескольких операндов
- Каждая операция пишется на отдельно строке без конечных символов, либо с разделителем "\n" в конце каждой операции
- Правильным оформлением запроса является только оформление в соответствии с принципом 1TBS
- Выполнение запроса
- Запрос не имеет точки входа и началом выполнения запроса является первая строка запроса
- Каждая операция в запросе выполняется последовательно
- Объявления и описания пользовательских функций происходит прямо в теле запроса
- Функция должна быть объявлена и описана до её вызова
- Функция после объявления может быть сохранена в базу данных для повторного использования при помощи директивы store funcName
- Функция может быть удалена из БД директивой forget funcName
- Каждая база данных имеет свой набор сохраненных функций
- Если при сохранении новой функции имя функции уже занято, то старая функция удаляется из БД, а новая записывается
- Имена функций должны соответствовать шаблону
[a-zA-Z][a-zA-Z0-9_]+
- Блок операций обозначается символами "{" и "}", то есть так обозначается начало и конец блока операций
- Блоком операций является тело описания функции
- Блоком операций является тело цикла
- Блок операций может быть объявлен произвольно в любом месте сценария запроса, формируя анонимную функцию
- Анонимная функция может использоваться как правый операнд и возвращать значение директивой return
- Анонимная функция может возвращать значение и записывать результат выполнения в переменную левого операнда, но её внутренний код не может быть присвоен переменной для дальнейшего вызова
- VQL предполагает использование переменных, которые должны начинаться с символа $ и соответствовать шаблону
\$[a-zA-Z0-9_]+
- Переменные предназначены для временного хранения данных во время выполнения запроса
- Переменные не требуют предварительного объявления или инициализации
- Переменная считается объявленной и инициализированной после любого упоминания этой переменной в левом операнде любой операции
- Запрос может принимать переменные от пользователя
- Имена входящих переменных должны соответствовать шаблону
\$[a-zA-Z0-9_]+
, то есть как и любые другие переменные - Входящие переменные передаются в запрос в формате JSON как объекты, где ключом является название переменной, а значение является содержимым переменной
- Имена входящих переменных должны соответствовать шаблону
- VQL поддерживает операции присваивания, сравнения, логические операции, арифметические операции и строковые конкатенации
- Присваивание обозначается символом "="
- Слева от знака присваивания находится принимающая переменная и ничто другое
- Если слева от знака присваивания нет переменной, то данные передаются стандартной зарезервированной переменной $result
- Если переменная $result использовалась ранее, то данные этой переменной будут перезаписаны
- Справа от знака присваивания находится источник данных
- Источником данных может быть переменная
- Источником данных может быть пользовательская функция
- Источником данных может быть директива или стандартная функция
- Слева от знака присваивания находится принимающая переменная и ничто другое
- Операции сравнения
- Больше: ">"
- Меньше: "<"
- Равно: "=="
- Больше или равно: ">="
- Меньше или равно: "<="
- Логические операции
- Логическое И: "&&"
- Логическое ИЛИ: "||"
- Логическое НЕ: "!"
- Арифметические операции поддерживают только целочисленные вычисления
- Сложение: "+"
- Вычитание: "-"
- Умножение: "*"
- Деление без остатка: "/"
- Остаток от деления: "%"
- Возведение в степень: "^"
- Увеличение на единицу: "++"
- Уменьшение на единицу: "--"
- Строковая конкатенация
- Сложение строк: "."
- Присваивание обозначается символом "="
- Операция может начинаться с любого количества символов пробела или табуляции, эти символы не несут никакого лексического значения и нужны только для красивого оформления тела запроса
- Между операндами в операции может быть любое количество символов пробела или табуляции
- Любой не декларированный набор символов является атомом, то есть его имя в исходном тексте запроса и его значение равны и являются константой
- Любое число само по себе является атомом, например, запись 123456789 является и именем числа и его значением
- Любой набор символов без пробела и без табуляции является строковой константой и атомом
- Для использования строки с пробелами и другими специальными символами внутри, нужно использовать обрамляющие кавычки (двойные или одинарные)
- Пользовательские и стандартные функции, а также директивы возвращают данные как результат операции.
- Процедуры (функции не возвращающие данных) не имеют смысла в VQL и не используются
- Если функция или директива вызываются без присваивания значения переменной, то результат помещается в служебную переменную $result
- Сигнатура функций:
- func название_функции(аргумент1, аргумент2, другие_аргументы) возвращаемое_значение {}
- func название_функции(аргумент1, аргумент2, другие_аргументы) значение1, значение2, ... {}
- В запросе могут быть записаны не операционные данные, называемые комментариями. Начало комментария обозначается комбинацией символов "//" и продолжается до конца строки.
VQL не требует типизации переменных, либо типизации данных, но сами типы данных существуют в самой минималистичной форме.
Тип | Обозначение | Описание |
---|---|---|
any | Любой тип | |
atom | [a-zA-Z][a-zA-Z0-9_]+ | Любое обозначение являющееся как собственным именем, так и собственным значением |
boolean | true false | Элементы логики, являются разновидностью атомов |
number | [0-9]+ | Число, разновидность атома являющееся как собственным именем, так и собственным значением |
error | [0-9]+ | Специальный тип для хранения кода ошибки в виде числа, может трактоваться как число и использоваться в арифметических операциях |
string | "" | Набор любых символов, которые могут иметь атомарный вид, либо могут быть заключены в кавычки (одинарные или двойные) если требуется использовать в значении специальные символы |
array | [] | Массив значений |
object | {} | Объект, ассоциативный массив, структура, то есть любая форма данных, предполагающая соответствие имя-значение (ключ-значение) |
Важно: Переменные и их внутреннее содержимое должны быть совместимы с форматом JSON (для максимальной совместимости с другими языками).
Директива: func
Аргументы: сигнатура
Описание: Объявление функции
Пример:
func ifNotExists($db string, $table, $columns []string) error {
$err = createDB($db)
if $err != 0 {
return $err
}
use($db, "")
$err = createTable($table, $columns)
if $err != 0 {
return $err
}
use($db, $table)
return 0
}
$err = ifNotExists($db, $table, ["name", "age", "sex", "prof", "comment"])
Директива: return
Аргументы: данные
Описание: Прерывает выполнение функции и возвращает данные. По-умолчанию, при пустых параметрах, данные равны пустой строке, пустому массиву, пустому объекту, false или 0.
Пример:
func someFunc() boolean {
return true
}
$ok = someFunc()
Директива: store
Аргументы: имя ранее объявленной функции
Описание: Записывает функцию в текущую базу данных, но не запускает её.
Пример:
func ifNotExists($db string, $table, $columns []string) error {
$err = createDB($db)
if $err != 0 {
return $err
}
use($db, "")
$err = createTable($table, $columns)
if $err != 0 {
return $err
}
use($db, $table)
return 0
}
store ifNotExists
Директива: forget
Аргументы: имя функции уже сохраненной в БД
Описание: Удаляет из текущей базы данных функцию.
Пример:
forget ifNotExists
Директива: functionality
Возвращаемое значение: строка с текстом всех сохраненных функций
Описание: Возвращает полный текст функций, сохраненных в БД.
Пример:
$sourceCode = functionality
functionality
$sourceCode = $result
Директива: for conditions {}
Аргументы: инициализация, условие, операторы
Описание: Циклическая конструкция, для многократного повторения каких-либо операций.
Пример:
for $i = 0, $i < 10, $i++ {
// some kind of operation
log("INFO", "i = ".$i)
}
Директива: continue
Описание: Прекращение текущей итерации цикла и переход к следующей итерации.
Пример:
for $i = 0, $i < 10, $i++ {
// some kind of operation
if $i < 6 {
continue
}
log("INFO", "i = ".$i)
}
Директива: break
Описание: Завершение цикла.
Пример:
for $i = 0, $i < 10, $i++ {
// some kind of operation
if $i > 6 {
break
}
log("INFO", "i = ".$i)
}
Директива: if condition {} elseif condition {} else {}
Аргументы: логические операции
Описание: Условное выполнение кода.
Пример:
if $1 == 0 {
log("INFO", "null")
} elseif $1 > 0 {
log("INFO", "more")
} else {
log("INFO", "less")
}
Директива: where condition < orderby colName asc|desc > < limit start, offset >
Аргументы: логические операции
Возвращаемое значение: массив идентификаторов _id
Описание: Выборка по условию, возвращает массив _id, соответствующих заданным условиям. Выборка осуществляется из текущей БД и таблицы установленные командой use(). Левый операнд в условии всегда название ячейки в записи таблицы, а правый операнд всегда значение ячейки записи для выполнения условия.
Пример:
use("shop", "customers")
$idsCustomers = where "age" >= 18 && "city" == "Moscow"
use(shop, customers)
$idsCustomers = where age >= $1 && city == $2
Директива: < ... > limit start, offset
Аргументы: числовые ограничения
Описание: Это дополнительная субдиректива для директивы where. Ограничители являются начальным индексом и смещением в массиве после выборки по условию для формирования конечного результирующего массива идентификаторов.
Пример:
use("shop", "customers")
$idsCustomers = where "age" >= 18 && "city" == "Moscow" limit 0, 100
use(shop, customers)
$idsCustomers = where age >= $1 && city == $2 limit 100, 100
Директива: < ... > orderby colName asc|desc
Аргументы: имя столбца для сортировки
Описание: Это дополнительная субдиректива для директивы where. Указание порядка сортировки и имя столбца как основание для сортировки результирующего набора данных. Сортировка осуществляется в прямом и обратном порядке. По-умолчанию, сортировка проводится в прямом порядке (asc).
Пример:
use("shop", "customers")
$idsCustomers = where "age" >= 18 && "city" == "Moscow" orderby "name" asc
use("shop", "customers")
$idsCustomers = where "age" >= 18 && "city" == "Moscow" orderby "_id" desc
use(shop, customers)
$idsCustomers = where age >= $1 && city == $2 orderby age asc limit 0, 100
Директива: transaction { operations rollback operations commit }
Аргументы: операции
Описание: Атомарное выполнение нескольких связанных операций. Начинает транзакцию, отменяет операции и подтверждает выполнение операций. Субдирективы rollback и commit завершают транзакцию.
Пример:
use("shop", "customers")
$idsCustomers = where "age" >= 18 && "city" == "Moscow"
transaction {
use("shop", "sales")
$idsSales = where "customers_id" == $idsCustomers
$err = update( {"geosale": $1}, $idsSales )
if $err != 0 {
rollback
}
use("shop", "customers")
$data, $err = select(["sumsale"], $idsCustomers)
if $err != 0 {
rollback
}
$l1 = len($data)
for $i = 0, $i < $l1, $i++ {
$record = $data[$i]
$id = $record["_id"]
$value = $record["sumsale"] + $1
$err = update( {"sumsale": $value}, [$id] )
if $err != 0 {
rollback
}
}
log("INFO", "Transaction is complete.")
commit
}
Директива: response
Аргументы: переменная с данными
Описание: Прерывает выполнение запроса и отправляет клиенту объект возврата соответствующий конкретной СУБД.
Пример:
use("shop", "customers")
$idsCustomers = where "age" >= 18 && "city" == "Moscow" limit 0, 100
$newTicket, $_ = verification()
$res = ""
if len($newTicket) == 0 {
$res = {"status": "ok", "data": $idsCustomers}
} else {
$res = {"status": "ok", "ticket": $newTicket, "data": $idsCustomers}
}
response $res
Название: len
Аргументы: одна переменная любого типа
Возвращаемое значение: число (длина сущности)
Описание: Производит определение типа переменной и возвращает длину сущности (для чисел возвращает количество цифр в числе)
Пример:
$lengthStr = len("any string")
$lengthStr = len($1)
Название: verification
Аргументы:
Возвращаемое значение: тикет и код ошибки
Описание: Проверяет актуальность тикета и возвращает новый тикет при необходимости или старый тикет. Следует заметить, что запрос с неверным тикетом вообще не должен начинать выполнение, а возврат нового тикета нужен только для форматирования правильного ответа.
Пример:
$newTicket, $_ = verification()
Название: log
Аргументы: уровень логирования и любое значение
Возвращаемое значение: признак выполнения операции
Описание: Производит запись в лог БД.
Пример:
$ok = log("INFO", "This is information.")
log("INFO", "This is information.")
Название: version
Возвращаемое значение: версия языка и версия СУБД
Описание: Возвращает две строки с версией VQL и версией СУБД.
Пример:
$vql, $dbms = version()
log("INFO", "VQL version: ".$vql)
log("INFO", "DBMS version: ".$dbms)
Название: createDB
Аргументы: имя базы данных
Возвращаемое значение: код ошибки
Описание: Создание базы данных с заданным именем.
Пример:
$err = createDB("dbName")
$err = createDB($1)
Название: createTable
Аргументы: имя таблицы и массив строк с названиями столбцов
Возвращаемое значение: код ошибки
Описание: Создание таблицы с заданным именем и с набором заданных столбцов. Перед выполнением обязательно нужно выполнить use(dbName, "").
Пример:
use("dbName", "")
$err = createTable("tableName", ["name", "age", "sex", "prof", "comment"])
use($1, "")
$err = createTable($2, $3)
Название: alterDBRename
Аргументы: старое и новое имя базы данных
Возвращаемое значение: код ошибки
Описание: Изменение имени базы дынных.
Пример:
$err = alterDBRename("dbName", "newDbName")
$err = alterDBRename($1, $2)
Название: alterTableRename
Аргументы: старое и новое имя таблицы
Возвращаемое значение: код ошибки
Описание: Изменение имени таблицы в базе дынных.
Пример:
use("dbName", "")
$err = alterTableRename("tableName", "newTableName")
use("dbName", "")
$err = alterTableRename($1, $2)
Название: alterTableAdd
Аргументы: имя нового столбца в таблице и его характеристики
Возвращаемое значение: код ошибки
Описание: Добавление нового столбца в текущую рабочую таблицу. Характеристики столбца могут быть пустым объектом, либо заполненный различным способом зависящим от возможностей СУБД.
Пример:
use("shop", "customers")
$err = alterTableAdd("city", {})
use("shop", "customers")
$err = alterTableAdd("city", {"Default": "Moscow", "NotNull": true, "Unique": false} )
use($1, $2)
$err = alterTableAdd($3, $4)
Название: alterTableDrop
Аргументы: имя удаляемого столбца в таблице
Возвращаемое значение: код ошибки
Описание: Удаление столбца из текущей рабочей таблицы.
Пример:
use("shop", "customers")
$err = alterTableDrop("city")
use($1, $2)
$err = alterTableDrop($3)
Название: alterTableModify
Аргументы: имя изменяемого столбца в таблице и набор его характеристик
Возвращаемое значение: код ошибки
Описание: Изменение набора характеристик столбца из текущей рабочей таблицы.
Пример:
use("shop", "customers")
$err = alterTableModify("city", {"Default": "Moscow", "NotNull": true, "Unique": false} )
use($1, $2)
$err = alterTableModify($3, $4)
Название: alterTableModifyRename
Аргументы: старое и новое имя столбца
Возвращаемое значение: код ошибки
Описание: Переименование столбца из текущей рабочей таблицы.
Пример:
use("manage", "users")
$err = alterTableModifyRename("login", "username" )
use($1, $2)
$err = alterTableModifyRename($3, $4)
Название: dropDB
Аргументы: имя базы данных
Возвращаемое значение: код ошибки
Описание: Удаление базы данных с заданным именем.
Пример:
$err = dropDB("dbName")
$err = dropDB($1)
Название: dropTable
Аргументы: имя таблицы
Возвращаемое значение: код ошибки
Описание: Удаление таблицы с заданным именем из текущей рабочей БД.
Пример:
use("dbName", "")
$err = dropTable("tableName")
use($1, "")
$err = dropTable($2)
Название: select
Аргументы: массив названий полей для выборки и массив идентификаторов _id
Возвращаемое значение: массив объектов и код ошибки
Описание: Извлекает записи из текущей рабочей таблицы. Получает на входе массив строк с названиями извлекаемых ячеек и массив уникальных идентификаторов записей. Ответ представляет собой массив записей. Каждая запись это объект в котором именем поля является название ячейки записи из рабочей таблицы, а значением поля является извлекаемое значение. Если массив полей пустой, то выбираются все поля. Если массив идентификаторов пустой, то выборка охватывает всю таблицу.
Пример:
use("shop", "customers")
$idsCustomers = where "age" >= 18 && "city" == "Moscow" limit 0, 100
$data, $err = select(["login", "name", "surname", "age", "city"], $idsCustomers)
use($1, $2)
$idsCustomers = where "age" >= $3 && "city" == $4 limit 0, 100
$data, $err = select(["login", "name", "surname", "age", "city"], $idsCustomers)
use($1, $2)
$idsCustomers = where "age" >= $3 && "city" == $4 limit 0, 100
$data, $err = select([], $idsCustomers)
func selectAll( $nameDb string, $nameTab string) []{}, error {
use($nameDb, $nameTab)
$inData, $err = select([], [])
return $inData, $err
}
store selectAll
Название: insert
Аргументы: массив объектов для создания новых записей из названий полей и их значений
Возвращаемое значение: массив уникальных идентификаторов созданных записей и код ошибки
Описание: Создает одну или несколько записей в текущей рабочей таблице. Получает массив объектов из названий полей и их значений, которые нужно вставить в таблицу как новую запись. Ответ представляет собой массив идентификаторов новых записей.
Пример:
use("shop", "customers")
$insId, $err = insert( [{"login": "kwynto", "name": "Constantine", "surname": "Zavezeon", "age": 42, "city": "Kursk"}] )
use($1, $2)
$record = [{"login": $3, "name": $4, "surname": $5, "age": $6, "city": $7}]
$insId, $err = insert($record)
use($1, $2)
$insId, $err = insert($3)
Название: update
Аргументы: объект с названиями полей и новыми значениями, и массив идентификаторов _id изменяемых записей
Возвращаемое значение: код ошибки
Описание: Модифицирует записи в текущей рабочей таблице.
Пример:
use("shop", "customers")
$idsCustomers = where "city" == "Nur-Sultan"
$err = update( {"city": "Astana"}, $idsCustomers )
use($1, $2)
$idsCustomers = where "city" == $3
$err = update( {"city": $4}, $idsCustomers )
func renameTheCity( $nameDb string, $nameTab string, $oldNameCity string, $newNameCity string ) error {
use($nameDb, $nameTab)
$idsCustomers = where "city" == $oldNameCity
$err = update( {"city": $newNameCity}, $idsCustomers )
return $err
}
store renameTheCity
Название: delete
Аргументы: массив идентификаторов _id удаляемых записей
Возвращаемое значение: код ошибки
Описание: Удаляет записи.
Пример:
use("shop", "customers")
$idsCustomers = where "ban" == true
$err = delete( $idsCustomers )
Название: truncate
Возвращаемое значение: код ошибки
Описание: Очистка таблицы (удаление всех записей). Не влияет на инкрементные идентификаторы, только удаляет записи с данными.
Пример:
use("shop", "customers")
$err = truncate()
Название: auth
Аргументы: логин и пароль
Возвращаемое значение: тикет
Описание: Производит авторизацию пользователя, принимает логин и нехэшированный пароль, а возвращает строку с тикетом, для дальнейших работ с СУБД
Пример:
$ticket = auth("root", "toor")
$ticket = auth($1, $2)
Название: authSecure
Аргументы: логин и хэш пароля
Возвращаемое значение: тикет
Описание: Производит авторизацию пользователя, принимает логин и хэш пароля, а возвращает строку с тикетом, для дальнейших работ с СУБД
Пример:
$ticket = authSecure("root", "1b4f0e9851971998e732078544c96b36c3d01cedf7caa332359d6f1d83567014")
$ticket = authSecure($1, $2)
Название: authNew
Аргументы: логин и пароль
Возвращаемое значение: код ошибки
Описание: Добавляет нового пользователя, без привилегий. Принимает логин и нехэшированный пароль, а возвращает формальные признаки выполнения
Пример:
$err = authNew("test1", "test1")
$err = authNew($1, $2)
Название: authRemove
Аргументы: логин
Возвращаемое значение: код ошибки
Описание: Удаляет пользователя. Принимает логин, а возвращает формальные признаки операции.
Пример:
$err = authRemove("test1")
$err = authRemove($1)
Название: authChange
Аргументы: логин, пароль, список новых ролей
Возвращаемое значение: код ошибки
Описание: Меняет пароль для пользователя и его роль в рамках СУБД. Принимает логин, новый нехэшированный пароль и список ролей, а возвращает формальные признаки выполнения.
Пример:
$err = authChange("test1", "test1", ["ADMIN", "ENGINEER", "MANAGER", "USER"])
$err = authChange(test1, test1, [ADMIN, ENGINEER, MANAGER, USER])
$err = authChange($1, $2, $3)
Название: use
Аргументы: имя БД и имя таблицы
Возвращаемое значение: код ошибки
Описание: Устанавливает текущую рабочую БД и рабочую таблицу, которые будет использоваться остальными командами. Если имя таблицы является пустой строкой, то устанавливается только рабочая БД.
Пример:
$err = use("dbName", "tableName")
$err = use($1, $2)
$err = use("dbName", "")
Название: showDBs
Аргументы:
Возвращаемое значение: массив строк и код ошибки
Описание: Возвращает названия всех баз данных, обслуживаемых данным экземпляром СУБД.
Пример:
$dbs, $err = showDBs()
$dbs, $err = showDBs()
Название: showTables
Аргументы:
Возвращаемое значение: массив строк и код ошибки
Описание: Возвращает названия всех таблиц текущей базы данных.
Пример:
$dbs, $err = showTables()
$dbs, $err = showTables()
Название: describe
Аргументы: имя таблицы
Возвращаемое значение: массив строк и код ошибки
Описание: Возвращает массив строк, где каждая строка является названием столбцов.
Пример:
$columns, $err = describe("users")
$columns, $err = describe($1)
Название: explain
Аргументы: имя таблицы
Возвращаемое значение: массив объектов и код ошибки
Описание: Возвращает массив объектов, где каждый объект (элемент массива) является полным описанием свойств столбца со спецификой конкретной СУБД.
Пример:
$columns, $err = explain("users")
$columns, $err = explain($1)
Название: grant
Аргументы: список БД, список пользователей, список привилегий
Возвращаемое значение: код ошибки
Описание: Принимает три массива строк с названиями баз данных, именами пользователей и названиями привилегий. Затем устанавливает указанные привилегии для пользователей в каждой базе данных. Возвращает код ошибки.
Пример:
$err = grant(["dbName1", "dbName2"], ["test1", "test2"], ["select", "insert", "update", "delete"])
$err = grant($dbs, $users, $privs)
Название: revoke
Аргументы: список БД, список пользователей, список привилегий
Возвращаемое значение: код ошибки
Описание: Принимает три массива строк с названиями баз данных, именами пользователей и названиями привилегий. Затем удаляет указанные привилегии для пользователей в каждой базе данных. Возвращает код ошибки.
Пример:
$err = revoke(["dbName1", "dbName2"], ["test1", "test2"], ["select", "insert", "update", "delete"])
$err = revoke($dbs, $users, $privs)
VQL рассчитан на унификацию языка запросов и хранимых процедур.
Эта особенность языка позволяет разрабатывать программные интерфейсы для взаимодействия с любой конкретной базой данных самым оптимальным способом.
VQL позволяет разделить ответственности по работе с данными между профессионалами различного уровня и различной компетенции, но при этом не ограничивает моноразработчиков.
этот раздел пока пуст
Автор проекта Константин Завизион (Kwynto).
Вы можете связаться с автором по e-mail: kwynto@mail.ru