Проблема с запитами
Щоб розв'язати цю задачу, вам доведеться реалізувати спрощений SQL сервер, який зміг би виконувати деякі запити. Вхідний файл буде складатись, власне, з запитів. Запити будуть одного з наступних трьох типів: CREATE TABLE, INSERT, SELECT.
Запити мають наступний вигляд:
CREATE TABLE <ім'я таблиці> (<список імен полів>);
INSERT INTO <им'я таблиці> VALUES (<список констант>);
SELECT <список спеціалізваних імен полів> FROM <список таблиць> WHERE <логічний вираз>;
Відмітимо, что формати запитів будуть у точності такими (наприклад, частина WHERE для SELECT-запиту не може бути опущена). Ключові слова мови не залежать від регістру.
Імена таблиць та полів - это непорожні послідовності маленьких букв латинського алфавіту. Під константами розуміються рядкові константи, які записуються в одинарних лапках, наприклад: 'constant'. Самі константи, так само як імена таблиць і полів, складаються з маленьких латинських букв. Імена таблиць, колонок та значення констант будуть не довші 30 символів. Жодне ім'я таблиці чи колонки не буде співпадати ні з одним із ключових слів мови: CREATE, TABLE, INSERT, INTO, VALUES, SELECT, FROM, WHERE.
Список у вказаному вище записі - це перерахування елементів списку через кому (див. приклад вхідного файлу).
Під спеціалізованим іменем поля розуміється запис <ім'я таблиці>.<ім'я поля таблиці>.
Під логічним виразом розуміється одне чи декілька порівнянь (перевірок на рівність) полів таблиць, з яких відбувається вибірка, заданих спеціалізованими іменами полів, відокремленими знаками логічних операцій AND чи OR. Обчислювати логічний вираз потрібно, враховуючи приорітет цих операцій (AND має більший приорітет). Для пояснення формату вхідних даних див. приклад вхідного файлу.
Вашою задачею буде для кожного запиту виду SELECT вивести результуючу таблицю, причому її рядки повинні йти у лексикографічному порядку. Будемо казати, що один рядок такої таблиці лексикографічно менше іншого рядка, якщо у перших декількох колонках у цих рядках йдуть однакові значення, а у наступній колонці значення у першому рядку менше, ніж значення у другому рядку (мається на увазі лексикографічне порівняння рядків).
Гарантується, що усі запити коректні, тобто задовольняють описаним вище правилам, причому усі використовувані у запитах імена таблиць, полів та спеціалізовані імена полів будуть визначені запитом типу CREATE TABLE до запиту, у якому вони будуть використовуватись. Таблиці з однаковими іменами створюватись не будуть. Кожна таблиця містить хоча б одне поле.
Вхідні дані
Вхідний файл буде містити послідовність запитів спрощеної мови SQL, описаної в умові. Кожен запит буде у окремому рядку і кожен рядок буде містити запит. У жодну з таблиць не буде вставлено більше 20 рядків (при допомозі команди INSERT). Кожен запит типу SELECT буде звертатись не більше, ніж до трьох таблиць, а у рамках одного такого запиту у списку таблиць не буде двічі зустрічатись одна й та ж таблиця.
Вихідні дані
Для кожного запиту типу SELECT вам необхідно вивести результуючу таблицю. Кожен рядок результуючої таблиці повинен знаходитись у окремому рядку вихідного файлу і повинен складатись зі значень полів, перерахованих у першій частині SELECT запиту, відокремлених одним пропуском. Після кожної таблиці необхідно вивести рядок, який буде містити три символи '-' (тобто '—').