keboola / php-db-import

MIT License
4 stars 0 forks source link

Identifier quoting #49

Open Halama opened 5 years ago

Halama commented 5 years ago

Dvojitou uvozovku v identifikátoru quotujeme jejích zdvojením. Snowflake si s tím ale ani tak neporadí. Zatím není jasné jestli to je feature. Ticket na SNFLK https://support.snowflake.net/s/case/5000Z000013XHyLQAW/quote-character

Pokud ji nepodporuje tak bysme myslím měly vyhazovat error při zadání takového objektu.

Halama commented 5 years ago

Hi Ondra, Do you want us to keep this case opened for now or shall we proceed to close it? I presume we have concluded that injecting double quotes in object identifiers isn't possible. Regards, Jawwad

Takže idenitifkátor uvozovku obsahovat nemůže. Tím pádem by to zdvojení uvozovky v quoteIdentifier mělo být zbytečný.

Naopak bysme měli vyhazovat exception v případě že bude předán indentifikátor s uvozovkou?

ondrejhlavacek commented 5 years ago

Doplním, že IDENTIFIER nepobere ani jednoduchou ani dvojitou.

INSERT INTO IDENTIFIER('my''table') VALUES (...);
SQL compilation error: error line 1 at position 23 invalid identifier ''my''table''
(two single quotes)

INSERT INTO IDENTIFIER('my"table') VALUES (...);
SQL compilation error: error line 1 at position 23 invalid identifier ''my"table''
(double quote)

Obyčejný uzavření identifikátoru do uvozovek umožní jednoduchou uvozovku, dvojitou ne.

INSERT INTO "my'table" VALUES (...);
Halama commented 5 years ago

Ten identifier musíš používat takhle:

INSERT INTO IDENTIFIER("my'table") VALUES (...);
Halama commented 5 years ago

a pobere to tedy vše kromě dvojíté uvozovky.

INSERT INTO IDENTIFIER("💩💩💩💩") VALUES (...);
ondrejhlavacek commented 5 years ago

Dvojitý uvozovky do IDENTIFIER? Podle dokumentace bych to nečekal

https://docs.snowflake.net/manuals/sql-reference/identifier-literal.html

ondrejhlavacek commented 5 years ago
SELECT * FROM IDENTIFIER("test'test");
SQL compilation error: syntax error line 1 at position 25 unexpected '"test'test"'.
Halama commented 5 years ago

omg, sorry nevyzkoušel jsem si to předtím a překlepl se:

create table IDENTIFIER('"my\'table"') (id varchar);

image

Halama commented 5 years ago

je to i v tech examples tady https://docs.snowflake.net/manuals/sql-reference/identifier-literal.html

Halama commented 5 years ago
-- case-sensitive table name specified in a double-quoted string
create or replace table identifier('"my_table"') (c1 number);