Skip to content

Commit 39d6e04

Browse files
committed
sql: add session setting for routine dependency improvements
This commit adds a session var `use_improved_routine_dependency_tracking` which enables the improvements in the previous two commits (do not add dependencies on unnecessary columns, and track dependencies in the RETURNING clause). The var is off by default in this commit for backports. Informs #145098 Informs #146414 Release note: None
1 parent e9cebce commit 39d6e04

File tree

13 files changed

+110
-2
lines changed

13 files changed

+110
-2
lines changed

pkg/sql/exec_util.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4190,6 +4190,10 @@ func (m *sessionDataMutator) SetInitialRetryBackoffForReadCommitted(val time.Dur
41904190
m.data.InitialRetryBackoffForReadCommitted = val
41914191
}
41924192

4193+
func (m *sessionDataMutator) SetUseImprovedRoutineDependencyTracking(val bool) {
4194+
m.data.UseImprovedRoutineDependencyTracking = val
4195+
}
4196+
41934197
// Utility functions related to scrubbing sensitive information on SQL Stats.
41944198

41954199
// quantizeCounts ensures that the Count field in the

pkg/sql/logictest/testdata/logic_test/drop_index

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -573,11 +573,17 @@ DROP INDEX tab_145100@tab_145100_i_idx
573573
statement ok
574574
DROP PROCEDURE proc_select_145100
575575

576+
statement ok
577+
SET use_improved_routine_dependency_tracking = true;
578+
576579
statement ok
577580
CREATE PROCEDURE proc_insert_145100(in_id UUID, in_i INT) LANGUAGE SQL AS $$
578581
INSERT INTO tab_145100 (id, i) VALUES (in_id, in_i);
579582
$$;
580583

584+
statement ok
585+
RESET use_improved_routine_dependency_tracking;
586+
581587
statement ok
582588
DROP INDEX tab_145100@tab_145100_i_idx
583589

pkg/sql/logictest/testdata/logic_test/information_schema

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4133,6 +4133,7 @@ unbounded_parallel_scans off
41334133
unconstrained_non_covering_index_scan_enabled off
41344134
unsafe_allow_triggers_modifying_cascades off
41354135
use_cputs_on_non_unique_indexes off
4136+
use_improved_routine_dependency_tracking off
41364137
use_pre_25_2_variadic_builtins off
41374138
variable_inequality_lookup_join_enabled on
41384139
vector_search_beam_size 32

pkg/sql/logictest/testdata/logic_test/pg_catalog

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3128,6 +3128,7 @@ unconstrained_non_covering_index_scan_enabled off N
31283128
unsafe_allow_triggers_modifying_cascades off NULL NULL NULL string
31293129
use_cputs_on_non_unique_indexes off NULL NULL NULL string
31303130
use_declarative_schema_changer on NULL NULL NULL string
3131+
use_improved_routine_dependency_tracking off NULL NULL NULL string
31313132
use_pre_25_2_variadic_builtins off NULL NULL NULL string
31323133
variable_inequality_lookup_join_enabled on NULL NULL NULL string
31333134
vector_search_beam_size 32 NULL NULL NULL string
@@ -3359,6 +3360,7 @@ unconstrained_non_covering_index_scan_enabled off N
33593360
unsafe_allow_triggers_modifying_cascades off NULL user NULL off off
33603361
use_cputs_on_non_unique_indexes off NULL user NULL off off
33613362
use_declarative_schema_changer on NULL user NULL on on
3363+
use_improved_routine_dependency_tracking off NULL user NULL off off
33623364
use_pre_25_2_variadic_builtins off NULL user NULL off off
33633365
variable_inequality_lookup_join_enabled on NULL user NULL on on
33643366
vector_search_beam_size 32 NULL user NULL 32 32
@@ -3582,6 +3584,7 @@ unconstrained_non_covering_index_scan_enabled NULL NULL NULL
35823584
unsafe_allow_triggers_modifying_cascades NULL NULL NULL NULL NULL
35833585
use_cputs_on_non_unique_indexes NULL NULL NULL NULL NULL
35843586
use_declarative_schema_changer NULL NULL NULL NULL NULL
3587+
use_improved_routine_dependency_tracking NULL NULL NULL NULL NULL
35853588
use_pre_25_2_variadic_builtins NULL NULL NULL NULL NULL
35863589
variable_inequality_lookup_join_enabled NULL NULL NULL NULL NULL
35873590
vector_search_beam_size NULL NULL NULL NULL NULL

pkg/sql/logictest/testdata/logic_test/show_source

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,7 @@ unconstrained_non_covering_index_scan_enabled off
242242
unsafe_allow_triggers_modifying_cascades off
243243
use_cputs_on_non_unique_indexes off
244244
use_declarative_schema_changer on
245+
use_improved_routine_dependency_tracking off
245246
use_pre_25_2_variadic_builtins off
246247
variable_inequality_lookup_join_enabled on
247248
vector_search_beam_size 32

pkg/sql/logictest/testdata/logic_test/udf_delete

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,12 +311,18 @@ CREATE TABLE t146414 (
311311
b INT AS (a + 1) VIRTUAL
312312
)
313313

314+
statement ok
315+
SET use_improved_routine_dependency_tracking = true;
316+
314317
statement ok
315318
CREATE FUNCTION f146414() RETURNS INT LANGUAGE SQL AS $$
316319
DELETE FROM t146414 WHERE a = 1 RETURNING b;
317320
SELECT 1;
318321
$$;
319322

323+
statement ok
324+
RESET use_improved_routine_dependency_tracking;
325+
320326
statement error pgcode 2BP01 pq: cannot drop column "b" because function "f146414" depends on it
321327
ALTER TABLE t146414 DROP COLUMN b;
322328

