// Copyright 2024 Dolthub, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package _go import ( "testing" "github.com/dolthub/go-mysql-server/sql" ) func TestOperators(t *testing.T) { RunScriptsWithoutNormalization(t, []ScriptTest{ { Name: "Addition", SetUpScript: []string{ "SET timezone TO 'UTC';", }, Assertions: []ScriptTestAssertion{ { Query: `SELECT 1::float4 + 2::float4;`, Expected: []sql.Row{{float32(3)}}, }, { Query: `SELECT 1::float4 + 2::float8;`, Expected: []sql.Row{{float64(3)}}, }, { Query: `SELECT 1::float4 + 2::int2;`, Expected: []sql.Row{{float64(3)}}, }, { Query: `SELECT 1::float4 + 2::int4;`, Expected: []sql.Row{{float64(3)}}, }, { Query: `SELECT 1::float4 + 2::int8;`, Expected: []sql.Row{{float64(3)}}, }, { Query: `SELECT 1::float4 + 2::numeric;`, Expected: []sql.Row{{float64(3)}}, }, { Query: `SELECT 1::float8 + 2::float4;`, Expected: []sql.Row{{float64(3)}}, }, { Query: `SELECT 1::float8 + 2::float8;`, Expected: []sql.Row{{float64(3)}}, }, { Query: `SELECT 1::float8 + 2::int2;`, Expected: []sql.Row{{float64(3)}}, }, { Query: `SELECT 1::float8 + 2::int4;`, Expected: []sql.Row{{float64(3)}}, }, { Query: `SELECT 1::float8 + 2::int8;`, Expected: []sql.Row{{float64(3)}}, }, { Query: `SELECT 1::float8 + 2::numeric;`, Expected: []sql.Row{{float64(3)}}, }, { Query: `SELECT 1::int2 + 2::float4;`, Expected: []sql.Row{{float64(3)}}, }, { Query: `SELECT 1::int2 + 2::float8;`, Expected: []sql.Row{{float64(3)}}, }, { Query: `SELECT 1::int2 + 2::int2;`, Expected: []sql.Row{{int16(3)}}, }, { Query: `SELECT 1::int2 + 2::int4;`, Expected: []sql.Row{{int32(3)}}, }, { Query: `SELECT 1::int2 + 2::int8;`, Expected: []sql.Row{{int64(3)}}, }, { Query: `SELECT 1::int2 + 2::numeric;`, Expected: []sql.Row{{Numeric("3")}}, }, { Query: `SELECT 1::int4 + 2::float4;`, Expected: []sql.Row{{float64(3)}}, }, { Query: `SELECT 1::int4 + 2::float8;`, Expected: []sql.Row{{float64(3)}}, }, { Query: `SELECT 1::int4 + 2::int2;`, Expected: []sql.Row{{int32(3)}}, }, { Query: `SELECT 1::int4 + 2::int4;`, Expected: []sql.Row{{int32(3)}}, }, { Query: `SELECT 1::int4 + 2::int8;`, Expected: []sql.Row{{int64(3)}}, }, { Query: `SELECT 1::int4 + 2::numeric;`, Expected: []sql.Row{{Numeric("3")}}, }, { Query: `SELECT 1::int8 + 2::float4;`, Expected: []sql.Row{{float64(3)}}, }, { Query: `SELECT 1::int8 + 2::float8;`, Expected: []sql.Row{{float64(3)}}, }, { Query: `SELECT 1::int8 + 2::int2;`, Expected: []sql.Row{{int64(3)}}, }, { Query: `SELECT 1::int8 + 2::int4;`, Expected: []sql.Row{{int64(3)}}, }, { Query: `SELECT 1::int8 + 2::int8;`, Expected: []sql.Row{{int64(3)}}, }, { Query: `SELECT 1::int8 + 2::numeric;`, Expected: []sql.Row{{Numeric("3")}}, }, { Query: `SELECT 1::numeric + 2::float4;`, Expected: []sql.Row{{float64(3)}}, }, { Query: `SELECT 1::numeric + 2::float8;`, Expected: []sql.Row{{float64(3)}}, }, { Query: `SELECT 1::numeric + 2::int2;`, Expected: []sql.Row{{Numeric("3")}}, }, { Query: `SELECT 1::numeric + 2::int4;`, Expected: []sql.Row{{Numeric("3")}}, }, { Query: `SELECT 1::numeric + 2::int8;`, Expected: []sql.Row{{Numeric("3")}}, }, { Query: `SELECT 1::numeric + 2::numeric;`, Expected: []sql.Row{{Numeric("3")}}, }, { Query: `SELECT 1::numeric + 'nan'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT 1::numeric + 'Inf'::numeric;`, Expected: []sql.Row{{Numeric("Infinity")}}, }, { Query: `SELECT '-inf'::numeric + 'Inf'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT 'nan'::numeric + 'Inf'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT '-Inf'::numeric + '2'::numeric;`, Expected: []sql.Row{{Numeric("-Infinity")}}, }, { Query: `SELECT '-Infinity'::numeric + 'NaN'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT 'infinity'::numeric + '-inf'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `select interval '2 days' + interval '1.5 days';`, Expected: []sql.Row{{"3 days 12:00:00"}}, }, { Query: `select interval '2 days' + time '12:23:34';`, Expected: []sql.Row{{"12:23:34"}}, }, { Query: `select interval '2 days' + date '2022-2-5';`, Expected: []sql.Row{{"2022-02-07 00:00:00"}}, }, { Query: `select interval '2 days' + time with time zone '12:23:45-0700';`, Expected: []sql.Row{{"12:23:45-07"}}, }, { Query: `select interval '2 days' + timestamp '2021-04-08 12:23:45';`, Expected: []sql.Row{{"2021-04-10 12:23:45"}}, }, { Query: `select interval '2 days' + timestamp with time zone '2021-04-08 12:23:45-0700';`, Expected: []sql.Row{{"2021-04-10 19:23:45+00"}}, }, }, }, { Name: "Subtraction", SetUpScript: []string{ "SET timezone TO 'UTC';", }, Assertions: []ScriptTestAssertion{ { Query: `SELECT 1::float4 - 2::float4;`, Expected: []sql.Row{{float32(-1)}}, }, { Query: `SELECT 1::float4 - 2::float8;`, Expected: []sql.Row{{float64(-1)}}, }, { Query: `SELECT 1::float4 - 2::int2;`, Expected: []sql.Row{{float64(-1)}}, }, { Query: `SELECT 1::float4 - 2::int4;`, Expected: []sql.Row{{float64(-1)}}, }, { Query: `SELECT 1::float4 - 2::int8;`, Expected: []sql.Row{{float64(-1)}}, }, { Query: `SELECT 1::float4 - 2::numeric;`, Expected: []sql.Row{{float64(-1)}}, }, { Query: `SELECT 1::float8 - 2::float4;`, Expected: []sql.Row{{float64(-1)}}, }, { Query: `SELECT 1::float8 - 2::float8;`, Expected: []sql.Row{{float64(-1)}}, }, { Query: `SELECT 1::float8 - 2::int2;`, Expected: []sql.Row{{float64(-1)}}, }, { Query: `SELECT 1::float8 - 2::int4;`, Expected: []sql.Row{{float64(-1)}}, }, { Query: `SELECT 1::float8 - 2::int8;`, Expected: []sql.Row{{float64(-1)}}, }, { Query: `SELECT 1::float8 - 2::numeric;`, Expected: []sql.Row{{float64(-1)}}, }, { Query: `SELECT 1::int2 - 2::float4;`, Expected: []sql.Row{{float64(-1)}}, }, { Query: `SELECT 1::int2 - 2::float8;`, Expected: []sql.Row{{float64(-1)}}, }, { Query: `SELECT 1::int2 - 2::int2;`, Expected: []sql.Row{{int16(-1)}}, }, { Query: `SELECT 1::int2 - 2::int4;`, Expected: []sql.Row{{int32(-1)}}, }, { Query: `SELECT 1::int2 - 2::int8;`, Expected: []sql.Row{{int64(-1)}}, }, { Query: `SELECT 1::int2 - 2::numeric;`, Expected: []sql.Row{{Numeric("-1")}}, }, { Query: `SELECT 1::int4 - 2::float4;`, Expected: []sql.Row{{float64(-1)}}, }, { Query: `SELECT 1::int4 - 2::float8;`, Expected: []sql.Row{{float64(-1)}}, }, { Query: `SELECT 1::int4 - 2::int2;`, Expected: []sql.Row{{int32(-1)}}, }, { Query: `SELECT 1::int4 - 2::int4;`, Expected: []sql.Row{{int32(-1)}}, }, { Query: `SELECT 1::int4 - 2::int8;`, Expected: []sql.Row{{int64(-1)}}, }, { Query: `SELECT 1::int4 - 2::numeric;`, Expected: []sql.Row{{Numeric("-1")}}, }, { Query: `SELECT 1::int8 - 2::float4;`, Expected: []sql.Row{{float64(-1)}}, }, { Query: `SELECT 1::int8 - 2::float8;`, Expected: []sql.Row{{float64(-1)}}, }, { Query: `SELECT 1::int8 - 2::int2;`, Expected: []sql.Row{{int64(-1)}}, }, { Query: `SELECT 1::int8 - 2::int4;`, Expected: []sql.Row{{int64(-1)}}, }, { Query: `SELECT 1::int8 - 2::int8;`, Expected: []sql.Row{{int64(-1)}}, }, { Query: `SELECT 1::int8 - 2::numeric;`, Expected: []sql.Row{{Numeric("-1")}}, }, { Query: `SELECT 1::numeric - 2::float4;`, Expected: []sql.Row{{float64(-1)}}, }, { Query: `SELECT 1::numeric - 2::float8;`, Expected: []sql.Row{{float64(-1)}}, }, { Query: `SELECT 1::numeric - 2::int2;`, Expected: []sql.Row{{Numeric("-1")}}, }, { Query: `SELECT 1::numeric - 2::int4;`, Expected: []sql.Row{{Numeric("-1")}}, }, { Query: `SELECT 1::numeric - 2::int8;`, Expected: []sql.Row{{Numeric("-1")}}, }, { Query: `SELECT 1::numeric - 2::numeric;`, Expected: []sql.Row{{Numeric("-1")}}, }, { Query: `SELECT 1::numeric - 'nan'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT 1::numeric - 'Inf'::numeric;`, Expected: []sql.Row{{Numeric("-Infinity")}}, }, { Query: `SELECT '-inf'::numeric - 'Inf'::numeric;`, Expected: []sql.Row{{Numeric("-Infinity")}}, }, { Query: `SELECT 'nan'::numeric - 'Inf'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT '-Inf'::numeric - '2'::numeric;`, Expected: []sql.Row{{Numeric("-Infinity")}}, }, { Query: `SELECT '2'::numeric - '-inf'::numeric;`, Expected: []sql.Row{{Numeric("Infinity")}}, }, { Query: `SELECT '-Infinity'::numeric - 'NaN'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT 'infinity'::numeric - '-inf'::numeric;`, Expected: []sql.Row{{Numeric("Infinity")}}, }, { Query: `select interval '2 days' - interval '1.5 days';`, Expected: []sql.Row{{"1 day -12:00:00"}}, }, }, }, { Name: "Multiplication", SetUpScript: []string{ "SET timezone TO 'UTC';", }, Assertions: []ScriptTestAssertion{ { Query: `SELECT 1::float4 * 2::float4;`, Expected: []sql.Row{{float32(2)}}, }, { Query: `SELECT 1::float4 * 2::float8;`, Expected: []sql.Row{{float64(2)}}, }, { Query: `SELECT 1::float4 * 2::int2;`, Expected: []sql.Row{{float64(2)}}, }, { Query: `SELECT 1::float4 * 2::int4;`, Expected: []sql.Row{{float64(2)}}, }, { Query: `SELECT 1::float4 * 2::int8;`, Expected: []sql.Row{{float64(2)}}, }, { Query: `SELECT 1::float4 * 2::numeric;`, Expected: []sql.Row{{float64(2)}}, }, { Query: `SELECT 1::float8 * 2::float4;`, Expected: []sql.Row{{float64(2)}}, }, { Query: `SELECT 1::float8 * 2::float8;`, Expected: []sql.Row{{float64(2)}}, }, { Query: `SELECT 1::float8 * 2::int2;`, Expected: []sql.Row{{float64(2)}}, }, { Query: `SELECT 1::float8 * 2::int4;`, Expected: []sql.Row{{float64(2)}}, }, { Query: `SELECT 1::float8 * 2::int8;`, Expected: []sql.Row{{float64(2)}}, }, { Query: `SELECT 1::float8 * 2::numeric;`, Expected: []sql.Row{{float64(2)}}, }, { Query: `SELECT 1::int2 * 2::float4;`, Expected: []sql.Row{{float64(2)}}, }, { Query: `SELECT 1::int2 * 2::float8;`, Expected: []sql.Row{{float64(2)}}, }, { Query: `SELECT 1::int2 * 2::int2;`, Expected: []sql.Row{{int16(2)}}, }, { Query: `SELECT 1::int2 * 2::int4;`, Expected: []sql.Row{{int32(2)}}, }, { Query: `SELECT 1::int2 * 2::int8;`, Expected: []sql.Row{{int64(2)}}, }, { Query: `SELECT 1::int2 * 2::numeric;`, Expected: []sql.Row{{Numeric("2")}}, }, { Query: `SELECT 1::int4 * 2::float4;`, Expected: []sql.Row{{float64(2)}}, }, { Query: `SELECT 1::int4 * 2::float8;`, Expected: []sql.Row{{float64(2)}}, }, { Query: `SELECT 1::int4 * 2::int2;`, Expected: []sql.Row{{int32(2)}}, }, { Query: `SELECT 1::int4 * 2::int4;`, Expected: []sql.Row{{int32(2)}}, }, { Query: `SELECT 1::int4 * 2::int8;`, Expected: []sql.Row{{int64(2)}}, }, { Query: `SELECT 1::int4 * 2::numeric;`, Expected: []sql.Row{{Numeric("2")}}, }, { Query: `SELECT 1::int8 * 2::float4;`, Expected: []sql.Row{{float64(2)}}, }, { Query: `SELECT 1::int8 * 2::float8;`, Expected: []sql.Row{{float64(2)}}, }, { Query: `SELECT 1::int8 * 2::int2;`, Expected: []sql.Row{{int64(2)}}, }, { Query: `SELECT 1::int8 * 2::int4;`, Expected: []sql.Row{{int64(2)}}, }, { Query: `SELECT 1::int8 * 2::int8;`, Expected: []sql.Row{{int64(2)}}, }, { Query: `SELECT 1::int8 * 2::numeric;`, Expected: []sql.Row{{Numeric("2")}}, }, { Query: `SELECT 1::numeric * 2::float4;`, Expected: []sql.Row{{float64(2)}}, }, { Query: `SELECT 1::numeric * 2::float8;`, Expected: []sql.Row{{float64(2)}}, }, { Query: `SELECT 1::numeric * 2::int2;`, Expected: []sql.Row{{Numeric("2")}}, }, { Query: `SELECT 1::numeric * 2::int4;`, Expected: []sql.Row{{Numeric("2")}}, }, { Query: `SELECT 1::numeric * 2::int8;`, Expected: []sql.Row{{Numeric("2")}}, }, { Query: `SELECT 1::numeric * 2::numeric;`, Expected: []sql.Row{{Numeric("2")}}, }, { Query: `SELECT 1::numeric * 'nan'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT 0::numeric * 'nan'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT 0::numeric * 'inf'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT 1::numeric * 'Inf'::numeric;`, Expected: []sql.Row{{Numeric("Infinity")}}, }, { Query: `SELECT '-inf'::numeric * 'Inf'::numeric;`, Expected: []sql.Row{{Numeric("-Infinity")}}, }, { Query: `SELECT 'nan'::numeric * 'Inf'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT '-Inf'::numeric * '2'::numeric;`, Expected: []sql.Row{{Numeric("-Infinity")}}, }, { Query: `SELECT '2'::numeric * '-inf'::numeric;`, Expected: []sql.Row{{Numeric("-Infinity")}}, }, { Query: `SELECT '-Infinity'::numeric * 'NaN'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT 'infinity'::numeric * '-inf'::numeric;`, Expected: []sql.Row{{Numeric("-Infinity")}}, }, { Query: `select interval '20 days' * 2.3`, Expected: []sql.Row{{"46 days"}}, }, }, }, { Name: "Division", SetUpScript: []string{ "SET timezone TO 'UTC';", }, Assertions: []ScriptTestAssertion{ { Query: `SELECT 8::float4 / 2::float4;`, Expected: []sql.Row{{float32(4)}}, }, { Query: `SELECT 8::float4 / 2::float8;`, Expected: []sql.Row{{float64(4)}}, }, { Query: `SELECT 8::float4 / 2::int2;`, Expected: []sql.Row{{float64(4)}}, }, { Query: `SELECT 8::float4 / 2::int4;`, Expected: []sql.Row{{float64(4)}}, }, { Query: `SELECT 8::float4 / 2::int8;`, Expected: []sql.Row{{float64(4)}}, }, { Query: `SELECT 8::float4 / 2::numeric;`, Expected: []sql.Row{{float64(4)}}, }, { Query: `SELECT 8::float8 / 2::float4;`, Expected: []sql.Row{{float64(4)}}, }, { Query: `SELECT 8::float8 / 2::float8;`, Expected: []sql.Row{{float64(4)}}, }, { Query: `SELECT 8::float8 / 2::int2;`, Expected: []sql.Row{{float64(4)}}, }, { Query: `SELECT 8::float8 / 2::int4;`, Expected: []sql.Row{{float64(4)}}, }, { Query: `SELECT 8::float8 / 2::int8;`, Expected: []sql.Row{{float64(4)}}, }, { Query: `SELECT 8::float8 / 2::numeric;`, Expected: []sql.Row{{float64(4)}}, }, { Query: `SELECT 8::int2 / 2::float4;`, Expected: []sql.Row{{float64(4)}}, }, { Query: `SELECT 8::int2 / 2::float8;`, Expected: []sql.Row{{float64(4)}}, }, { Query: `SELECT 8::int2 / 2::int2;`, Expected: []sql.Row{{int16(4)}}, }, { Query: `SELECT 8::int2 / 2::int4;`, Expected: []sql.Row{{int32(4)}}, }, { Query: `SELECT 8::int2 / 2::int8;`, Expected: []sql.Row{{int64(4)}}, }, { Query: `SELECT 8::int2 / 2::numeric;`, Expected: []sql.Row{{Numeric("4.0000000000000000")}}, }, { Query: `SELECT 8::int4 / 2::float4;`, Expected: []sql.Row{{float64(4)}}, }, { Query: `SELECT 8::int4 / 2::float8;`, Expected: []sql.Row{{float64(4)}}, }, { Query: `SELECT 8::int4 / 2::int2;`, Expected: []sql.Row{{int32(4)}}, }, { Query: `SELECT 8::int4 / 2::int4;`, Expected: []sql.Row{{int32(4)}}, }, { Query: `SELECT 8::int4 / 2::int8;`, Expected: []sql.Row{{int64(4)}}, }, { Query: `SELECT 8::int4 / 2::numeric;`, Expected: []sql.Row{{Numeric("4.0000000000000000")}}, }, { Query: `SELECT 8::int8 / 2::float4;`, Expected: []sql.Row{{float64(4)}}, }, { Query: `SELECT 8::int8 / 2::float8;`, Expected: []sql.Row{{float64(4)}}, }, { Query: `SELECT 8::int8 / 2::int2;`, Expected: []sql.Row{{int64(4)}}, }, { Query: `SELECT 8::int8 / 2::int4;`, Expected: []sql.Row{{int64(4)}}, }, { Query: `SELECT 8::int8 / 2::int8;`, Expected: []sql.Row{{int64(4)}}, }, { Query: `SELECT 8::int8 / 2::numeric;`, Expected: []sql.Row{{Numeric("4.0000000000000000")}}, }, { Query: `SELECT 8::numeric / 2::float4;`, Expected: []sql.Row{{float64(4)}}, }, { Query: `SELECT 8::numeric / 2::float8;`, Expected: []sql.Row{{float64(4)}}, }, { Query: `SELECT 8::numeric / 2::int2;`, Expected: []sql.Row{{Numeric("4.0000000000000000")}}, }, { Query: `SELECT 444000804::numeric / 2::int2;`, Expected: []sql.Row{{Numeric("222000402.00000000")}}, }, { Query: `SELECT 44400080::numeric / 2::int2;`, Expected: []sql.Row{{Numeric("22200040.000000000000")}}, }, { Query: `SELECT 44400::numeric / 2::int2;`, Expected: []sql.Row{{Numeric("22200.000000000000")}}, }, { Query: `SELECT 4440::numeric / 2::int2;`, Expected: []sql.Row{{Numeric("2220.0000000000000000")}}, }, { Query: `SELECT 8::numeric / 2::int4;`, Expected: []sql.Row{{Numeric("4.0000000000000000")}}, }, { Query: `SELECT 8::numeric / 2::int8;`, Expected: []sql.Row{{Numeric("4.0000000000000000")}}, }, { Query: `SELECT 8::numeric / 2::numeric;`, Expected: []sql.Row{{Numeric("4.0000000000000000")}}, }, { Query: `SELECT 1::numeric / 'nan'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT 0::numeric / 'nan'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT 0::numeric / 'inf'::numeric;`, Expected: []sql.Row{{Numeric("0")}}, }, { Query: `SELECT 1::numeric / 'Inf'::numeric;`, Expected: []sql.Row{{Numeric("0")}}, }, { Query: `SELECT '-inf'::numeric / 'Inf'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT 'nan'::numeric / 'Inf'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT '-Inf'::numeric / '2'::numeric;`, Expected: []sql.Row{{Numeric("-Infinity")}}, }, { Query: `SELECT '2'::numeric / '-inf'::numeric;`, Expected: []sql.Row{{Numeric("0")}}, }, { Query: `SELECT '-Infinity'::numeric / 'NaN'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT 'infinity'::numeric / '-inf'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT '-Infinity'::numeric / '0'::numeric;`, ExpectedErr: `division by zero`, }, { Query: `SELECT 'nan'::numeric / '1'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT 'nan'::numeric / '0'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT 'infinity'::numeric / '2'::numeric;`, Expected: []sql.Row{{Numeric("Infinity")}}, }, { Query: `SELECT '-infinity'::numeric / '2'::numeric;`, Expected: []sql.Row{{Numeric("-Infinity")}}, }, { Query: `select interval '20 days' / 2.3`, Expected: []sql.Row{{"8 days 16:41:44.347826"}}, }, }, }, { Name: "Mod", SetUpScript: []string{ "SET timezone TO 'UTC';", }, Assertions: []ScriptTestAssertion{ { Query: `SELECT 11::int2 % 3::int2;`, Expected: []sql.Row{{int16(2)}}, }, { Query: `SELECT 11::int2 % 3::int4;`, Expected: []sql.Row{{int32(2)}}, }, { Query: `SELECT 11::int2 % 3::int8;`, Expected: []sql.Row{{int64(2)}}, }, { Query: `SELECT 11::int2 % 3::numeric;`, Expected: []sql.Row{{Numeric("2")}}, }, { Query: `SELECT 11::int4 % 3::int2;`, Expected: []sql.Row{{int32(2)}}, }, { Query: `SELECT 11::int4 % 3::int4;`, Expected: []sql.Row{{int32(2)}}, }, { Query: `SELECT 11::int4 % 3::int8;`, Expected: []sql.Row{{int64(2)}}, }, { Query: `SELECT 11::int4 % 3::numeric;`, Expected: []sql.Row{{Numeric("2")}}, }, { Query: `SELECT 11::int8 % 3::int2;`, Expected: []sql.Row{{int64(2)}}, }, { Query: `SELECT 11::int8 % 3::int4;`, Expected: []sql.Row{{int64(2)}}, }, { Query: `SELECT 11::int8 % 3::int8;`, Expected: []sql.Row{{int64(2)}}, }, { Query: `SELECT 11::int8 % 3::numeric;`, Expected: []sql.Row{{Numeric("2")}}, }, { Query: `SELECT 11::numeric % 3::int2;`, Expected: []sql.Row{{Numeric("2")}}, }, { Query: `SELECT 11::numeric % 3::int4;`, Expected: []sql.Row{{Numeric("2")}}, }, { Query: `SELECT 11::numeric % 3::int8;`, Expected: []sql.Row{{Numeric("2")}}, }, { Query: `SELECT 11::numeric % 3::numeric;`, Expected: []sql.Row{{Numeric("2")}}, }, { Query: `SELECT 1::numeric % 'nan'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT 0::numeric % 'nan'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT 0::numeric % 'inf'::numeric;`, Expected: []sql.Row{{Numeric("0")}}, }, { Query: `SELECT 1::numeric % 'Inf'::numeric;`, Expected: []sql.Row{{Numeric("0")}}, }, { Query: `SELECT '-inf'::numeric % 'Inf'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT 'nan'::numeric % 'Inf'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT '-Inf'::numeric % '2'::numeric;`, Expected: []sql.Row{{Numeric("-Infinity")}}, }, { Query: `SELECT '2'::numeric % '-inf'::numeric;`, Expected: []sql.Row{{Numeric("0")}}, }, { Query: `SELECT '-Infinity'::numeric % 'NaN'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT 'infinity'::numeric % '-inf'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT '-Infinity'::numeric % '0'::numeric;`, ExpectedErr: `division by zero`, }, { Query: `SELECT 'nan'::numeric % '1'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT 'nan'::numeric % '0'::numeric;`, Expected: []sql.Row{{Numeric("NaN")}}, }, { Query: `SELECT 'infinity'::numeric % '2'::numeric;`, Expected: []sql.Row{{Numeric("Infinity")}}, }, { Query: `SELECT '-infinity'::numeric % '2'::numeric;`, Expected: []sql.Row{{Numeric("-Infinity")}}, }, }, }, { Name: "Shift Left", SetUpScript: []string{ "SET timezone TO 'UTC';", }, Assertions: []ScriptTestAssertion{ { Query: `SELECT 5::int2 << 2::int2;`, Expected: []sql.Row{{int16(20)}}, }, { Query: `SELECT 5::int2 << 2::int4;`, Expected: []sql.Row{{int16(20)}}, }, { Query: `SELECT 5::int2 << 2::int8;`, ExpectedErr: "does not exist", }, { Query: `SELECT 5::int4 << 2::int2;`, Expected: []sql.Row{{int32(20)}}, }, { Query: `SELECT 5::int4 << 2::int4;`, Expected: []sql.Row{{int32(20)}}, }, { Query: `SELECT 5::int4 << 2::int8;`, ExpectedErr: "does not exist", }, { Query: `SELECT 5::int8 << 2::int2;`, Expected: []sql.Row{{int64(20)}}, }, { Query: `SELECT 5::int8 << 2::int4;`, Expected: []sql.Row{{int64(20)}}, }, { Query: `SELECT 5::int8 << 2::int8;`, ExpectedErr: "does not exist", }, }, }, { Name: "Shift Right", SetUpScript: []string{ "SET timezone TO 'UTC';", }, Assertions: []ScriptTestAssertion{ { Query: `SELECT 17::int2 >> 2::int2;`, Expected: []sql.Row{{int16(4)}}, }, { Query: `SELECT 17::int2 >> 2::int4;`, Expected: []sql.Row{{int16(4)}}, }, { Query: `SELECT 17::int2 >> 2::int8;`, ExpectedErr: "does not exist", }, { Query: `SELECT 17::int4 >> 2::int2;`, Expected: []sql.Row{{int32(4)}}, }, { Query: `SELECT 17::int4 >> 2::int4;`, Expected: []sql.Row{{int32(4)}}, }, { Query: `SELECT 17::int4 >> 2::int8;`, ExpectedErr: "does not exist", }, { Query: `SELECT 17::int8 >> 2::int2;`, Expected: []sql.Row{{int64(4)}}, }, { Query: `SELECT 17::int8 >> 2::int4;`, Expected: []sql.Row{{int64(4)}}, }, { Query: `SELECT 17::int8 >> 2::int8;`, ExpectedErr: "does not exist", }, }, }, { Name: "Less Than", SetUpScript: []string{ "SET timezone TO 'UTC';", }, Assertions: []ScriptTestAssertion{ { Query: `SELECT false < true;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT true < false;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'abc'::bpchar < 'def'::bpchar;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'def'::bpchar < 'abc'::bpchar;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'abc'::"char" < 'def'::"char";`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'abc'::"char" < 'aef';`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT E'\\x01'::bytea < E'\\x02'::bytea;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT E'\\x02'::bytea < E'\\x01'::bytea;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2019-01-03'::date < '2020-07-15'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2020-02-05'::date < '2019-08-17'::date;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2021-03-07'::date < '2022-09-19 04:19:19'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2022-04-09'::date < '2021-10-21 08:27:40'::timestamp;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2023-05-11'::date < '2024-11-23 12:35:54+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2024-06-13'::date < '2023-12-25 16:43:55+00'::timestamptz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 1.23::float4 < 4.56::float4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 4.56::float4 < 1.23::float4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 7.89::float4 < 9.01::float8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 9.01::float4 < 7.89::float8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 2.34::float8 < 5.67::float4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 5.67::float8 < 2.34::float4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 8.99::float8 < 9.01::float8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 9.01::float8 < 8.99::float8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 10::int2 < 29::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 29::int2 < 10::int2;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 11::int2 < 28::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 28::int2 < 11::int4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 12::int2 < 27::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 27::int2 < 12::int8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 13::int4 < 26::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 26::int4 < 13::int2;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 14::int4 < 25::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 25::int4 < 14::int4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 15::int4 < 24::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 24::int4 < 15::int8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 16::int8 < 23::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 23::int8 < 16::int2;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 17::int8 < 22::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 22::int8 < 17::int4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 18::int8 < 21::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 21::int8 < 18::int8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '{"a":1}'::jsonb < '{"b":2}'::jsonb;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '{"b":2}'::jsonb < '{"a":1}'::jsonb;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'and'::name < 'then'::name;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'then'::name < 'and'::name;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'cold'::name < 'dance'::text;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'dance'::name < 'cold'::text;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 10.20::numeric < 20.10::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 20.10::numeric < 10.20::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '-inf'::numeric < 'inf'::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'nan'::numeric < 'inf'::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'nan'::numeric < '-inf'::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'nan'::numeric < 'NaN'::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '-inf'::numeric < 'nan'::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'inf'::numeric < 'nan'::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 101::oid < 202::oid;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 202::oid < 101::oid;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'dog'::text < 'good'::name;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'good'::text < 'dog'::name;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'hello'::text < 'world'::text;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'world'::text < 'hello'::text;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '12:12:12'::time < '14:15:16'::time;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '14:15:16'::time < '12:12:12'::time;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2019-01-03 10:21:00'::timestamp < '2020-02-05'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2020-02-05 10:21:00'::timestamp < '2019-01-03'::date;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2020-02-05 11:32:00'::timestamp < '2021-03-07 12:43:00'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2021-03-07 12:43:00'::timestamp < '2020-02-05 11:32:00'::timestamp;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2021-03-07 12:43:00'::timestamp < '2022-04-09 13:54:00+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2022-04-09 13:54:00'::timestamp < '2021-03-07 12:43:00+00'::timestamptz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2022-04-09 13:54:00+00'::timestamptz < '2023-05-11'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2023-05-11 13:54:00+00'::timestamptz < '2022-04-09'::date;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2023-05-11 14:15:00+00'::timestamptz < '2024-06-13 13:54:00'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2024-06-13 13:54:00+00'::timestamptz < '2023-05-11 14:15:00'::timestamp;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2024-06-13 15:36:00+00'::timestamptz < '2025-07-15 14:15:00+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2025-07-15 14:15:00+00'::timestamptz < '2024-06-13 15:36:00+00'::timestamptz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '12:16:20+00'::timetz < '13:17:21+00'::timetz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '13:17:21+00'::timetz < '12:16:20+00'::timetz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '64b67ba1-e368-4cfd-ae6f-0c3e77716fb5'::uuid < '64b67ba1-e368-4cfd-ae6f-0c3e77716fb6'::uuid;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '64b67ba1-e368-4cfd-ae6f-0c3e77716fb6'::uuid < '64b67ba1-e368-4cfd-ae6f-0c3e77716fb5'::uuid;`, Expected: []sql.Row{{"f"}}, }, { Query: `select '27:00:24'::interval < '1 day 03:00:24.5'::interval;`, Expected: []sql.Row{{"t"}}, }, { Query: `select '27:01:24'::interval < '1 day 03:00:24.5'::interval;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '1234 5678'::oidvector < '1234 5678 9012'::oidvector;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '1234 5678 9012'::oidvector < '1234 5678'::oidvector;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '1234 5678'::oidvector < '1234 5678'::oidvector;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '1234 5677'::oidvector < '1234 5678'::oidvector;`, Expected: []sql.Row{{"t"}}, }, }, }, { Name: "Greater Than", SetUpScript: []string{ "SET timezone TO 'UTC';", }, Assertions: []ScriptTestAssertion{ { Query: `SELECT false > true;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT true > false;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'abc'::bpchar > 'def'::bpchar;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'def'::bpchar > 'abc'::bpchar;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'abc'::"char" > 'def'::"char";`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'def'::"char" > 'abc'::"char";`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'aef' > 'abc'::"char";`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT E'\\x01'::bytea > E'\\x02'::bytea;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT E'\\x02'::bytea > E'\\x01'::bytea;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2019-01-03'::date > '2020-07-15'::date;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2020-02-05'::date > '2019-08-17'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2021-03-07'::date > '2022-09-19 04:19:19'::timestamp;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2022-04-09'::date > '2021-10-21 08:27:40'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2023-05-11'::date > '2024-11-23 12:35:54+00'::timestamptz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2024-06-13'::date > '2023-12-25 16:43:55+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 1.23::float4 > 4.56::float4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 4.56::float4 > 1.23::float4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 7.89::float4 > 9.01::float8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 9.01::float4 > 7.89::float8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 2.34::float8 > 5.67::float4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 5.67::float8 > 2.34::float4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 8.99::float8 > 9.01::float8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 9.01::float8 > 8.99::float8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 10::int2 > 29::int2;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 29::int2 > 10::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 11::int2 > 28::int4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 28::int2 > 11::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 12::int2 > 27::int8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 27::int2 > 12::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 13::int4 > 26::int2;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 26::int4 > 13::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 14::int4 > 25::int4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 25::int4 > 14::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 15::int4 > 24::int8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 24::int4 > 15::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 16::int8 > 23::int2;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 23::int8 > 16::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 17::int8 > 22::int4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 22::int8 > 17::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 18::int8 > 21::int8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 21::int8 > 18::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '{"a":1}'::jsonb > '{"b":2}'::jsonb;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '{"b":2}'::jsonb > '{"a":1}'::jsonb;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'and'::name > 'then'::name;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'then'::name > 'and'::name;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'cold'::name > 'dance'::text;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'dance'::name > 'cold'::text;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 10.20::numeric > 20.10::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 20.10::numeric > 10.20::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '-inf'::numeric > 'inf'::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'nan'::numeric > 'inf'::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'nan'::numeric > '-inf'::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'nan'::numeric > 'NaN'::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '-inf'::numeric > 'nan'::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'inf'::numeric > 'nan'::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'inf'::numeric > 'inf'::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 101::oid > 202::oid;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 202::oid > 101::oid;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'dog'::text > 'good'::name;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'good'::text > 'dog'::name;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'hello'::text > 'world'::text;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'world'::text > 'hello'::text;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '12:12:12'::time > '14:15:16'::time;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '14:15:16'::time > '12:12:12'::time;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2019-01-03 10:21:00'::timestamp > '2020-02-05'::date;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2020-02-05 10:21:00'::timestamp > '2019-01-03'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2020-02-05 11:32:00'::timestamp > '2021-03-07 12:43:00'::timestamp;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2021-03-07 12:43:00'::timestamp > '2020-02-05 11:32:00'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2021-03-07 12:43:00'::timestamp > '2022-04-09 13:54:00+00'::timestamptz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2022-04-09 13:54:00'::timestamp > '2021-03-07 12:43:00+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2022-04-09 13:54:00+00'::timestamptz > '2023-05-11'::date;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2023-05-11 13:54:00+00'::timestamptz > '2022-04-09'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2023-05-11 14:15:00+00'::timestamptz > '2024-06-13 13:54:00'::timestamp;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2024-06-13 13:54:00+00'::timestamptz > '2023-05-11 14:15:00'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2024-06-13 15:36:00+00'::timestamptz > '2025-07-15 14:15:00+00'::timestamptz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2025-07-15 14:15:00+00'::timestamptz > '2024-06-13 15:36:00+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '12:16:20+00'::timetz > '13:17:21+00'::timetz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '13:17:21+00'::timetz > '12:16:20+00'::timetz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '64b67ba1-e368-4cfd-ae6f-0c3e77716fb5'::uuid > '64b67ba1-e368-4cfd-ae6f-0c3e77716fb6'::uuid;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '64b67ba1-e368-4cfd-ae6f-0c3e77716fb6'::uuid > '64b67ba1-e368-4cfd-ae6f-0c3e77716fb5'::uuid;`, Expected: []sql.Row{{"t"}}, }, { Query: `select '28:22:24'::interval > '1 day 03:00:00'::interval;`, Expected: []sql.Row{{"t"}}, }, { Query: `select '23:22:24'::interval > '1 day 03:00:00'::interval;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '1234 5678'::oidvector > '1234 5678 9012'::oidvector;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '1234 5678 9012'::oidvector > '1234 5678'::oidvector;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '1234 5678'::oidvector > '1234 5678'::oidvector;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '1234 5679'::oidvector > '1234 5678'::oidvector;`, Expected: []sql.Row{{"t"}}, }, }, }, { Name: "Less Or Equal", SetUpScript: []string{ "SET timezone TO 'UTC';", }, Assertions: []ScriptTestAssertion{ { Query: `SELECT false <= true;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT true <= true;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT true <= false;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'abc'::bpchar <= 'def'::bpchar;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'abc'::bpchar <= 'abc'::bpchar;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'def'::bpchar <= 'abc'::bpchar;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'abc'::"char" <= 'def'::"char";`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'def'::"char" <= 'abc'::"char";`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'abc' <= 'aef'::"char";`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT E'\\x01'::bytea <= E'\\x02'::bytea;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT E'\\x01'::bytea <= E'\\x01'::bytea;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT E'\\x02'::bytea <= E'\\x01'::bytea;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2019-01-03'::date <= '2020-07-15'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2019-01-03'::date <= '2019-01-03'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2020-02-05'::date <= '2019-08-17'::date;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2021-03-07'::date <= '2022-09-19 04:19:19'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2021-03-07'::date <= '2021-03-07 00:00:00'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2022-04-09'::date <= '2021-10-21 08:27:40'::timestamp;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2023-05-11'::date <= '2024-11-23 12:35:54+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2023-05-11'::date <= '2023-05-11 00:00:00+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2024-06-13'::date <= '2023-12-25 16:43:55+00'::timestamptz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 1.23::float4 <= 4.56::float4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 1.23::float4 <= 1.23::float4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 4.56::float4 <= 1.23::float4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 7.89::float4 <= 9.01::float8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 7.75::float4 <= 7.75::float8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 9.01::float4 <= 7.89::float8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 2.34::float8 <= 5.67::float4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 2.25::float8 <= 2.25::float4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 5.67::float8 <= 2.34::float4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 8.99::float8 <= 9.01::float8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 8.75::float8 <= 8.75::float8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 9.01::float8 <= 8.99::float8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 10::int2 <= 29::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 10::int2 <= 10::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 29::int2 <= 10::int2;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 11::int2 <= 28::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 11::int2 <= 11::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 28::int2 <= 11::int4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 12::int2 <= 27::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 12::int2 <= 12::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 27::int2 <= 12::int8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 13::int4 <= 26::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 13::int4 <= 13::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 26::int4 <= 13::int2;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 14::int4 <= 25::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 14::int4 <= 14::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 25::int4 <= 14::int4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 15::int4 <= 24::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 15::int4 <= 15::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 24::int4 <= 15::int8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 16::int8 <= 23::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 16::int8 <= 16::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 23::int8 <= 16::int2;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 17::int8 <= 22::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 17::int8 <= 17::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 22::int8 <= 17::int4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 18::int8 <= 21::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 18::int8 <= 18::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 21::int8 <= 18::int8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '{"a":1}'::jsonb <= '{"b":2}'::jsonb;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '{"a":1}'::jsonb <= '{"a":1}'::jsonb;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '{"b":2}'::jsonb <= '{"a":1}'::jsonb;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'and'::name <= 'then'::name;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'and'::name <= 'and'::name;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'then'::name <= 'and'::name;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'cold'::name <= 'dance'::text;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'cold'::name <= 'cold'::text;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'dance'::name <= 'cold'::text;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 10.20::numeric <= 20.10::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 10.20::numeric <= 10.20::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 20.10::numeric <= 10.20::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '-inf'::numeric <= 'inf'::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'nan'::numeric <= 'inf'::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'nan'::numeric <= '-inf'::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'nan'::numeric <= 'NaN'::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '-inf'::numeric <= 'nan'::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'inf'::numeric <= 'nan'::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'inf'::numeric <= 'inf'::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 101::oid <= 202::oid;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 101::oid <= 101::oid;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 202::oid <= 101::oid;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'dog'::text <= 'good'::name;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'dog'::text <= 'dog'::name;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'good'::text <= 'dog'::name;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'hello'::text <= 'world'::text;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'hello'::text <= 'hello'::text;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'world'::text <= 'hello'::text;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '12:12:12'::time <= '14:15:16'::time;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '12:12:12'::time <= '12:12:12'::time;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '14:15:16'::time <= '12:12:12'::time;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2019-01-03 10:21:00'::timestamp <= '2020-02-05'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2019-01-03 00:00:00'::timestamp <= '2019-01-03'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2020-02-05 10:21:00'::timestamp <= '2019-01-03'::date;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2020-02-05 11:32:00'::timestamp <= '2021-03-07 12:43:00'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2020-02-05 11:32:00'::timestamp <= '2020-02-05 11:32:00'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2021-03-07 12:43:00'::timestamp <= '2020-02-05 11:32:00'::timestamp;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2021-03-07 12:43:00'::timestamp <= '2022-04-09 13:54:00+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2021-03-07 12:43:00'::timestamp <= '2021-03-07 12:43:00+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2022-04-09 13:54:00'::timestamp <= '2021-03-07 12:43:00+00'::timestamptz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2022-04-09 13:54:00+00'::timestamptz <= '2023-05-11'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2022-04-09 00:00:00+00'::timestamptz <= '2022-04-09'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2023-05-11 13:54:00+00'::timestamptz <= '2022-04-09'::date;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2023-05-11 14:15:00+00'::timestamptz <= '2024-06-13 13:54:00'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2023-05-11 14:15:00+00'::timestamptz <= '2023-05-11 14:15:00'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2024-06-13 13:54:00+00'::timestamptz <= '2023-05-11 14:15:00'::timestamp;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2024-06-13 15:36:00+00'::timestamptz <= '2025-07-15 14:15:00+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2024-06-13 15:36:00+00'::timestamptz <= '2024-06-13 15:36:00+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2025-07-15 14:15:00+00'::timestamptz <= '2024-06-13 15:36:00+00'::timestamptz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '12:16:20+00'::timetz <= '13:17:21+00'::timetz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '12:16:20+00'::timetz <= '12:16:20+00'::timetz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '13:17:21+00'::timetz <= '12:16:20+00'::timetz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '64b67ba1-e368-4cfd-ae6f-0c3e77716fb5'::uuid <= '64b67ba1-e368-4cfd-ae6f-0c3e77716fb6'::uuid;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '64b67ba1-e368-4cfd-ae6f-0c3e77716fb5'::uuid <= '64b67ba1-e368-4cfd-ae6f-0c3e77716fb5'::uuid;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '64b67ba1-e368-4cfd-ae6f-0c3e77716fb6'::uuid <= '64b67ba1-e368-4cfd-ae6f-0c3e77716fb5'::uuid;`, Expected: []sql.Row{{"f"}}, }, { Query: `select '27:00:24.5'::interval <= '1 day 03:00:24.5'::interval;`, Expected: []sql.Row{{"t"}}, }, { Query: `select '25:00:24.5'::interval <= '1 day 03:00:24.5'::interval;`, Expected: []sql.Row{{"t"}}, }, { Query: `select '2 days 27:00:24.5'::interval <= '1 day 03:00:24.5'::interval;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '1234 5678'::oidvector <= '1234 5678 9012'::oidvector;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '1234 5678 9012'::oidvector <= '1234 5678'::oidvector;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '1234 5678'::oidvector <= '1234 5678'::oidvector;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '1234 5677'::oidvector <= '1234 5678'::oidvector;`, Expected: []sql.Row{{"t"}}, }, }, }, { Name: "Greater Or Equal", SetUpScript: []string{ "SET timezone TO 'UTC';", }, Assertions: []ScriptTestAssertion{ { Query: `SELECT false >= true;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT true >= true;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT true >= false;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'abc'::bpchar >= 'def'::bpchar;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'abc'::bpchar >= 'abc'::bpchar;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'def'::bpchar >= 'abc'::bpchar;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'abc'::"char" >= 'def'::"char";`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'def'::"char" >= 'abc'::"char";`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'aef'::"char" >= 'abc';`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT E'\\x01'::bytea >= E'\\x02'::bytea;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT E'\\x01'::bytea >= E'\\x01'::bytea;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT E'\\x02'::bytea >= E'\\x01'::bytea;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2019-01-03'::date >= '2020-07-15'::date;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2019-01-03'::date >= '2019-01-03'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2020-02-05'::date >= '2019-08-17'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2021-03-07'::date >= '2022-09-19 04:19:19'::timestamp;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2021-03-07'::date >= '2021-03-07 00:00:00'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2022-04-09'::date >= '2021-10-21 08:27:40'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2023-05-11'::date >= '2024-11-23 12:35:54+00'::timestamptz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2023-05-11'::date >= '2023-05-11 00:00:00+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2024-06-13'::date >= '2023-12-25 16:43:55+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 1.23::float4 >= 4.56::float4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 1.23::float4 >= 1.23::float4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 4.56::float4 >= 1.23::float4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 7.89::float4 >= 9.01::float8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 7.75::float4 >= 7.75::float8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 9.01::float4 >= 7.89::float8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 2.34::float8 >= 5.67::float4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 2.25::float8 >= 2.25::float4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 5.67::float8 >= 2.34::float4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 8.99::float8 >= 9.01::float8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 8.75::float8 >= 8.75::float8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 9.01::float8 >= 8.99::float8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 10::int2 >= 29::int2;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 10::int2 >= 10::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 29::int2 >= 10::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 11::int2 >= 28::int4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 11::int2 >= 11::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 28::int2 >= 11::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 12::int2 >= 27::int8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 12::int2 >= 12::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 27::int2 >= 12::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 13::int4 >= 26::int2;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 13::int4 >= 13::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 26::int4 >= 13::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 14::int4 >= 25::int4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 14::int4 >= 14::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 25::int4 >= 14::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 15::int4 >= 24::int8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 15::int4 >= 15::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 24::int4 >= 15::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 16::int8 >= 23::int2;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 16::int8 >= 16::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 23::int8 >= 16::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 17::int8 >= 22::int4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 17::int8 >= 17::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 22::int8 >= 17::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 18::int8 >= 21::int8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 18::int8 >= 18::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 21::int8 >= 18::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '{"a":1}'::jsonb >= '{"b":2}'::jsonb;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '{"a":1}'::jsonb >= '{"a":1}'::jsonb;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '{"b":2}'::jsonb >= '{"a":1}'::jsonb;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'and'::name >= 'then'::name;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'and'::name >= 'and'::name;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'then'::name >= 'and'::name;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'cold'::name >= 'dance'::text;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'cold'::name >= 'cold'::text;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'dance'::name >= 'cold'::text;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 10.20::numeric >= 20.10::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 10.20::numeric >= 10.20::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 20.10::numeric >= 10.20::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '-inf'::numeric >= 'inf'::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'nan'::numeric >= 'inf'::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'nan'::numeric >= '-inf'::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'nan'::numeric >= 'NaN'::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '-inf'::numeric >= 'nan'::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'inf'::numeric >= 'nan'::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '-inf'::numeric >= '-infinity'::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 101::oid >= 202::oid;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 101::oid >= 101::oid;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 202::oid >= 101::oid;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'dog'::text >= 'good'::name;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'dog'::text >= 'dog'::name;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'good'::text >= 'dog'::name;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'hello'::text >= 'world'::text;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'hello'::text >= 'hello'::text;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'world'::text >= 'hello'::text;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '12:12:12'::time >= '14:15:16'::time;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '12:12:12'::time >= '12:12:12'::time;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '14:15:16'::time >= '12:12:12'::time;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2019-01-03 10:21:00'::timestamp >= '2020-02-05'::date;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2019-01-03 00:00:00'::timestamp >= '2019-01-03'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2020-02-05 10:21:00'::timestamp >= '2019-01-03'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2020-02-05 11:32:00'::timestamp >= '2021-03-07 12:43:00'::timestamp;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2020-02-05 11:32:00'::timestamp >= '2020-02-05 11:32:00'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2021-03-07 12:43:00'::timestamp >= '2020-02-05 11:32:00'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2021-03-07 12:43:00'::timestamp >= '2022-04-09 13:54:00+00'::timestamptz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2021-03-07 12:43:00'::timestamp >= '2021-03-07 12:43:00+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2022-04-09 13:54:00'::timestamp >= '2021-03-07 12:43:00+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2022-04-09 13:54:00+00'::timestamptz >= '2023-05-11'::date;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2022-04-09 00:00:00+00'::timestamptz >= '2022-04-09'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2023-05-11 13:54:00+00'::timestamptz >= '2022-04-09'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2023-05-11 14:15:00+00'::timestamptz >= '2024-06-13 13:54:00'::timestamp;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2023-05-11 14:15:00+00'::timestamptz >= '2023-05-11 14:15:00'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2024-06-13 13:54:00+00'::timestamptz >= '2023-05-11 14:15:00'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2024-06-13 15:36:00+00'::timestamptz >= '2025-07-15 14:15:00+00'::timestamptz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2024-06-13 15:36:00+00'::timestamptz >= '2024-06-13 15:36:00+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2025-07-15 14:15:00+00'::timestamptz >= '2024-06-13 15:36:00+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '12:16:20+00'::timetz >= '13:17:21+00'::timetz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '12:16:20+00'::timetz >= '12:16:20+00'::timetz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '13:17:21+00'::timetz >= '12:16:20+00'::timetz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '64b67ba1-e368-4cfd-ae6f-0c3e77716fb5'::uuid >= '64b67ba1-e368-4cfd-ae6f-0c3e77716fb6'::uuid;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '64b67ba1-e368-4cfd-ae6f-0c3e77716fb5'::uuid >= '64b67ba1-e368-4cfd-ae6f-0c3e77716fb5'::uuid;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '64b67ba1-e368-4cfd-ae6f-0c3e77716fb6'::uuid >= '64b67ba1-e368-4cfd-ae6f-0c3e77716fb5'::uuid;`, Expected: []sql.Row{{"t"}}, }, { Query: `select '1 month 00:00:24'::interval >= '1 day 03:00:24.5'::interval;`, Expected: []sql.Row{{"t"}}, }, { Query: `select '2 days 00:00:24'::interval >= '48:00:24'::interval;`, Expected: []sql.Row{{"t"}}, }, { Query: `select '27:00:24'::interval >= '1 day 03:00:24.5'::interval;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '1234 5678'::oidvector >= '1234 5678 9012'::oidvector;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '1234 5678 9012'::oidvector >= '1234 5678'::oidvector;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '1234 5678'::oidvector >= '1234 5678'::oidvector;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '1234 5679'::oidvector >= '1234 5678'::oidvector;`, Expected: []sql.Row{{"t"}}, }, }, }, { Name: "Equal", SetUpScript: []string{ "SET timezone TO 'UTC';", }, Assertions: []ScriptTestAssertion{ { Query: `SELECT true = true;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT true = false;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'abc'::bpchar = 'abc'::bpchar;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'def'::bpchar = 'abc'::bpchar;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'abc'::"char" = 'abc'::"char";`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'def'::"char" = 'abc'::"char";`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'abc'::"char" = 'aef';`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT E'\\x01'::bytea = E'\\x01'::bytea;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT E'\\x02'::bytea = E'\\x01'::bytea;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2019-01-03'::date = '2019-01-03'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2020-02-05'::date = '2019-08-17'::date;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2021-03-07'::date = '2021-03-07 00:00:00'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2022-04-09'::date = '2021-10-21 08:27:40'::timestamp;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2023-05-11'::date = '2023-05-11 00:00:00+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2024-06-13'::date = '2023-12-25 16:43:55+00'::timestamptz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 1.23::float4 = 1.23::float4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 4.56::float4 = 1.23::float4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 7.75::float4 = 7.75::float8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 9.01::float4 = 7.89::float8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 2.25::float8 = 2.25::float4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 5.67::float8 = 2.34::float4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 8.75::float8 = 8.75::float8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 9.01::float8 = 8.99::float8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 10::int2 = 10::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 29::int2 = 10::int2;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 11::int2 = 11::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 28::int2 = 11::int4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 12::int2 = 12::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 27::int2 = 12::int8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 13::int4 = 13::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 26::int4 = 13::int2;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 14::int4 = 14::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 25::int4 = 14::int4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 15::int4 = 15::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 24::int4 = 15::int8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 16::int8 = 16::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 23::int8 = 16::int2;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 17::int8 = 17::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 22::int8 = 17::int4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 18::int8 = 18::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 21::int8 = 18::int8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '{"a":1}'::jsonb = '{"a":1}'::jsonb;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '{"b":2}'::jsonb = '{"a":1}'::jsonb;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'and'::name = 'and'::name;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'then'::name = 'and'::name;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'cold'::name = 'cold'::text;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'dance'::name = 'cold'::text;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 10.20::numeric = 10.20::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 20.10::numeric = 10.20::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '-inf'::numeric = 'inf'::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'nan'::numeric = 'inf'::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'nan'::numeric = '-inf'::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'nan'::numeric = 'NaN'::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '-inf'::numeric = 'nan'::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'inf'::numeric = 'nan'::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '-inf'::numeric = '-infinity'::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 101::oid = 101::oid;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 202::oid = 101::oid;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'dog'::text = 'dog'::name;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'good'::text = 'dog'::name;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'hello'::text = 'hello'::text;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'world'::text = 'hello'::text;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '12:12:12'::time = '12:12:12'::time;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '14:15:16'::time = '12:12:12'::time;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2019-01-03 00:00:00'::timestamp = '2019-01-03'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2020-02-05 10:21:00'::timestamp = '2019-01-03'::date;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2020-02-05 11:32:00'::timestamp = '2020-02-05 11:32:00'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2021-03-07 12:43:00'::timestamp = '2020-02-05 11:32:00'::timestamp;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2021-03-07 12:43:00'::timestamp = '2021-03-07 12:43:00+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2022-04-09 13:54:00'::timestamp = '2021-03-07 12:43:00+00'::timestamptz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2022-04-09 00:00:00+00'::timestamptz = '2022-04-09'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2023-05-11 13:54:00+00'::timestamptz = '2022-04-09'::date;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2023-05-11 14:15:00+00'::timestamptz = '2023-05-11 14:15:00'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2024-06-13 13:54:00+00'::timestamptz = '2023-05-11 14:15:00'::timestamp;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2024-06-13 15:36:00+00'::timestamptz = '2024-06-13 15:36:00+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2025-07-15 14:15:00+00'::timestamptz = '2024-06-13 15:36:00+00'::timestamptz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '12:16:20+00'::timetz = '12:16:20+00'::timetz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '13:17:21+00'::timetz = '12:16:20+00'::timetz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '64b67ba1-e368-4cfd-ae6f-0c3e77716fb5'::uuid = '64b67ba1-e368-4cfd-ae6f-0c3e77716fb5'::uuid;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '64b67ba1-e368-4cfd-ae6f-0c3e77716fb6'::uuid = '64b67ba1-e368-4cfd-ae6f-0c3e77716fb5'::uuid;`, Expected: []sql.Row{{"f"}}, }, { Query: `select '27:00:24'::interval = '1 day 03:00:24'::interval;`, Expected: []sql.Row{{"t"}}, }, { Query: `select '1 day'::interval = '1 day 03:00:24'::interval;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '1234 5678'::oidvector = '1234 5678'::oidvector;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '1234 5677'::oidvector = '1234 5678'::oidvector;`, Expected: []sql.Row{{"f"}}, }, }, }, { Name: "Not Equal Standard Syntax (<>)", SetUpScript: []string{ "SET timezone TO 'UTC';", }, Assertions: []ScriptTestAssertion{ { Query: `SELECT true <> true;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT true <> false;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'abc'::bpchar <> 'abc'::bpchar;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'def'::bpchar <> 'abc'::bpchar;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'abc'::"char" <> 'abc'::"char";`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'def'::"char" <> 'abc'::"char";`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT E'\\x01'::bytea <> E'\\x01'::bytea;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT E'\\x02'::bytea <> E'\\x01'::bytea;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2019-01-03'::date <> '2019-01-03'::date;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2020-02-05'::date <> '2019-08-17'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2021-03-07'::date <> '2021-03-07 00:00:00'::timestamp;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2022-04-09'::date <> '2021-10-21 08:27:40'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2023-05-11'::date <> '2023-05-11 00:00:00+00'::timestamptz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2024-06-13'::date <> '2023-12-25 16:43:55+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 1.23::float4 <> 1.23::float4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 4.56::float4 <> 1.23::float4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 7.75::float4 <> 7.75::float8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 9.01::float4 <> 7.89::float8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 2.25::float8 <> 2.25::float4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 5.67::float8 <> 2.34::float4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 8.75::float8 <> 8.75::float8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 9.01::float8 <> 8.99::float8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 10::int2 <> 10::int2;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 29::int2 <> 10::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 11::int2 <> 11::int4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 28::int2 <> 11::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 12::int2 <> 12::int8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 27::int2 <> 12::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 13::int4 <> 13::int2;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 26::int4 <> 13::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 14::int4 <> 14::int4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 25::int4 <> 14::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 15::int4 <> 15::int8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 24::int4 <> 15::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 16::int8 <> 16::int2;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 23::int8 <> 16::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 17::int8 <> 17::int4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 22::int8 <> 17::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 18::int8 <> 18::int8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 21::int8 <> 18::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '{"a":1}'::jsonb <> '{"a":1}'::jsonb;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '{"b":2}'::jsonb <> '{"a":1}'::jsonb;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'and'::name <> 'and'::name;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'then'::name <> 'and'::name;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'cold'::name <> 'cold'::text;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'dance'::name <> 'cold'::text;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 10.20::numeric <> 10.20::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 20.10::numeric <> 10.20::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '-inf'::numeric <> 'inf'::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'nan'::numeric <> 'inf'::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'nan'::numeric <> '-inf'::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'nan'::numeric <> 'NaN'::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '-inf'::numeric <> 'nan'::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'inf'::numeric <> 'nan'::numeric;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'inf'::numeric <> 'infinity'::numeric;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 101::oid <> 101::oid;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 202::oid <> 101::oid;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'dog'::text <> 'dog'::name;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'good'::text <> 'dog'::name;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 'hello'::text <> 'hello'::text;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 'world'::text <> 'hello'::text;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '12:12:12'::time <> '12:12:12'::time;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '14:15:16'::time <> '12:12:12'::time;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2019-01-03 00:00:00'::timestamp <> '2019-01-03'::date;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2020-02-05 10:21:00'::timestamp <> '2019-01-03'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2020-02-05 11:32:00'::timestamp <> '2020-02-05 11:32:00'::timestamp;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2021-03-07 12:43:00'::timestamp <> '2020-02-05 11:32:00'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2021-03-07 12:43:00'::timestamp <> '2021-03-07 12:43:00+00'::timestamptz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2022-04-09 13:54:00'::timestamp <> '2021-03-07 12:43:00+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2022-04-09 00:00:00+00'::timestamptz <> '2022-04-09'::date;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2023-05-11 13:54:00+00'::timestamptz <> '2022-04-09'::date;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2023-05-11 14:15:00+00'::timestamptz <> '2023-05-11 14:15:00'::timestamp;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2024-06-13 13:54:00+00'::timestamptz <> '2023-05-11 14:15:00'::timestamp;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '2024-06-13 15:36:00+00'::timestamptz <> '2024-06-13 15:36:00+00'::timestamptz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '2025-07-15 14:15:00+00'::timestamptz <> '2024-06-13 15:36:00+00'::timestamptz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '12:16:20+00'::timetz <> '12:16:20+00'::timetz;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '13:17:21+00'::timetz <> '12:16:20+00'::timetz;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '64b67ba1-e368-4cfd-ae6f-0c3e77716fb5'::uuid <> '64b67ba1-e368-4cfd-ae6f-0c3e77716fb5'::uuid;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '64b67ba1-e368-4cfd-ae6f-0c3e77716fb6'::uuid <> '64b67ba1-e368-4cfd-ae6f-0c3e77716fb5'::uuid;`, Expected: []sql.Row{{"t"}}, }, { Query: `select '3 hours 24 seconds'::interval <> '1 day 03:00:24'::interval;`, Expected: []sql.Row{{"t"}}, }, { Query: `select '27:00:24'::interval <> '1 day 03:00:24'::interval;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '1234 5678'::oidvector <> '1234 5678'::oidvector;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '1234 5677'::oidvector <> '1234 5678'::oidvector;`, Expected: []sql.Row{{"t"}}, }, }, }, { Name: "Not Equal Alternate Syntax (!=)", // This should be exactly equivalent to <>, so this is only a subset SetUpScript: []string{ "SET timezone TO 'UTC';", }, Assertions: []ScriptTestAssertion{ { Query: `SELECT 10::int2 != 10::int2;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 29::int2 != 10::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 11::int2 != 11::int4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 28::int2 != 11::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 12::int2 != 12::int8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 27::int2 != 12::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 13::int4 != 13::int2;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 26::int4 != 13::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 14::int4 != 14::int4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 25::int4 != 14::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 15::int4 != 15::int8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 24::int4 != 15::int8;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 16::int8 != 16::int2;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 23::int8 != 16::int2;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 17::int8 != 17::int4;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 22::int8 != 17::int4;`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT 18::int8 != 18::int8;`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT 21::int8 != 18::int8;`, Expected: []sql.Row{{"t"}}, }, }, }, { Name: "Bit And", SetUpScript: []string{ "SET timezone TO 'UTC';", }, Assertions: []ScriptTestAssertion{ { Query: `SELECT 13::int2 & 7::int2;`, Expected: []sql.Row{{int16(5)}}, }, { Query: `SELECT 13::int2 & 7::int4;`, Expected: []sql.Row{{int32(5)}}, }, { Query: `SELECT 13::int2 & 7::int8;`, Expected: []sql.Row{{int64(5)}}, }, { Query: `SELECT 13::int4 & 7::int2;`, Expected: []sql.Row{{int32(5)}}, }, { Query: `SELECT 13::int4 & 7::int4;`, Expected: []sql.Row{{int32(5)}}, }, { Query: `SELECT 13::int4 & 7::int8;`, Expected: []sql.Row{{int64(5)}}, }, { Query: `SELECT 13::int8 & 7::int2;`, Expected: []sql.Row{{int64(5)}}, }, { Query: `SELECT 13::int8 & 7::int4;`, Expected: []sql.Row{{int64(5)}}, }, { Query: `SELECT 13::int8 & 7::int8;`, Expected: []sql.Row{{int64(5)}}, }, }, }, { Name: "Bit Or", SetUpScript: []string{ "SET timezone TO 'UTC';", }, Assertions: []ScriptTestAssertion{ { Query: `SELECT 13::int2 | 7::int2;`, Expected: []sql.Row{{int16(15)}}, }, { Query: `SELECT 13::int2 | 7::int4;`, Expected: []sql.Row{{int32(15)}}, }, { Query: `SELECT 13::int2 | 7::int8;`, Expected: []sql.Row{{int64(15)}}, }, { Query: `SELECT 13::int4 | 7::int2;`, Expected: []sql.Row{{int32(15)}}, }, { Query: `SELECT 13::int4 | 7::int4;`, Expected: []sql.Row{{int32(15)}}, }, { Query: `SELECT 13::int4 | 7::int8;`, Expected: []sql.Row{{int64(15)}}, }, { Query: `SELECT 13::int8 | 7::int2;`, Expected: []sql.Row{{int64(15)}}, }, { Query: `SELECT 13::int8 | 7::int4;`, Expected: []sql.Row{{int64(15)}}, }, { Query: `SELECT 13::int8 | 7::int8;`, Expected: []sql.Row{{int64(15)}}, }, }, }, { Name: "Bit Xor", SetUpScript: []string{ "SET timezone TO 'UTC';", }, Assertions: []ScriptTestAssertion{ { Query: `SELECT 13::int2 # 7::int2;`, Expected: []sql.Row{{int16(10)}}, }, { Query: `SELECT 13::int2 # 7::int4;`, Expected: []sql.Row{{int32(10)}}, }, { Query: `SELECT 13::int2 # 7::int8;`, Expected: []sql.Row{{int64(10)}}, }, { Query: `SELECT 13::int4 # 7::int2;`, Expected: []sql.Row{{int32(10)}}, }, { Query: `SELECT 13::int4 # 7::int4;`, Expected: []sql.Row{{int32(10)}}, }, { Query: `SELECT 13::int4 # 7::int8;`, Expected: []sql.Row{{int64(10)}}, }, { Query: `SELECT 13::int8 # 7::int2;`, Expected: []sql.Row{{int64(10)}}, }, { Query: `SELECT 13::int8 # 7::int4;`, Expected: []sql.Row{{int64(10)}}, }, { Query: `SELECT 13::int8 # 7::int8;`, Expected: []sql.Row{{int64(10)}}, }, }, }, { Name: "Negate", SetUpScript: []string{ "SET timezone TO 'UTC';", }, Assertions: []ScriptTestAssertion{ { Query: `SELECT -(7::float4);`, Expected: []sql.Row{{float32(-7)}}, }, { Query: `SELECT -(7::float8);`, Expected: []sql.Row{{float64(-7)}}, }, { Query: `SELECT -(7::int2);`, Expected: []sql.Row{{int16(-7)}}, }, { Query: `SELECT -(7::int4);`, Expected: []sql.Row{{int32(-7)}}, }, { Query: `SELECT -(7::int8);`, Expected: []sql.Row{{int64(-7)}}, }, { Query: `SELECT -(7::numeric);`, Expected: []sql.Row{{Numeric("-7")}}, }, { Query: `select - interval '20 days -11:00:00';`, Expected: []sql.Row{{"-20 days +11:00:00"}}, }, }, }, { Name: "Unary Plus", SetUpScript: []string{ "SET timezone TO 'UTC';", }, Assertions: []ScriptTestAssertion{ { Query: `SELECT +(7::float4);`, Expected: []sql.Row{{float32(7)}}, }, { Query: `SELECT +(7::float8);`, Expected: []sql.Row{{float64(7)}}, }, { Query: `SELECT +(7::int2);`, Expected: []sql.Row{{int16(7)}}, }, { Query: `SELECT +(7::int4);`, Expected: []sql.Row{{int32(7)}}, }, { Query: `SELECT +(7::int8);`, Expected: []sql.Row{{int64(7)}}, }, { Query: `SELECT +(7::numeric);`, Expected: []sql.Row{{Numeric("7")}}, }, }, }, { Name: "Binary JSON", SetUpScript: []string{ "SET timezone TO 'UTC';", }, Assertions: []ScriptTestAssertion{ { Query: `SELECT '[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::json -> 2;`, Expected: []sql.Row{{`{"c":"baz"}`}}, }, { Query: `SELECT '[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::jsonb -> 2;`, Expected: []sql.Row{{`{"c": "baz"}`}}, }, { Query: `SELECT '[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::json -> -3;`, Expected: []sql.Row{{`{"a":"foo"}`}}, }, { Query: `SELECT '[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::jsonb -> -3;`, Expected: []sql.Row{{`{"a": "foo"}`}}, }, { Query: `SELECT '{"a": {"b":"foo"}}'::json -> 'a';`, Expected: []sql.Row{{`{"b":"foo"}`}}, }, { Query: `SELECT '{"a": {"b":"foo"}}'::jsonb -> 'a';`, Expected: []sql.Row{{`{"b": "foo"}`}}, }, { Query: `SELECT '[1,2,3]'::json ->> 2;`, Expected: []sql.Row{{`3`}}, }, { Query: `SELECT '[1,2,3]'::jsonb ->> 2;`, Expected: []sql.Row{{`3`}}, }, { Query: `SELECT '{"a":1,"b":2}'::json ->> 'b';`, Expected: []sql.Row{{`2`}}, }, { Query: `SELECT '{"a":1,"b":2}'::jsonb ->> 'b';`, Expected: []sql.Row{{`2`}}, }, { Query: `SELECT '{"a": {"b": ["foo","bar"]}}'::json #> ARRAY['a','b','1']::text[];`, Expected: []sql.Row{{`"bar"`}}, }, { Query: `SELECT '{"a": {"b": ["foo","bar"]}}'::json #> ARRAY['a','b','1'];`, Expected: []sql.Row{{`"bar"`}}, }, { Query: `SELECT '{"a": {"b": ["foo","bar"]}}'::json #> '{a,b,1}';`, Expected: []sql.Row{{`"bar"`}}, }, { Query: `SELECT '{"a": {"b": ["foo","bar"]}}'::jsonb #> ARRAY['a','b','1']::text[];`, Expected: []sql.Row{{`"bar"`}}, }, { Query: `SELECT '{"a": {"b": ["foo","bar"]}}'::jsonb #> ARRAY['a','b','1'];`, Expected: []sql.Row{{`"bar"`}}, }, { Query: `SELECT '{"a": {"b": ["foo","bar"]}}'::jsonb #> '{a,b,1}';`, Expected: []sql.Row{{`"bar"`}}, }, { Query: `SELECT '{"a": {"b": ["foo","bar"]}}'::json #>> ARRAY['a','b','1']::text[];`, Expected: []sql.Row{{`bar`}}, }, { Query: `SELECT '{"a": {"b": ["foo","bar"]}}'::json #>> ARRAY['a','b','1'];`, Expected: []sql.Row{{`bar`}}, }, { Query: `SELECT '{"a": {"b": ["foo","bar"]}}'::json #>> '{a,b,1}';`, Expected: []sql.Row{{`bar`}}, }, { Query: `SELECT '{"a": {"b": ["foo","bar"]}}'::jsonb #>> ARRAY['a','b','1']::text[];`, Expected: []sql.Row{{`bar`}}, }, { Query: `SELECT '{"a": {"b": ["foo","bar"]}}'::jsonb #>> ARRAY['a','b','1'];`, Expected: []sql.Row{{`bar`}}, }, { Query: `SELECT '{"a": {"b": ["foo","bar"]}}'::jsonb #>> '{a,b,1}';`, Expected: []sql.Row{{`bar`}}, }, { Query: `SELECT '{"a":1, "b":2}'::jsonb @> '{"b":2}'::jsonb;`, Skip: true, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '{"b":2}'::jsonb <@ '{"a":1, "b":2}'::jsonb;`, Skip: true, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '{"a":1, "b":2}'::jsonb ? 'b';`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '["a", "b", "c"]'::jsonb ? 'b';`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '{"a":1, "b":2, "c":3}'::jsonb ?| ARRAY['b','d']::text[];`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '{"a":1, "b":2, "c":3}'::jsonb ?| ARRAY['b','d'];`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '["a", "b", "c"]'::jsonb ?& ARRAY['a','b']::text[];`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '["a", "b", "c"]'::jsonb ?& ARRAY['a','b'];`, Expected: []sql.Row{{"t"}}, }, { Query: `SELECT '["a", "b", "c"]'::jsonb ?& ARRAY['d','b']::text[];`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '["a", "b", "c"]'::jsonb ?& ARRAY['d','b'];`, Expected: []sql.Row{{"f"}}, }, { Query: `SELECT '["a", "b"]'::jsonb || '["a", "d"]'::jsonb;`, Expected: []sql.Row{{`["a", "b", "a", "d"]`}}, }, { Query: `SELECT '{"a": "b"}'::jsonb || '{"c": "d"}'::jsonb;`, Expected: []sql.Row{{`{"a": "b", "c": "d"}`}}, }, { Query: `SELECT '[1, 2]'::jsonb || '3'::jsonb;`, Expected: []sql.Row{{`[1, 2, 3]`}}, }, { Query: `SELECT '{"a": "b"}'::jsonb || '42'::jsonb;`, Expected: []sql.Row{{`[{"a": "b"}, 42]`}}, }, }, }, { Name: "Table Columns", SetUpScript: []string{ `DROP TABLE IF EXISTS table_col_checks;`, `CREATE TABLE table_col_checks (v1 INT4, v2 INT8, v3 FLOAT4);`, `INSERT INTO table_col_checks VALUES (1, 2, 3), (4, 5, 6);`, }, Assertions: []ScriptTestAssertion{ { Query: `SELECT v1 + v2 FROM table_col_checks ORDER BY v1;`, Expected: []sql.Row{{int64(3)}, {int64(9)}}, }, { Query: `SELECT v2 - v1 FROM table_col_checks ORDER BY v1;`, Expected: []sql.Row{{int64(1)}, {int64(1)}}, }, { Query: `SELECT v3 * v3 FROM table_col_checks ORDER BY v1;`, Expected: []sql.Row{{float32(9)}, {float32(36)}}, }, { Query: `SELECT v1 / 2::int4, v2 / 2::int8 FROM table_col_checks ORDER BY v1;`, Expected: []sql.Row{{int32(0), int64(1)}, {int32(2), int64(2)}}, }, }, }, { Name: "Concatenate", SetUpScript: []string{ "SET timezone TO 'UTC';", }, Assertions: []ScriptTestAssertion{ { Query: `SELECT 'Hello, ' || 'World!';`, Expected: []sql.Row{{"Hello, World!"}}, }, { Query: `SELECT '123' || '456';`, Expected: []sql.Row{{"123456"}}, }, { Query: `SELECT 'foo' || 'bar' || 'baz';`, Expected: []sql.Row{{"foobarbaz"}}, }, { Query: `SELECT 123 || '456';`, Expected: []sql.Row{{"123456"}}, }, { Query: `SELECT '123' || 456;`, Expected: []sql.Row{{"123456"}}, }, { Query: `SELECT '123' || 4.56;`, Expected: []sql.Row{{"1234.56"}}, }, { Query: `SELECT 12.3 || '4.56';`, Expected: []sql.Row{{"12.34.56"}}, }, { Query: `SELECT true || 'bar' || false;`, Expected: []sql.Row{{"truebarfalse"}}, }, { Query: `SELECT '2000-01-01 00:00:00'::timestamp || ' happy new year';`, Expected: []sql.Row{{"2000-01-01 00:00:00 happy new year"}}, }, { Query: `SELECT 'hello ' || '2000-01-01 00:00:00'::timestamp ;`, Expected: []sql.Row{{"hello 2000-01-01 00:00:00"}}, }, { Query: `SELECT '2000-01-01'::timestamp || ' happy new year';`, Expected: []sql.Row{{"2000-01-01 00:00:00 happy new year"}}, }, { Query: `SELECT '2000-01-01 00:00:00-08'::timestamptz || ' happy new year';`, Expected: []sql.Row{{"2000-01-01 08:00:00+00 happy new year"}}, }, { Query: `SELECT 'hello ' || '2000-01-01 00:00:00-08'::timestamptz;`, Expected: []sql.Row{{"hello 2000-01-01 08:00:00+00"}}, }, { Query: `SELECT '00:00:00'::time || ' midnight';`, Expected: []sql.Row{{"00:00:00 midnight"}}, }, { Query: `SELECT 'midnight ' || '00:00:00'::time;`, Expected: []sql.Row{{"midnight 00:00:00"}}, }, { Query: `SELECT '00:00:00-07'::timetz || ' midnight';`, Expected: []sql.Row{{"00:00:00-07 midnight"}}, }, { Query: `SELECT 'midnight ' || '00:00:00-07'::timetz ;`, Expected: []sql.Row{{"midnight 00:00:00-07"}}, }, { Query: `SELECT 'foo'::bytea || 'bar';`, Expected: []sql.Row{{[]byte{0x66, 0x6F, 0x6F, 0x62, 0x61, 0x72}}}, }, { Query: `SELECT 'bar' || 'foo'::bytea;`, Expected: []sql.Row{{[]byte{0x62, 0x61, 0x72, 0x66, 0x6F, 0x6F}}}, }, { Query: `SELECT '\xDEADBEEF'::bytea || '\xCAFEBABE'::bytea;`, Expected: []sql.Row{{[]byte{0xDE, 0xAD, 0xBE, 0xEF, 0xCA, 0xFE, 0xBA, 0xBE}}}, }, }, }, { Name: "ARRAY", Assertions: []ScriptTestAssertion{ { Query: "SELECT ARRAY[4] || 20;", Expected: []sql.Row{{"{4,20}"}}, }, { Query: "SELECT 20 || ARRAY[4];", Expected: []sql.Row{{"{20,4}"}}, }, { Query: "SELECT ARRAY[4] || ARRAY[5,6];", Expected: []sql.Row{{"{4,5,6}"}}, }, }, }, { Name: "json extract text operator used in generated column default", SetUpScript: []string{ `CREATE TABLE users_sync ( raw_json jsonb NOT NULL, id text GENERATED ALWAYS AS ((raw_json ->> 'id'::text)) STORED NOT NULL );`, }, Assertions: []ScriptTestAssertion{ { Query: "ALTER TABLE ONLY users_sync ADD CONSTRAINT users_sync_pkey PRIMARY KEY (id);", Expected: []sql.Row{}, }, { Query: `INSERT INTO users_sync (raw_json) VALUES ('{"id":2}')`, Expected: []sql.Row{}, }, { Query: `SELECT * FROM users_sync`, Expected: []sql.Row{{`{"id": 2}`, "2"}}, }, }, }, { Name: "Error cases", SetUpScript: []string{ "CREATE TABLE t (id INT, v VARCHAR);", "INSERT INTO t VALUES (1, 'true');", }, Assertions: []ScriptTestAssertion{ { // https://github.com/dolthub/doltgresql/issues/2160 Query: `SELECT * FROM t WHERE v = true;`, ExpectedErr: "operator does not exist: varchar = bool", }, }, }, }) }