@@ -4247,6 +4247,125 @@ SELECT id, a, b FROM tab_141810 ORDER BY id
4247
4247
3 1 2
4248
4248
4 NULL NULL
4249
4249
4250
+ # ==============================================================================
4251
+ # Test case sensitivity of column names in triggers
4252
+ # ==============================================================================
4253
+
4254
+ subtest case_sensitivity
4255
+
4256
+ # Setup: clean up any existing tables and functions
4257
+ statement ok
4258
+ DROP TABLE IF EXISTS t1, t2, t3;
4259
+
4260
+ statement ok
4261
+ DROP TRIGGER IF EXISTS tr1 ON t1;
4262
+ DROP TRIGGER IF EXISTS tr2 ON t1;
4263
+ DROP TRIGGER IF EXISTS tr3 ON t1;
4264
+ -- tr4 failed to create, so no need to drop
4265
+
4266
+ statement ok
4267
+ DROP TRIGGER IF EXISTS tr5 ON t2;
4268
+ DROP TRIGGER IF EXISTS tr6 ON t2;
4269
+ DROP TRIGGER IF EXISTS tr7 ON t2;
4270
+ -- tr8 failed to create, so no need to drop
4271
+
4272
+ statement ok
4273
+ DROP TRIGGER IF EXISTS tr12 ON t3;
4274
+ -- tr9, tr10, tr11 failed to create, so no need to drop
4275
+
4276
+ # Setup: Create tables with different casing
4277
+ statement ok
4278
+ CREATE TABLE t1 (foo_bar INT);
4279
+ CREATE TABLE t2 ("foo_bar" INT);
4280
+ CREATE TABLE t3 ("FOO_BAR" INT);
4281
+
4282
+ # Trigger functions with different quoting/casing styles
4283
+ statement ok
4284
+ CREATE FUNCTION f1() RETURNS TRIGGER LANGUAGE PLpgSQL AS $$
4285
+ BEGIN
4286
+ NEW.foo_bar := 1;
4287
+ RETURN NEW;
4288
+ END;
4289
+ $$;
4290
+
4291
+ statement ok
4292
+ CREATE FUNCTION f2() RETURNS TRIGGER LANGUAGE PLpgSQL AS $$
4293
+ BEGIN
4294
+ NEW.FOO_BAR := 1;
4295
+ RETURN NEW;
4296
+ END;
4297
+ $$;
4298
+
4299
+ statement ok
4300
+ CREATE FUNCTION f3() RETURNS TRIGGER LANGUAGE PLpgSQL AS $$
4301
+ BEGIN
4302
+ NEW."foo_bar" := 1;
4303
+ RETURN NEW;
4304
+ END;
4305
+ $$;
4306
+
4307
+ statement ok
4308
+ CREATE FUNCTION f4() RETURNS TRIGGER LANGUAGE PLpgSQL AS $$
4309
+ BEGIN
4310
+ NEW."FOO_BAR" := 1;
4311
+ RETURN NEW;
4312
+ END;
4313
+ $$;
4314
+
4315
+ # Attach each function to each table and check success/failure
4316
+
4317
+ # Unquoted table
4318
+ statement ok
4319
+ CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW EXECUTE FUNCTION f1();
4320
+
4321
+ statement ok
4322
+ CREATE TRIGGER tr2 BEFORE INSERT ON t1 FOR EACH ROW EXECUTE FUNCTION f2();
4323
+
4324
+ statement ok
4325
+ CREATE TRIGGER tr3 BEFORE INSERT ON t1 FOR EACH ROW EXECUTE FUNCTION f3();
4326
+
4327
+ statement error pgcode 42703 pq: record "new" has no field "FOO_BAR"
4328
+ CREATE TRIGGER tr4 BEFORE INSERT ON t1 FOR EACH ROW EXECUTE FUNCTION f4();
4329
+
4330
+ # Quoted lowercase column
4331
+ statement ok
4332
+ CREATE TRIGGER tr5 BEFORE INSERT ON t2 FOR EACH ROW EXECUTE FUNCTION f1();
4333
+
4334
+ statement ok
4335
+ CREATE TRIGGER tr6 BEFORE INSERT ON t2 FOR EACH ROW EXECUTE FUNCTION f2();
4336
+
4337
+ statement ok
4338
+ CREATE TRIGGER tr7 BEFORE INSERT ON t2 FOR EACH ROW EXECUTE FUNCTION f3();
4339
+
4340
+ statement error pgcode 42703 pq: record "new" has no field "FOO_BAR"
4341
+ CREATE TRIGGER tr8 BEFORE INSERT ON t2 FOR EACH ROW EXECUTE FUNCTION f4();
4342
+
4343
+ # Quoted uppercase column
4344
+ statement error pgcode 42703 pq: record "new" has no field "foo_bar"
4345
+ CREATE TRIGGER tr9 BEFORE INSERT ON t3 FOR EACH ROW EXECUTE FUNCTION f1();
4346
+
4347
+ statement error pgcode 42703 pq: record "new" has no field "foo_bar"
4348
+ CREATE TRIGGER tr10 BEFORE INSERT ON t3 FOR EACH ROW EXECUTE FUNCTION f2();
4349
+
4350
+ statement error pgcode 42703 pq: record "new" has no field "foo_bar"
4351
+ CREATE TRIGGER tr11 BEFORE INSERT ON t3 FOR EACH ROW EXECUTE FUNCTION f3();
4352
+
4353
+ statement ok
4354
+ CREATE TRIGGER tr12 BEFORE INSERT ON t3 FOR EACH ROW EXECUTE FUNCTION f4();
4355
+
4356
+ # Drop all tables
4357
+ statement ok
4358
+ DROP TABLE t1;
4359
+ DROP TABLE t2;
4360
+ DROP TABLE t3;
4361
+
4362
+ # Drop all functions
4363
+ statement ok
4364
+ DROP FUNCTION f1();
4365
+ DROP FUNCTION f2();
4366
+ DROP FUNCTION f3();
4367
+ DROP FUNCTION f4();
4368
+
4250
4369
subtest end
4251
4370
4252
4371
# Until #135311 can be fixed, disallow TG_ARGV references by default. There is
0 commit comments