pkg/sql/logictest/testdata/logic_test/udf_insert

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,12 +297,20 @@ CREATE TABLE t_computed (
297297
INDEX i (a ASC) USING HASH
298298
)
299299

300+
# An insert routine created with use_improved_routine_dependency_tracking = true
301+
# should not depend on columns other than the target column "a".
302+
statement ok
303+
SET use_improved_routine_dependency_tracking = true;
304+
300305
statement ok
301306
CREATE FUNCTION f145098() RETURNS INT LANGUAGE SQL AS $$
302307
INSERT INTO t_computed VALUES (100);
303308
SELECT 1;
304309
$$;
305310

311+
statement ok
312+
RESET use_improved_routine_dependency_tracking;
313+
306314
statement ok
307315
SELECT f145098();
308316

@@ -361,6 +369,43 @@ DROP FUNCTION f145098;
361369
statement ok
362370
DROP TABLE t_computed;
363371

372+
statement ok
373+
CREATE TABLE t_computed (
374+
a INT NOT NULL,
375+
b INT AS (a + 1) STORED,
376+
c INT AS (a * 2) VIRTUAL,
377+
INDEX i (a ASC) USING HASH
378+
)
379+
380+
# With use_improved_routine_dependency_tracking = false, the insert routine
381+
# will depend on all columns in the table.
382+
statement ok
383+
SET use_improved_routine_dependency_tracking = false;
384+
385+
statement ok
386+
CREATE FUNCTION f145098() RETURNS INT LANGUAGE SQL AS $$
387+
INSERT INTO t_computed VALUES (100);
388+
SELECT 1;
389+
$$;
390+
391+
statement ok
392+
RESET use_improved_routine_dependency_tracking;
393+
394+
statement error pgcode 2BP01 pq: cannot drop column "crdb_internal_a_shard_16" because function "f145098" depends on it
395+
DROP INDEX i;
396+
397+
statement error pgcode 2BP01 pq: cannot drop column "c" because function "f145098" depends on it
398+
ALTER TABLE t_computed DROP COLUMN c;
399+
400+
statement error pgcode 2BP01 pq: cannot drop column "b" because function "f145098" depends on it
401+
ALTER TABLE t_computed DROP COLUMN b;
402+
403+
statement ok
404+
DROP FUNCTION f145098;
405+
406+
statement ok
407+
DROP TABLE t_computed;
408+
364409
# Case where the INSERT statement has a RETURNING clause that references the
365410
# hash-sharded index column. In this case, a dependency *should* be added.
366411
statement ok
@@ -369,12 +414,18 @@ CREATE TABLE t_hash_sharded (
369414
INDEX i (a ASC) USING HASH
370415
)
371416

417+
statement ok
418+
SET use_improved_routine_dependency_tracking = true;
419+
372420
statement ok
373421
CREATE FUNCTION f145098() RETURNS INT LANGUAGE SQL AS $$
374422
INSERT INTO t_hash_sharded VALUES (100) RETURNING crdb_internal_a_shard_16;
375423
SELECT 1;
376424
$$;
377425

426+
statement ok
427+
RESET use_improved_routine_dependency_tracking;
428+
378429
statement error pgcode 2BP01 pq: cannot drop column "crdb_internal_a_shard_16" because function "f145098" depends on it
379430
DROP INDEX i;
380431

pkg/sql/logictest/testdata/logic_test/udf_update

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,12 +335,18 @@ CREATE TABLE t146414 (
335335
b INT AS (a + 1) VIRTUAL
336336
)
337337

338+
statement ok
339+
SET use_improved_routine_dependency_tracking = true;
340+
338341
statement ok
339342
CREATE FUNCTION f146414() RETURNS INT LANGUAGE SQL AS $$
340343
UPDATE t146414 SET a = a + 1 WHERE a = 1 RETURNING b;
341344
SELECT 1;
342345
$$;
343346

347+
statement ok
348+
RESET use_improved_routine_dependency_tracking;
349+
344350
statement error pgcode 2BP01 pq: cannot drop column "b" because function "f146414" depends on it
345351
ALTER TABLE t146414 DROP COLUMN b;
346352

pkg/sql/logictest/testdata/logic_test/udf_upsert

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,13 +275,21 @@ CREATE TABLE table_drop (
275275
);
276276
INSERT INTO table_drop VALUES (1,2,3), (4,5,6), (7,8,9);
277277

278+
# An insert routine created with use_improved_routine_dependency_tracking = true
279+
# should not depend on columns other than the target column "a".
280+
statement ok
281+
SET use_improved_routine_dependency_tracking = true;
282+
278283
statement ok
279284
DROP FUNCTION f_upsert;
280285
CREATE FUNCTION f_upsert() RETURNS INT LANGUAGE SQL AS $$
281286
UPSERT INTO table_drop (a, b) VALUES (100, 200);
282287
SELECT 1;
283288
$$;
284289

290+
statement ok
291+
RESET use_improved_routine_dependency_tracking;
292+
285293
statement ok
286294
DROP INDEX i;
287295

pkg/sql/opt/optbuilder/mutation_builder.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -849,7 +849,7 @@ func (mb *mutationBuilder) addSynthesizedComputedCols(colIDs opt.OptionalColList
849849
colIDs[i] = newCol
850850

851851
// Track columns that were not explicitly set in the insert statement.
852-
if mb.b.trackSchemaDeps {
852+
if mb.b.trackSchemaDeps && mb.b.evalCtx.SessionData().UseImprovedRoutineDependencyTracking {
853853
mb.implicitInsertCols.Add(newCol)
854854
}
855855

0 commit comments

Comments
 (0)