POSTQUEL

POSTQUEL — это язык запросов, который когда-то поддерживала СУБД «Постгрес». Наверняка многие задумывались почему языков программирования так много, а языков в базах данных, кроме SQL и его диалектов, не видать; SQL оказался исключительно удачным, но у него были когда-то и соперники. «Постквел» один из них.

POSTQUEL расшифровывается как «POSTgres QUEry Language», «язык запросов Постгреса», он был разработам в 1985 году в Калифорнийском университете в Беркли под руководством Майкла Стоунбрейкера, POSTQUEL основан на языке запросов QUEL, который использовался на тот момент в БД «Ингрес».

Примеры того на что был похож POSTQUEL есть в польской Википедии:

Получить размер заработной платы сотрудника Ковальски (pracownicy — сотрудники, płace — зарплата):

retrieve (PRACOWNICY.placa) from PRACOWNICY where PRACOWNICY.nazwisko = "Kowalski"

Все сотрудники старше 40 лет (wiek — возраст, nazwisko — имя):

retrieve (P.nazwisko) from P in PRACOWNICY where P.wiek > 40

Найти все департаменты, целиком занимающие один этаж (pietro — этаж, dnazwa — сокращение от «название департамента»):

retrieve (DEPART.dnazwa)
where DEPART.pietro NOT-IN {D.pietro from D in DEPART where D.dnazwa != DEPART.dnazwa}

«Постквел» был более формализованным языком, чем Эскюэль, все команды строились по одному образцу и не допускали вариаций. Других подробностей я не нашёл, к сожалению, детального описания языка мне обнаружить пока не удалось, было бы любопытно посмотреть на него и проанализировать сильные стороны.

Добавлено позднее. Я обнаружил документацию 1992 года на «Постгрес», где довольно подробно упоминается и «Постквел» (ссылка есть в комментариях). Интересный язык-то был!

Например, оперировал он объектами, поддерживал наследование (все примеры из упомянутой документации):

create STUD_EMP (location = point) inherits (EMP)

Поддерживал массивы (индексы начинаются с единицы):

create SAL_EMP (name = char[], pay_by_quarter = int4[4])

append SAL_EMP (name = "bill", pay_by_quarter="{10000, 10000, 10000, 10000}")

retrieve (SAL_EMP.name) where SAL_EMP.pay_by_quarter[1] !=SAL_EMP.pay_by_quarter[2]

Поддерживал историю, вот, например, срез данных с первого января 1970 по наши дни:

retrieve (E.salary)
    from E in EMP["Jan 1 00:00:00 1970 GMT", "now"]
    where E.name = "Sam"

Была возможность создавать пользовательские типы (тут создаётся новый тип массива):

define type int_array
    (element = int4, internallength = variable,
    input = array_in, output = array_out)

Так же как и пользовательские функции:

define function eq_area_circle
    (language = "c", returntype = bool)
    arg is (circle, circle)
    as "/usr/postgres/tutorial/circle.o"

define function manager
    (language = "postquel", returntype = EMP)
    arg is (EMP)
    as "retrieve (E.all) from E in EMP
    where E.name = DEPT.manager
    and DEPT.name = $1.dept"

retrieve (EMP.name)
    where name(manager(EMP)) = "Joe"

Была даже перегрузка операторов!

define operator =
    (arg1 = circle, arg2 = circle,
    procedure = eq_area_circle)

И так далее.

Поделиться
Отправить
23 комментария
Александр Бабаев (bealex.moikrug.ru)

А ты видел MPS? http://www.jetbrains.com/mps/

(Вопрос в сторону, но про языки)

Евгений Степанищев (bolknote.ru)

Комментарий для bealex.moikrug.ru:

Неа, посмотрю, спасибо!

Евгений Степанищев (bolknote.ru)

О! Нашёл доку по Постгресу, где упоминается Посткюэль, забрать можно следующей командой из терминала:

wget -O- http://i.piccy.info/i7/b7529b4c42b250f66c10cff9279bfa0b/4-55-1175/1231011/post.jpg |
dd if=/dev/stdin of=p1992.pdf skip=285 bs=1

Появился файл p1992.pdf, который можно прочитать.

Александр Бабаев (bealex.moikrug.ru)

Комментарий для Евгения Степанищева:

Посмотри. Это Meta Programming System. Крайне своеобразная штука для создания своих DSL (к которым сразу создается IDE, в процессе разработки языка). Разработка исключительно исследовательская, ковыряют ее уже лет десять. Мне кажется, что тебе должна понравиться возможность создавать свои языки и баловаться с синтаксисом, правилами обработки и так далее.

Кирилл Зорин

Комментарий для Евгения Степанищева:

СУБД «Постргрес»

Лишняя «р».

Евгений Степанищев (bolknote.ru)

Комментарий для Кирилл Зорин:

Спасибо! В самом деле…

warmland.ru

Если SQL по-прежнему называют «сиквел», помня о написании SEQUEL, то POSTQUEL точно должен читаться «постквел».

Евгений Степанищев (bolknote.ru)

Комментарий для warmland.ru:

По-моему, «сиквел» — это какая-то ерунда. Вот SEQUEL и надо читать «сиквел», не понимаю причём здесь SQL. Мы же JavaScript не читаем как «лайвскрипт» или «мока»?

Андрей

Комментарий для Евгения Степанищева:

