Size: a a a

2020 July 13

A

Alex in ctodailychat
Dedulik
Иначе я бы ничего никогда не написал ) я сначала фигачил без тестов. 80% времени уходило на то, чтобы проверять изменения.
Или вот например кейс - перевозил парсер с синтаксиса pg10 на синтаксис pg13
казалось бы - ну появятся новые узлы в ast, ничего не сломается.

Щаааз! Там перефигачили часть узлов наглухо.

Или моё любимое - есть енум с типами объектов. OBJECT_TABLE, OBJECT_VIEW. У сишников это как делается? Через числовые константы -  OBJECT_TABLE =1, OBJECT_VIEW = 2. и таких 40 штук.
Соответственно в ast это выглядит как type: 1

Добавили 2 типа объектов. Казалось бы - ну сделай ты 41 и 42. так нет, у них цифры добавились в середину. Знаете почему? Потому что имена констант упорядоченны по алфавиту!
Не, ну ок, они официально не предоставляют парсер третьим лицам, поэтому в замкнутой системе делаем что хотим.
Но бладж!
а ты сам пишешь парсер? а нельзя сделать, чтобы запросы парсил PG и потом как-то вынимать мета-данные? иначе это не масштабируется...
источник

D

Dedulik in ctodailychat
Alex
а ты сам пишешь парсер? а нельзя сделать, чтобы запросы парсил PG и потом как-то вынимать мета-данные? иначе это не масштабируется...
там 2 части. sql->ast парсит pg. и тк они никому не обещали обратную совместимость ast, приходится это проверять.

мой парсер уже майнит информацию из ast
источник

D

Dedulik in ctodailychat
кстати отдельный вопрос что взять, чтоб сгенерить парсер для кастомной грамматики. хочу snowflakedb поддерживать, а они морозятся - говорят, хз где грамматику брать )
источник

A

Alex in ctodailychat
вот даже ненавидимые тобой рубисты это делают https://github.com/lfittl/pg_query
источник

D

Dedulik in ctodailychat
Alex
вот даже ненавидимые тобой рубисты это делают https://github.com/lfittl/pg_query
я выше написал, что я делаю так же ) причем, это одна из оберток (js, go, python, ruby) одной единственной либы на си.
я начал именно с нее, но она сделана для pg10 только. для pg13 пришлось допиливать самим. причем сишную либу )
источник

A

Alex in ctodailychat
дада, include "parser/parser.h" я вижу
источник

D

Dedulik in ctodailychat
Alex
дада, include "parser/parser.h" я вижу
ее пилил чувак из pg_analyzer
может ему запретили обновлять, я хз))

тесты не на ast парсер, а тесты на мой парсер, который из ast майнит типы. причем именно интеграционные - что получается на выходе. отдельные функции юниттестами я не покрываю
источник

D

Dedulik in ctodailychat
но вот теперь я хочу поддерживать другой синтаксис. mysql например. мне надо такое же провернуть с парсером mysql, тк его тоже отдельно никто не предоставляет.
для clickhouse есть отдельный парсер, но неофициальный. значит, если захочется поддерживать свежак, надо делать тоже самое, что с pg.

но есть базы, которые не опенсорц. и чтоб их поддерживать, надо либо доставать грамматику у производителя, либо искать любительскую, либо писать свой парсер.

для старых версий oracle, mssql есть любительские, но я их собрать не смог :( точнее смог, но они не парсят )))

оказывается, sqllite имеет кучу возможностей с точки зрения sql. там даже cte есть.

попробую его завести и править...
источник

D

Dedulik in ctodailychat
дело еще в том, что если бы я парсил только типы, обошлось бы 50ю тестами, а не 500. но сама сложная часть это nullable и порядок количества строк. там просто ад ) вчера, например, одну багу нашел в функционале, которому больше полугода )
источник

СА

