sqlfmt icon indicating copy to clipboard operation
sqlfmt copied to clipboard

Why mix the style of functions and phrases?

Open 0-issue opened this issue 2 years ago • 1 comments

Input:

select
  foo,
  bar
from
  baz
where
  foo like 'abd%'
  or foo like 'ada%' escape '!'
  or foo not like 'abd%'
  or foo not like 'ada%' escape '!'
  or foo ilike 'efg%'
  or foo ilike 'ada%' escape '!'
  or foo not ilike 'efg%'
  or foo not ilike 'ada%' escape '!'

output (cat file.sql | ./main --align --casemode lower):

select foo, bar
  from baz
 where foo like 'abd%'
    or like_escape(foo, 'ada%', '!')
    or foo not like 'abd%'
    or not_like_escape(foo, 'ada%', '!')
    or foo ilike 'efg%'
    or ilike_escape(foo, 'ada%', '!')
    or foo not ilike 'efg%'
    or not_ilike_escape(foo, 'ada%', '!');

In the following excerpt, every other line has been converted to a function. Why, does it make more sense? If not, is there a way to disable that?

    or like_escape(foo, 'ada%', '!')
    or foo not like 'abd%'
    or not_like_escape(foo, 'ada%', '!')
    or foo ilike 'efg%'
    or ilike_escape(foo, 'ada%', '!')
    or foo not ilike 'efg%'
    or not_ilike_escape(foo, 'ada%', '!')

0-issue avatar Jul 04 '23 07:07 0-issue

This is because cockroach's parser converts these to a function call node instead of leaving them in their native form with an exact representation. Ideally it would do what you describe. Cockroach could be change so that the parser can full roundtrip these, and its planner is the thing that converts them some lower level function call or whatever. I no longer work on the cockroach code (where the actual AST -> pretty printing logic occurs), so I'm not able to make this change.

madelynnblue avatar Jul 04 '23 09:07 madelynnblue