diff --git a/lib/pgFormatter/Beautify.pm b/lib/pgFormatter/Beautify.pm index 13af56a..ee2f46f 100755 --- a/lib/pgFormatter/Beautify.pm +++ b/lib/pgFormatter/Beautify.pm @@ -6460,7 +6460,7 @@ sub _restore_operator { my ( $self, $str ) = @_; foreach my $op ( @{ $self->{operator} } ) { - $$str =~ s/"$op"/$op/gs; + $$str =~ s/"\Q$op\E"/$op/gs; } if ( exists $self->{COMMUTATOR} ) { $$str =~ s/COMMUTATOR(\d+)/$self->{COMMUTATOR}{$1}/igs; diff --git a/t/02_regress.t b/t/02_regress.t index 3481640..6564ca1 100755 --- a/t/02_regress.t +++ b/t/02_regress.t @@ -1,4 +1,4 @@ -use Test::Simple tests => 90; +use Test::Simple tests => 91; use File::Temp qw/ tempfile /; my $pg_format = $ENV{PG_FORMAT} // './pg_format'; # set to the full path to 'pg_format' to test installed binary in /usr/bin diff --git a/t/pg-test-files/expected/create_operator.sql b/t/pg-test-files/expected/create_operator.sql index ffb8657..7e9a407 100644 --- a/t/pg-test-files/expected/create_operator.sql +++ b/t/pg-test-files/expected/create_operator.sql @@ -134,14 +134,14 @@ CREATE OPERATOR schema_op1. # * # ( ROLLBACK; -- Should fail. SETOF type functions not allowed as argument (testing leftarg) BEGIN TRANSACTION; -CREATE OPERATOR "#*#" ( +CREATE OPERATOR #*# ( LEFTARG = SETOF int8, PROCEDURE = numeric_fac ); ROLLBACK; -- Should fail. SETOF type functions not allowed as argument (testing rightarg) BEGIN TRANSACTION; -CREATE OPERATOR "#*#" ( +CREATE OPERATOR #*# ( RIGHTARG = SETOF int8, PROCEDURE = numeric_fac ); @@ -206,7 +206,7 @@ REVOKE USAGE ON TYPE type_op3 FROM regress_rol_op3; REVOKE USAGE ON TYPE type_op3 FROM PUBLIC; -- Need to do this so that regress_rol_op3 is not allowed USAGE via PUBLIC SET ROLE regress_rol_op3; -CREATE OPERATOR "#*#" ( +CREATE OPERATOR #*# ( LEFTARG = type_op3, RIGHTARG = int8, PROCEDURE = fn_op3 @@ -233,7 +233,7 @@ REVOKE USAGE ON TYPE type_op4 FROM regress_rol_op4; REVOKE USAGE ON TYPE type_op4 FROM PUBLIC; -- Need to do this so that regress_rol_op3 is not allowed USAGE via PUBLIC SET ROLE regress_rol_op4; -CREATE OPERATOR "#*#" ( +CREATE OPERATOR #*# ( LEFTARG = int8, RIGHTARG = type_op4, PROCEDURE = fn_op4 @@ -260,7 +260,7 @@ REVOKE EXECUTE ON FUNCTION fn_op5 (int8, int8) FROM regress_rol_op5; REVOKE EXECUTE ON FUNCTION fn_op5 (int8, int8) FROM PUBLIC; -- Need to do this so that regress_rol_op3 is not allowed EXECUTE via PUBLIC SET ROLE regress_rol_op5; -CREATE OPERATOR "#*#" ( +CREATE OPERATOR #*# ( LEFTARG = int8, RIGHTARG = int8, PROCEDURE = fn_op5 @@ -287,7 +287,7 @@ REVOKE USAGE ON TYPE type_op6 FROM regress_rol_op6; REVOKE USAGE ON TYPE type_op6 FROM PUBLIC; -- Need to do this so that regress_rol_op3 is not allowed USAGE via PUBLIC SET ROLE regress_rol_op6; -CREATE OPERATOR "#*#" ( +CREATE OPERATOR #*# ( LEFTARG = int8, RIGHTARG = int8, PROCEDURE = fn_op6 diff --git a/t/pg-test-files/expected/drop_operator.sql b/t/pg-test-files/expected/drop_operator.sql index b597ac1..6a98840 100644 --- a/t/pg-test-files/expected/drop_operator.sql +++ b/t/pg-test-files/expected/drop_operator.sql @@ -47,13 +47,13 @@ WHERE DROP OPERATOR === (bigint, bigint); -CREATE OPERATOR <||<| ( +CREATE OPERATOR <| ( PROCEDURE = int8lt, LEFTARG = bigint, RIGHTARG = bigint ); -CREATE OPERATOR <||><| ( +CREATE OPERATOR |> ( PROCEDURE = int8gt, LEFTARG = bigint, RIGHTARG = bigint, @@ -61,7 +61,7 @@ CREATE OPERATOR <||><| ( COMMUTATOR = <| ); -DROP OPERATOR <||><| (bigint, bigint); +DROP OPERATOR |> (bigint, bigint); SELECT ctid, @@ -93,5 +93,5 @@ WHERE WHERE pk.oid = fk.oprnegate); -DROP OPERATOR <||<| (bigint, bigint); +DROP OPERATOR <| (bigint, bigint); diff --git a/t/pg-test-files/expected/privileges.sql b/t/pg-test-files/expected/privileges.sql index 7db0c1c..3d21b06 100644 --- a/t/pg-test-files/expected/privileges.sql +++ b/t/pg-test-files/expected/privileges.sql @@ -1504,7 +1504,7 @@ CREATE FUNCTION priv_testfunc6a (b int) $1::priv_testdomain1 $$; -CREATE OPERATOR "!+!" ( +CREATE OPERATOR !+! ( PROCEDURE = int4pl, LEFTARG = priv_testdomain1, RIGHTARG = priv_testdomain1 @@ -1594,7 +1594,7 @@ CREATE FUNCTION priv_testfunc6b (b int) $1::priv_testdomain1 $$; -CREATE OPERATOR !+! ( +CREATE OPERATOR !! ( PROCEDURE = priv_testfunc5b, RIGHTARG = priv_testdomain1 ); @@ -1650,7 +1650,7 @@ DROP AGGREGATE priv_testagg1b (priv_testdomain1); DROP DOMAIN priv_testdomain2b; -DROP OPERATOR !+! ( +DROP OPERATOR !! ( NONE, priv_testdomain1); DROP FUNCTION priv_testfunc5b (a priv_testdomain1); diff --git a/t/pg-test-files/expected/tsrf.sql b/t/pg-test-files/expected/tsrf.sql index a11974f..b040b71 100644 --- a/t/pg-test-files/expected/tsrf.sql +++ b/t/pg-test-files/expected/tsrf.sql @@ -569,13 +569,13 @@ FROM generate_series(0, 3) g (i); -- Operators can return sets too -CREATE OPERATOR |@|||@|||@| ( +CREATE OPERATOR |@| ( PROCEDURE = unnest, RIGHTARG = ANYARRAY ); SELECT - | |@| | ARRAY[1, 2, 3]; + | @ | ARRAY[1, 2, 3]; -- Some fun cases involving duplicate SRF calls EXPLAIN ( diff --git a/t/test-files/ex89.sql b/t/test-files/ex89.sql new file mode 100644 index 0000000..07c63eb --- /dev/null +++ b/t/test-files/ex89.sql @@ -0,0 +1,6 @@ +-- Operator names are regex metacharacters and must be restored verbatim +CREATE OPERATOR ? (LEFTARG = hstore, RIGHTARG = text, PROCEDURE = exist); +CREATE OPERATOR ?| (LEFTARG = hstore, RIGHTARG = text[], PROCEDURE = exists_any); +CREATE OPERATOR <| (PROCEDURE = int8lt, LEFTARG = bigint, RIGHTARG = bigint); +CREATE OPERATOR * (PROCEDURE = int8mul, LEFTARG = bigint, RIGHTARG = bigint); +DROP OPERATOR <| (bigint, bigint); diff --git a/t/test-files/expected/ex89.sql b/t/test-files/expected/ex89.sql new file mode 100644 index 0000000..55c422d --- /dev/null +++ b/t/test-files/expected/ex89.sql @@ -0,0 +1,27 @@ +-- Operator names are regex metacharacters and must be restored verbatim +CREATE OPERATOR ? ( + LEFTARG = hstore, + RIGHTARG = text, + PROCEDURE = exist +); + +CREATE OPERATOR ?| ( + LEFTARG = hstore, + RIGHTARG = text[], + PROCEDURE = exists_any +); + +CREATE OPERATOR <| ( + PROCEDURE = int8lt, + LEFTARG = bigint, + RIGHTARG = bigint +); + +CREATE OPERATOR * ( + PROCEDURE = int8mul, + LEFTARG = bigint, + RIGHTARG = bigint +); + +DROP OPERATOR <| (bigint, bigint); +