Hi

2018-03-03 13:32 GMT+01:00 Pavel Stehule <pavel.steh...@gmail.com>:

>
>
> 2018-03-03 11:35 GMT+01:00 Fabien COELHO <coe...@cri.ensmp.fr>:
>
>>
>> Hello devs,
>>
>> This is a discussion without actual patch intended for pg12, to be added
>> to CF 2018-09. The expected end result is either "returned with feedback",
>> meaning proceed to send some big patch(es), or "rejected", meaning the
>> project does not want this, no point in submitting something.
>>
>> Client "psql" has an "\if" which can test a boolean value and has
>> ":"-prefixed variables, including special presets such as ":VERSION_NUM"
>> and ":SERVER_VERSION_NUM".
>>
>> The features are already usable because one can do server-side
>> expressions (if connected), which is a little cumbersome and ugly but
>> nevertheless functional, eg:
>>
>>   SELECT :VERSION_NUM = :SERVER_VERSION_NUM AS "same_version" \gset
>>   \if :same_version
>>     ...
>>
>> However, when the "\if" patch was discussed, there was the underlying
>> idea to extend psql so as to add client-side expression. That would allow
>> things like:
>>
>>   \let i <some arithmetic or logical expression...>
>>   \if :VERSION_NUM = :SERVER_VERSION_NUM
>>     ...
>>
>> Before eventually starting on this subject with a loose objective of
>> targeting 12.0, I would like to ascertain, especially from committers, but
>> also from others, that:
>>
>> (1) the objective is desirable (i.e. avoid ending with "we do not want
>>     this feature on principle, the cost-benefit balance is not good
>>     enough").
>>
>> (2) maybe have a feedback on the proposed changes (not necessarily
>>     distinct patches, opinions are welcome), which would be to:
>>     (a) extend pgbench expressions so that they can handle what
>>         psql can do (eg variable-exists test which are available in psql)
>>     (b) maybe do some preliminary refactoring (eg create
>>         "pgbench/expression.c", "pgbench/variable.c")
>>     (c) move the pgbench expression engine to fe-utils
>>         (lexer, parser, execution...),
>>     (d) do some renaming (eg some "feex" prefix for "front-end
>>         expressions" to the various functions & types?),
>>     (e) abstract pgbench and psql variables so that they can be used
>>         transparently by expressions (i.e. some API alignment)
>>     (f) connect the engine to "psql"
>>     (g) create a shared documentation about these expressions,
>>         referenced from both psql and pgbench documentations.
>>     (h) provide non-regression tests on psql side as well.
>>
>> The overall transformation would be quite large (about 2000 lines moved
>> around) but "quite" simple (it is moving an existing, working and tested
>> feature to allow using it elsewhere), not a lot of new code per se.
>>
>
> I understand the request of some simple expression evaluation for pgbench
> and conditional execution for psql. Because syntax is same, then share code
> is really good idea. Lexer, parser, variable processing should be moved to
> fe-utils, other implemented on place. We don't need all commands of pgbench
> in psql, and we don't need interactive loop and psql commands in pgbench.
> But the syntax of input commands is same on both environments, and all on
> this level can be shared via some library. Some shared commands can be
> implemented in other library, and called from final positions.
>
> Using some simple expressions evaluations is much more simple, then
> integration some full functional VM like lua, Python - and still good
> enough.
>
> I have not the feedback from psql users about missing strong integrated
> language. What is current weak place of psql is tab complete and readline
> multiline editor. The pgcli is better - and second hand, everything else is
> better in psql.
>

please, can you port expression evaluation from pgbench to psql? I miss a
patch.

I am sure so psql expression evaluation has strong benefit - mainly for
expressions like

\if SERVER_VERSION_NUM >= xxxx


\endif

Regards

Pavel

Regards

Pavel


> Regards
>
> Pavel
>
>>
>> --
>> Fabien.
>>
>>
>

Reply via email to