Сергей Аксёнов... in ctodailychat
Dedulik
дело еще в том, что если бы я парсил только типы, обошлось бы 50ю тестами, а не 500. но сама сложная часть это nullable и порядок количества строк. там просто ад ) вчера, например, одну багу нашел в функционале, которому больше полугода )
Хватит оправдываться перед людьми, которые наверняка ничего тяжелее REST json-ов в руках не держали) У меня на прошлой работе была похожая история: умные счётчики электричества, которые передают по радио десятка три параметров, плюс события, плюс реагируют на команды. И парсер, который должен это всё переводить в человеко-понятные графики, цифры и в итоге счета за энергию. Прошивку для счётчика как написали - так она и уехала в глухую деревню за Уралом, пофиксить в ней баг - дело 2 часов, перешить все счётчики в деревне - дело 2 недель и 5 человек, которые в 30-градусный мороз должны лазить с программаторами на столбы (fun fact: провода программаторов в силиконовой изоляции уже в -10 ломаются как макароны). Конечно как я пришёл туда - первым делом покрыл тестами в два слоя и прошивку, и парсер.
источник

D

Dedulik in ctodailychat
Сергей Аксёнов
Хватит оправдываться перед людьми, которые наверняка ничего тяжелее REST json-ов в руках не держали) У меня на прошлой работе была похожая история: умные счётчики электричества, которые передают по радио десятка три параметров, плюс события, плюс реагируют на команды. И парсер, который должен это всё переводить в человеко-понятные графики, цифры и в итоге счета за энергию. Прошивку для счётчика как написали - так она и уехала в глухую деревню за Уралом, пофиксить в ней баг - дело 2 часов, перешить все счётчики в деревне - дело 2 недель и 5 человек, которые в 30-градусный мороз должны лазить с программаторами на столбы (fun fact: провода программаторов в силиконовой изоляции уже в -10 ломаются как макароны). Конечно как я пришёл туда - первым делом покрыл тестами в два слоя и прошивку, и парсер.
мне кажется это хитрый ход со стороны @jitbit, направленный на популяризацию моего продукта, через dev-porn вопросы  ))))

я как-то видел как iot разработчики работают. там со стороны iot, как мне кажется, даже пробовать править не стоит начинать ) лучше со своей стороны
источник

D

Dedulik in ctodailychat
@jitbit а сколько SLOC расскажешь? )
источник

СА

Сергей Аксёнов... in ctodailychat
Dedulik
мне кажется это хитрый ход со стороны @jitbit, направленный на популяризацию моего продукта, через dev-porn вопросы  ))))

я как-то видел как iot разработчики работают. там со стороны iot, как мне кажется, даже пробовать править не стоит начинать ) лучше со своей стороны
Я ничего и не правил, просто тестами покрыл и настроил CI так, что без зелёных тестов изменения в прошивку не могли попасть)
источник

D

Dedulik in ctodailychat
Сергей Аксёнов
Я ничего и не правил, просто тестами покрыл и настроил CI так, что без зелёных тестов изменения в прошивку не могли попасть)
так их!)
источник

DB

Dmitry Badanin in ctodailychat
Ребята, кто нибудь пробовал https://docs.microsoft.com/en-us/windows/wsl/install-win10 в деле? Ищу поводы переехать с макоси на винду.
источник

D

Dedulik in ctodailychat
Alex пошел по этому пути, насколько я помню
источник

A

Artur in ctodailychat
там надо проверить номер билда
источник

A

Artur in ctodailychat
для начала. без него wsl2 не заведется, а он чем-то был сильно получше
источник

A

Artur in ctodailychat
тоже собираюсь переезжать с макоси на винду кстати
источник

D

Dedulik in ctodailychat
я вот вчера задолбался запускать бинарник, собранный под убунту через докер в макоси и пошел искать как это безобразие прекратить. нашел даже один проект. даже запускается. но там какая-то шляпа с экранированием кавычек в параметрах и пришлось забить )
но может кому-то пригодится
https://github.com/linux-noah/noah
источник