eolymp
bolt
Спробуйте наш новий інтерфейс для відправки розв'язків
Задачі

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

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

Щоб розв'язати цю задачу, вам доведеться реалізувати спрощений \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{---}').
Ліміт часу 1 секунда
Ліміт використання пам'яті 64 MiB
Автор Mike Mirzayanov, Igor Kulkin
Джерело Saratov SU Contest, Thursday, Petrozavodsk Summer Session, August 24, 2006