eolymp
bolt
Try our new interface for solving problems
Problems

Проблема с запросами

Проблема с запросами

Чтобы решить эту задачу, вам придется реализовать упрощенный \textbf{SQL} сервер, который смог бы выполнять некоторые запросы. Входной файл будет состоять, собственно, из запросов. Запросы будут одного из следующих трех типов: \textbf{CREATE TABLE}, \textbf{INSERT}, \textbf{SELECT}. Запросы имеют следующий вид: \textbf{CREATE TABLE <имя таблицы> (<список имен полей>);} \textbf{INSERT INTO <имя таблицы> VALUES (<список констант>);} \textbf{SELECT <список специализированных имен полей> FROM <список таблиц> WHERE <логическое выражение>;} Заметьте, что форматы запросов будут в точности такими (например, часть \textbf{WHERE} для \textbf{SELECT}-запроса не может быть опущена). Ключевые слова языка не чувствительны к регистру. Имена таблиц и полей - это непустые последовательности маленьких букв латинского алфавита. Под константами понимаются строковые константы, которые записываются в одинарных кавычках, например: '\textbf{constant'}. Сами константы, также как имена таблиц и полей, состоят из маленьких латинских букв. Имена таблиц, колонок и значения констант будут не длиннее \textbf{30} символов. Ни одно имя таблицы или колонки не будет совпадать ни с одним из ключевых слов языка: \textbf{CREATE}, \textbf{TABLE}, \textbf{INSERT}, \textbf{INTO}, \textbf{VALUES}, \textbf{SELECT}, \textbf{FROM}, \textbf{WHERE}. Список в указанной выше записи - это перечисление элементов списка через запятую (см. пример входного файла). Под специализированным именем поля понимается запись \textbf{<имя таблицы>.<имя поля таблицы>}. Под логическим выражением понимается одно или несколько сравнений (проверок на равенство) полей таблиц, из которых производится выборка, заданных специализированными именами полей, разделенными знаками логических операций \textbf{AND} или \textbf{OR}. Вычислять логическое выражение следует, учитывая приоритет этих операций (\textbf{AND} имеет больший приоритет). Для пояснения формата входных данных см. пример входного файла. Вашей задачей будет на каждый запрос вида \textbf{SELECT} вывести результирующую таблицу, причем ее строки должны идти в лексикографическом порядке. Будем говорить, что одна строка такой таблицы лексикографически меньше другой строки, если в первых нескольких колонках в этих строках идут одинаковые значения, а в последующей колонке значение в первой строке меньше, чем значение во второй строке (имеется в виду лексикографическое сравнение строк). Гарантируется, что все запросы корректны, то есть удовлетворяют описанным выше правилам, причем все используемые в запросах имена таблиц, полей и специализированные имена полей будут определены запросом типа \textbf{CREATE TABLE} до запроса, в котором они будут использоваться. Таблицы с одинаковыми именами создаваться не будут. Каждая таблица содержит хотя бы одно поле. \InputFile Входной файл будет содержать последовательность запросов упрощенного языка \textbf{SQL}, описанного в условии. Каждый запрос будет в отдельной строке и каждая строка будет содержать запрос. Ни в одну таблицу не будет вставлено более \textbf{20} строк (с помощью команды \textbf{INSERT}). Каждый запрос типа \textbf{SELECT} будет обращаться не более, чем к трем таблицам, а в рамках одного такого запроса в списке таблиц не будет дважды встречаться одна и та же таблица. \OutputFile Для каждого запроса типа \textbf{SELECT} вам необходимо вывести результирующую таблицу. Каждая строка результирующей таблицы должна находиться на отдельной строке выходного файла и должна состоять из значений полей, перечисленных в первой части \textbf{SELECT} запроса, разделенных одним пробелом. После каждой таблицы необходимо вывести строку, которая будет содержать три символа '\textbf{-}' (то есть '\textbf{---}').
Time limit 1 second
Memory limit 64 MiB
Author Mike Mirzayanov, Igor Kulkin
Source Saratov SU Contest, Thursday, Petrozavodsk Summer Session, August 24, 2006