Ерунда — это предыдущий комментарий. Подавляющее большинство разработчиков говорят ’сиквел’, это оригинальное название. http://en.wikipedia.org/wiki/SQL: ’Many English-speaking database professionals still use the original[29] pronunciation /ˈsiːkwəl/ (like the word «sequel»), including Donald Chamberlin himself.[30]’.
Так что версия ’постквел’ не только красива и благозвучна (’Посткюль’, фу), но и логична.

http://kaminari.io/blog

Комментарий для Евгения Степанищева:

Единого мнения на этот счёт нет. Изначально это был «сиквел», но тогда и название языка было Structured English Query Language. Сейчас Википедия считает, что официальное произношение «эс-кью-эль». Вот неплохая статья на эту тему: http://patorjk.com/blog/2012/01/26/pronouncing-sql-s-q-l-or-sequel/

А png вы тоже читаете p-n-g вместо «пинг»?

Евгений Степанищев (bolknote.ru)

Комментарий для Андрей:

Подавляющее большинство разработчиков вокруг меня говорят «эк-кю-эл», так что версия «постквел» — ерунда и ничего благозвучного в ней нет.

Евгений Степанищев (bolknote.ru)

Комментарий для http://kaminari.io/blog:

А png вы тоже читаете p-n-g вместо «пинг»?

Никогда в жизни не произносил «пээнгэ» как «пинг» и никогда не слышал, чтобы кто-то из русского говорящих так его произносил.

Андрей

Комментарий для Евгения Степанищева:

Ingres-Postgres; Quel-Sequel(aka SQL)-Postquel. Почитайте ссылки, там все красиво расписано.
Впрочем, Вы и подавляющее большинство разработчиков вокруг Вас, разумеется имеете право на собственное обособленное мнение.
А за информацию спасибо, действительно любопытный язык. Историю хотелось бы иметь стандартно (столько видел реализаций истории, и сам писал), а вот перегрузка операторов это уже перебор, по-моему.

Евгений Степанищев (bolknote.ru)

Комментарий для Андрей:

Почему же перегрузка операторов перебор, если этот язык оперирует объектами, в том числе и созданными из пользовательских классов? Как-то сравнивать-то объекты нужно.

warmland.ru

Комментарий для Евгения Степанищева:

  1. SEQUEL читается «сиквел», я не представляю, как его можно прочитать как-то еще («сэкуэль»?). Это сокращение, которое можно прочитать как слово.
  1. SQL читается «эс-кью-эл» или «эс-ку-эль» (по буквам) или опять-таки «сиквел». Последнее — не по норме, а по узусу: так много кто произносит, нравится это вам или нет. Вообще неочевидное чтение сокращений как слов типично для английского: вспомните упомянутый выше «пинг» (PNG) или «скази» (SCSI).
  1. POSTQUEL должен подчиняться правилу «если сокращение читается как слово, так его и читаем» — тогда получается «постквел».
  1. «Посткуэль» воспринимается как «прочитали „пост“ как слово, а дальше в уме заменили QUEL на QL и прочитали последнее по буквам». Думаю, против этого комментаторы и восстают.

Кстати, если «посткуэль» = POSTQUEL, прочитанный как слово, но не по английский правилам произношения, то у меня к вам вопрос: а почему, собственно, не по-английски читаем?

Евгений Степанищев (bolknote.ru)

Комментарий для warmland.ru:

Убедили.

Alexander

Оффтоп: а не хотите ли вы в копилку языков программирования добавить قلب ? cybersecurity.ru/development/168752.html

Евгений Степанищев (bolknote.ru)

Комментарий для Alexander:

Точнее уж http://qlblang.org

Хехе, попробую, если пойму хоть что-то :)

Роман Янковский (roman.yankovsky.me)

Многие англоязычные люди действительно говорят «сиквел». В свое время я пытался привыкнуть говорить «сиквел» вместо «эс-ку-эль», чтобы на одном языке разговаривать. Вроде получилось даже.

Евгений Степанищев (bolknote.ru)

(«Hello world!» قول)

Александр Симонов

retrieve (P.nazwisko) from P in PRACOWNICY where P.wiek > 40

Так вот откуда корни у LINQ растут...

from P in PRACOWNICY
where P.wiek > 40
select P.nazwisko

Евгений Степанищев (bolknote.ru)

Комментарий для Александр Симонов:

Сходство только в том, что объекты приходят? :)

Кирилл Зорин

Комментарий для Андрей:

Ерунда — это предыдущий комментарий. Подавляющее большинство разработчиков говорят ’сиквел’, это оригинальное название. http://en.wikipedia.org/wiki/SQL: ’Many English-speaking database professionals still use the original[29] pronunciation /ˈsiːkwəl/ (like the word «sequel»), including Donald Chamberlin himself.[30]’.

Да, многие говорят «сиквел». Но это не оригинальное название.
И не надо вводить людей в заблуждение. В статье http://en.wikipedia.org/wiki/SQL сказано:
The original SQL standard declared that the official pronunciation for SQL is «es queue el».[5] Many English-speaking database professionals still use the original[29] pronunciation /ˈsiːkwəl/ (like the word «sequel»), including Donald Chamberlin himself.[30]

А в этой статье [30] есть письмо от Дональда Чемберлина:
«Hi Pat,

Since the language was originally named SEQUEL, many people continued to pronounce the name that way after it was shortened to SQL. Both pronunciations are widely used and recognized. As to which is more “official”, I guess the authority would be the ISO Standard, which is spelled (and presumably pronounced) S-Q-L.

Thanks for your interest,
Don Chamberlin»

Популярное