-
Notifications
You must be signed in to change notification settings - Fork 574
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
IDO PgSQL: always use regular string literals #8955
Conversation
IdoPgsqlConnection::Escape() internally uses PQescapeStringConn() and its documentation states the following: Furthermore, PQescapeStringConn does not generate the single quotes that must surround PostgreSQL string literals; they should be provided in the SQL command that the result is inserted into. So it's intended to use the result in 'string' literals, not in E'string' literals as Icinga did. This results in problems as the behavior of PQescapeStringConn() depends on how the current connection will interpret regular single quoted literals, namely on the value of the standard_conforming_strings variable. The E'string' literals were initially introduced in ac6f3f8 to fix #1206 where PostgreSQL started warning about escape sequences in string literals not supported by the SQL standard (but by PostgreSQL depending on the value of standard_conforming_strings). In the meantime the oldest PostgreSQL version on any platform supported by Icinga increased to 9.2 (CentOS 7) and starting with 9.1, standard_conforming_strings is enabled by default, so there will be no warnings about escape sequences (as the warning is only issued if the escape sequence is actually interpreted by PostgreSQL).
@cla-bot check |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So it's intended to use the result in
'string'
literals, not inE'string'
literals as Icinga did.
Please verify this via an edge case (E''
vs. ''
).
Well, that's the very reason for #8951. Take the string |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
IdoPgsqlConnection::Escape()
internally usesPQescapeStringConn()
and its documentation states the following:So it's intended to use the result in
'string'
literals, not inE'string'
literals as Icinga did. This results in problems as the behavior ofPQescapeStringConn()
depends on how the current connection will interpret regular single quoted literals, namely on the value of thestandard_conforming_strings
variable.The
E'string'
literals were initially introduced in ac6f3f8 to fix #1206 where PostgreSQL started warning about escape sequences in string literals not supported by the SQL standard (but by PostgreSQL depending on the value ofstandard_conforming_strings
). In the meantime the oldest PostgreSQL version on any platform supported by Icinga increased to 9.2 (CentOS 7) and starting with 9.1,standard_conforming_strings
is enabled by default, so there will be no warnings about escape sequences (as the warning is only issued if the escape sequence is actually interpreted by PostgreSQL).refs #1206 #2811 #8123
fixes #8951