Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CaseWhenExpression для PostgreSQL #229

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

AlexeyDsov
Copy link
Member

На прошлой неделе делал генерацию отчетов и внезапно понадобилось использовать Conditional Expression выражение из PostgreSQL. Соотвественно написал вот такой вот CaseWhenExpression.

Есть нужно использовать только одно условия и else, то их можно передать в метод create через аргументы - первый аргумент это условие when, второй аргумент - значение/выражение возвращаемое в случае если условие выполняется и третий аргумент это else.
Если необходимо задать дополнительные условия то есть метод addCase с двумя аргемунтами: условие - первый аргумент и то что необходимо вернуть в случае успешного выполнения условия.

В SQL все условия генерируются в порядке их добавления, else всегда ставится последним. При генерации в SQL в случае если в addCase передавались строки, то первая строка по умолчанию считается полем, а вторая считается значением. Соотвественно в случае PostgreSQL они оборачиваются в разные кавычки и по разному эскейпятся.

Возможно в методу toDialectString необходимо добавить Assert на пустое количество условий т.к. в этом случае сгенерируется не валидный SQL. (Напишите что думаете по этому поводу)

Bonus:
Небольшой фикс в PrefixUnaryExpression::create - перевернул параметры при передаче их в конструктор, т.к. сейчас в create один порядок аргументов, а в конструкторе другой. Моя ошибка был не прав. Это кривой фикс для сохранения BC. С другой стороны PrefixUnaryExpression редко кто использует, думаю, и, пожалуй, можно и изменить порядок аргументов в самом методе create. (Напишите что думаете и по этому поводу)
P.S. судя по логу неправильный create по какой-то причине когда-то сделал я

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant