CREATE TABLE AS — define a new table from the results of a query
https://www.postgresql.org/docs/current/sql-createtableas.html
Hello, I'm using sqlfmt as it is the best SQL formatter I found, to apply it on the Snowflake SQL dialect, but unfortunately a lot of commands such as this CREATE TABLE AS ... seems not supported yet.
Do you think I can help you solving this? And in the meantime, would you recommend a workaround to make sqlfmt still format the rest of the query?
Thanks a lot 🙏🏻
@mlemainque Thanks for your feedback and offer to contribute.
Unfortunately adding new commands like this requires changing lexing rules, which gets complex fast. I can point you to this PR, which implements (snowflake's) create ... clone statement, which is quite a bit simpler than CTAS.
I think it's likely that the implementation for CTAS will be closely related to supporting all create table statements (#300), and I don't know when I'll get around to that -- to be transparent this isn't my highest priority at the moment.
As for a workaround, for safety reasons, sqlfmt interprets create table as a FMT_OFF token, identical to the tokens we use to lex --fmt: off comments. This means you can use a --fmt: on comment to reactivate formatting. In other words this:
create table foo as --fmt: on
select 1,
2, 3
Will actually get formatted to this:
create table foo as --fmt: on
select 1, 2, 3