Skip to content

Enable functional index support#2642

Draft
fulghum wants to merge 1 commit intomainfrom
fulghum/function_expr_index
Draft

Enable functional index support#2642
fulghum wants to merge 1 commit intomainfrom
fulghum/function_expr_index

Conversation

@fulghum
Copy link
Copy Markdown
Contributor

@fulghum fulghum commented Apr 25, 2026

Related to #2298

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 25, 2026

Main PR
covering_index_scan_postgres 1741.19/s 1762.50/s +1.2%
index_join_postgres 241.42/s 241.98/s +0.2%
index_join_scan_postgres 251.98/s 252.57/s +0.2%
index_scan_postgres 15.47/s 15.52/s +0.3%
oltp_point_select 3170.83/s 3188.98/s +0.5%
oltp_read_only 2385.33/s 2346.32/s -1.7%
select_random_points 164.08/s 166.10/s +1.2%
select_random_ranges 1372.27/s 1380.14/s +0.5%
table_scan_postgres 15.16/s 15.22/s +0.3%
types_table_scan_postgres 7.03/s 7.10/s +0.9%

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 25, 2026

Main PR
Total 42090 42090
Successful 18014 18049
Failures 24076 24041
Partial Successes1 5373 5375
Main PR
Successful 42.7988% 42.8819%
Failures 57.2012% 57.1181%

${\color{red}Regressions (5)}$

create_aggregate

QUERY:          create function aggf_trans(aggtype[],integer,integer,text) returns aggtype[]
as 'select array_append($1,ROW($2,$3,$4)::aggtype)'
language sql strict immutable;
RECEIVED ERROR: receiveMessage recovered panic: cannot get array type from: aggtype: goroutine 98161 [running]:
runtime/debug.Stack()
	/opt/hostedtoolcache/go/1.26.2/x64/src/runtime/debug/stack.go:26 +0x5e
github.com/dolthub/doltgresql/server.(*ConnectionHandler).receiveMessage.func1()
	/home/runner/work/doltgresql/doltgresql/server/connection_handler.go:351 +0x4c
panic({0x3bf5da0?, 0xa00db3e7900?})
	/opt/hostedtoolcache/go/1.26.2/x64/src/runtime/panic.go:860 +0x13a
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).bindOnly.func1()
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/parse.go:107 +0x71
panic({0x3bf5da0?, 0xa00db3e7900?})
	/opt/hostedtoolcache/go/1.26.2/x64/src/runtime/panic.go:860 +0x13a
github.com/dolthub/doltgresql/server/types.(*DoltgresType).ToArrayType(0xa00db327860)
	/home/runner/work/doltgresql/doltgresql/server/types/type.go:916 +0x279
github.com/dolthub/doltgresql/server/functions/framework.(*CompiledFunction).resolvePolymorphicReturnType(0xa00c2501ab8?, {0xa0103bc69d8, 0x2, 0x2?}, {0xa00db3e78b0, 0x2, 0x2?}, 0x80acf80)
	/home/runner/work/doltgresql/doltgresql/server/functions/framework/compiled_function.go:783 +0x385
github.com/dolthub/doltgresql/server/functions/framework.newCompiledFunctionInternal(0x0, {0x44efffa, 0xc}, {0xa00db4603a0, 0x2, 0x2}, 0xa00c222c700, {0xa010258a500, 0x1, 0x1}, ...)
	/home/runner/work/doltgresql/doltgresql/server/functions/framework/compiled_function.go:129 +0xbab
github.com/dolthub/doltgresql/server/functions/framework.NewCompiledFunction(0x0, {0x44efffa, 0xc}, {0xa00db4603a0, 0x2, 0x2}, 0xa00c222c700, 0x0)
	/home/runner/work/doltgresql/doltgresql/server/functions/framework/compiled_function.go:64 +0xb1
github.com/dolthub/doltgresql/server/functions/framework.compileNonOperatorFunction.func1(0x4cc829?, {0xa00db4603a0?, 0x40431e0?, 0x2850e01?})
	/home/runner/work/doltgresql/doltgresql/server/functions/framework/catalog.go:182 +0x36
github.com/dolthub/go-mysql-server/sql.FunctionN.NewInstance(...)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/functions.go:185
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).buildScalar(0xa00d7f0ac00, 0xa00da5c0700, {0x4f3d510, 0xa00d3098500})
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/scalar.go:234 +0x41bf
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).selectExprToExpression(0xa00d7f0ac00, 0xa00d30986e0?, {0x4f26a20?, 0xa010258a0f0})
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/project.go:207 +0x15d
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).analyzeSelectList(0xa00d7f0ac00, 0xa00da5c0700, 0xa00da5c0800, {0xa00db3e74f0, 0x1, 0x0?})
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/project.go:54 +0x20a
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).analyzeProjectionList(...)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/project.go:29
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).buildSelect(0xa00d7f0ac00, 0x4466a60?, 0xa00db359d10)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/select.go:78 +0x2a5
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).buildSelectStmt(0xa00d7f0ac00, 0xa00da3fcd00?, {0x4ff2838?, 0xa00db359d10})
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/select.go:36 +0xf7
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).buildSubquery(0xa00d7f0ac00, 0xa00d3098640?, {0x4f269a8, 0xa00db359d10}, {0xa011cd003c0, 0x2e}, {0xa011cd003c0?, 0x2e?})
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/builder.go:234 +0x266c
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).build(...)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/builder.go:223
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).bindOnly(0xa00d7f0ac00, {0x4f269a8, 0xa00db359d10}, {0xa011cd003c0, 0x2e}, 0x0)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/parse.go:119 +0x165
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).BindOnly(0xa00d7f0ac00, {0x4f269a8?, 0xa00db359d10?}, {0xa011cd003c0?, 0x0?}, 0xa0114ca3128?)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/parse.go:92 +0x27
github.com/dolthub/doltgresql/server/analyzer.ValidateCreateFunction(0xa00d3098640, 0xa00c1f30a00, {0x4f671e8, 0xa00db462000}, 0x4f671e8?, 0xa00db462000?, 0xa00db3e7570?)
	/home/runner/work/doltgresql/doltgresql/server/analyzer/create_function.go:49 +0x16f
github.com/dolthub/go-mysql-server/sql/analyzer.(*Batch).evalOnce(0xa00da3fd1b8?, 0xa00d3098640, 0xa00c1f30a00, {0x4f671e8?, 0xa00db462000?}, 0x0, 0x4ec4770, 0xa00db3e7570)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/analyzer/batch.go:85 +0x263
github.com/dolthub/go-mysql-server/sql/analyzer.(*Batch).EvalWithSelector(0x4f487a8?, 0x4f671e8?, 0xa00c1f30a00, {0x4f671e8?, 0xa00db462000?}, 0x0?, 0x6?, 0x44f51fa?)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/analyzer/batch.go:59 +0x151
github.com/dolthub/go-mysql-server/sql/analyzer.(*Batch).Eval(...)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/analyzer/batch.go:51
github.com/dolthub/go-mysql-server/sql/analyzer.(*Analyzer).analyzeWithSelector(0xa00c1f30a00, 0x4f6d540?, {0x4f671e8, 0xa00db462000}, 0x0, 0x4ec4778, 0x4ec4770, 0xa00db3e7570)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/analyzer/analyzer.go:547 +0x4a5
github.com/dolthub/go-mysql-server/sql/analyzer.(*Analyzer).Analyze(0x27f6b27?, 0xa00d7f0a6c0?, {0x4f671e8?, 0xa00db462000?}, 0xa00db3d23c0?, 0xa00da3fd3a8?)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/analyzer/analyzer.go:500 +0x125
github.com/dolthub/go-mysql-server.(*Engine).analyzeNode(0xa00d3098640?, 0xa00d3098640?, {0xa00db462000?, 0x9e?}, {0x4f671e8?, 0xa00db462000?}, 0x0?)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/engine.go:559 +0x286
github.com/dolthub/go-mysql-server.(*Engine).QueryWithBindings(0xa00c25ba480, 0xa00d3098640, {0xa00db3d23c0, 0x9f}, {0x4f26358, 0xa00f8589340}, 0x0, 0x0)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/engine.go:365 +0x355
github.com/dolthub/doltgresql/server.(*DoltgresHandler).executeQuery(0xa010258a190?, 0xa00db3e7560?, {0xa00db3d23c0?, 0x2a805c0?}, {0x4f26358?, 0xa00f8589340?}, {0x2b3e4bf?, 0xa00da3fd638?})
	/home/runner/work/doltgresql/doltgresql/server/doltgres_handler.go:438 +0x2b
github.com/dolthub/doltgresql/server.(*DoltgresHandler).doQuery(0xa011fe22d80, {0x4f48428?, 0x97ec040?}, 0xa00c12a4008?, {0xa00db3d23c0, 0x9f}, {0x4f26358, 0xa00f8589340}, {0x0, 0x0}, ...)
	/home/runner/work/doltgresql/doltgresql/server/doltgres_handler.go:376 +0x613
github.com/dolthub/doltgresql/server.(*DoltgresHandler).ComQuery(0xa011fe22d80, {0x4f48428, 0x97ec040}, 0xa00c46719e0, {0xa00db3d23c0, 0x9f}, {0x4f26358, 0xa00f8589340}, 0xa00db423da0)
	/home/runner/work/doltgresql/doltgresql/server/doltgres_handler.go:231 +0x125
github.com/dolthub/doltgresql/server.(*ConnectionHandler).query(0xa011fe22dc0, {{0xa00db3d23c0, 0x9f}, {0x4f26358, 0xa00f8589340}, {0x44fdafe, 0xf}})
	/home/runner/work/doltgresql/doltgresql/server/connection_handler.go:996 +0x235
github.com/dolthub/doltgresql/server.(*ConnectionHandler).handleQuery(0xa011fe22dc0, 0xa00d304c1a0)
	/home/runner/work/doltgresql/doltgresql/server/connection_handler.go:466 +0x22a
github.com/dolthub/doltgresql/server.(*ConnectionHandler).handleMessage(0xa00d304c000?, {0x4f246d8?, 0xa00d304c1a0?})
	/home/runner/work/doltgresql/doltgresql/server/connection_handler.go:408 +0x7d
github.com/dolthub/doltgresql/server.(*ConnectionHandler).receiveMessage(0xa011fe22dc0)
	/home/runner/work/doltgresql/doltgresql/server/connection_handler.go:381 +0x2c5
github.com/dolthub/doltgresql/server.(*ConnectionHandler).HandleConnection(0xa011fe22dc0)
	/home/runner/work/doltgresql/doltgresql/server/connection_handler.go:186 +0x150
created by github.com/dolthub/doltgresql/server.(*Listener).Accept in goroutine 108
	/home/runner/work/doltgresql/doltgresql/server/listener.go:89 +0x11f
QUERY:          create function aggfns_trans(aggtype[],integer,integer,text) returns aggtype[]
as 'select array_append($1,ROW($2,$3,$4)::aggtype)'
language sql immutable;
RECEIVED ERROR: receiveMessage recovered panic: cannot get array type from: aggtype: goroutine 98161 [running]:
runtime/debug.Stack()
	/opt/hostedtoolcache/go/1.26.2/x64/src/runtime/debug/stack.go:26 +0x5e
github.com/dolthub/doltgresql/server.(*ConnectionHandler).receiveMessage.func1()
	/home/runner/work/doltgresql/doltgresql/server/connection_handler.go:351 +0x4c
panic({0x3bf5da0?, 0xa0121f0b560?})
	/opt/hostedtoolcache/go/1.26.2/x64/src/runtime/panic.go:860 +0x13a
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).bindOnly.func1()
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/parse.go:107 +0x71
panic({0x3bf5da0?, 0xa0121f0b560?})
	/opt/hostedtoolcache/go/1.26.2/x64/src/runtime/panic.go:860 +0x13a
github.com/dolthub/doltgresql/server/types.(*DoltgresType).ToArrayType(0xa00d2e5f6c0)
	/home/runner/work/doltgresql/doltgresql/server/types/type.go:916 +0x279
github.com/dolthub/doltgresql/server/functions/framework.(*CompiledFunction).resolvePolymorphicReturnType(0xa00c2501ab8?, {0xa00f1410058, 0x2, 0x2?}, {0xa0121f0b500, 0x2, 0x2?}, 0x80acf80)
	/home/runner/work/doltgresql/doltgresql/server/functions/framework/compiled_function.go:783 +0x385
github.com/dolthub/doltgresql/server/functions/framework.newCompiledFunctionInternal(0x0, {0x44efffa, 0xc}, {0xa00d2fe5e60, 0x2, 0x2}, 0xa00c222c700, {0xa00ffddd680, 0x1, 0x1}, ...)
	/home/runner/work/doltgresql/doltgresql/server/functions/framework/compiled_function.go:129 +0xbab
github.com/dolthub/doltgresql/server/functions/framework.NewCompiledFunction(0x0, {0x44efffa, 0xc}, {0xa00d2fe5e60, 0x2, 0x2}, 0xa00c222c700, 0x0)
	/home/runner/work/doltgresql/doltgresql/server/functions/framework/compiled_function.go:64 +0xb1
github.com/dolthub/doltgresql/server/functions/framework.compileNonOperatorFunction.func1(0x4cc829?, {0xa00d2fe5e60?, 0x40431e0?, 0x1?})
	/home/runner/work/doltgresql/doltgresql/server/functions/framework/catalog.go:182 +0x36
github.com/dolthub/go-mysql-server/sql.FunctionN.NewInstance(...)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/functions.go:185
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).buildScalar(0xa00db4e8540, 0xa00d2f8a900, {0x4f3d510, 0xa00d2b5b0e0})
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/scalar.go:234 +0x41bf
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).selectExprToExpression(0xa00db4e8540, 0xa00da3fc7b0?, {0x4f26a20?, 0xa00ffddd590})
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/project.go:207 +0x15d
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).analyzeSelectList(0xa00db4e8540, 0xa00d2f8a900, 0xa00d2f8aa00, {0xa0121f0b3c0, 0x1, 0x0?})
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/project.go:54 +0x20a
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).analyzeProjectionList(...)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/project.go:29
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).buildSelect(0xa00db4e8540, 0x4466a60?, 0xa00db4cc0f0)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/select.go:78 +0x2a5
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).buildSelectStmt(0xa00db4e8540, 0xa00da3fcd00?, {0x4ff2838?, 0xa00db4cc0f0})
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/select.go:36 +0xf7
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).buildSubquery(0xa00db4e8540, 0xa00d2b5b220?, {0x4f269a8, 0xa00db4cc0f0}, {0xa010d193080, 0x2e}, {0xa010d193080?, 0x2e?})
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/builder.go:234 +0x266c
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).build(...)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/builder.go:223
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).bindOnly(0xa00db4e8540, {0x4f269a8, 0xa00db4cc0f0}, {0xa010d193080, 0x2e}, 0x0)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/parse.go:119 +0x165
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).BindOnly(0xa00db4e8540, {0x4f269a8?, 0xa00db4cc0f0?}, {0xa010d193080?, 0x0?}, 0xa00f68054d8?)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/parse.go:92 +0x27
github.com/dolthub/doltgresql/server/analyzer.ValidateCreateFunction(0xa00d2b5b220, 0xa00c1f30a00, {0x4f671e8, 0xa00d2fa0d00}, 0x4f671e8?, 0xa00d2fa0d00?, 0xa0121f0b440?)
	/home/runner/work/doltgresql/doltgresql/server/analyzer/create_function.go:49 +0x16f
github.com/dolthub/go-mysql-server/sql/analyzer.(*Batch).evalOnce(0x9?, 0xa00d2b5b220, 0xa00c1f30a00, {0x4f671e8?, 0xa00d2fa0d00?}, 0x0, 0x4ec4770, 0xa0121f0b440)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/analyzer/batch.go:85 +0x263
github.com/dolthub/go-mysql-server/sql/analyzer.(*Batch).EvalWithSelector(0x4f487a8?, 0x4f671e8?, 0xa00c1f30a00, {0x4f671e8?, 0xa00d2fa0d00?}, 0x0?, 0x6?, 0x44f51fa?)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/analyzer/batch.go:59 +0x151
github.com/dolthub/go-mysql-server/sql/analyzer.(*Batch).Eval(...)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/analyzer/batch.go:51
github.com/dolthub/go-mysql-server/sql/analyzer.(*Analyzer).analyzeWithSelector(0xa00c1f30a00, 0x4f6d540?, {0x4f671e8, 0xa00d2fa0d00}, 0x0, 0x4ec4778, 0x4ec4770, 0xa0121f0b440)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/analyzer/analyzer.go:547 +0x4a5
github.com/dolthub/go-mysql-server/sql/analyzer.(*Analyzer).Analyze(0x27f6b27?, 0xa00db4e8000?, {0x4f671e8?, 0xa00d2fa0d00?}, 0xa00ca6aa0a0?, 0xa00da3fd3a8?)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/analyzer/analyzer.go:500 +0x125
github.com/dolthub/go-mysql-server.(*Engine).analyzeNode(0xa00d2b5b220?, 0xa00d2b5b220?, {0xa00d2fa0d00?, 0x99?}, {0x4f671e8?, 0xa00d2fa0d00?}, 0x0?)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/engine.go:559 +0x286
github.com/dolthub/go-mysql-server.(*Engine).QueryWithBindings(0xa00c25ba480, 0xa00d2b5b220, {0xa00ca6aa0a0, 0x9a}, {0x4f26358, 0xa00f41a51f0}, 0x0, 0x0)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/engine.go:365 +0x355
github.com/dolthub/doltgresql/server.(*DoltgresHandler).executeQuery(0xa00ffddd5e0?, 0xa0121f0b430?, {0xa00ca6aa0a0?, 0x2a805c0?}, {0x4f26358?, 0xa00f41a51f0?}, {0x2b3e4bf?, 0xa00da3fd638?})
	/home/runner/work/doltgresql/doltgresql/server/doltgres_handler.go:438 +0x2b
github.com/dolthub/doltgresql/server.(*DoltgresHandler).doQuery(0xa011fe22d80, {0x4f48428?, 0x97ec040?}, 0xa00c12a4008?, {0xa00ca6aa0a0, 0x9a}, {0x4f26358, 0xa00f41a51f0}, {0x0, 0x0}, ...)
	/home/runner/work/doltgresql/doltgresql/server/doltgres_handler.go:376 +0x613
github.com/dolthub/doltgresql/server.(*DoltgresHandler).ComQuery(0xa011fe22d80, {0x4f48428, 0x97ec040}, 0xa00c46719e0, {0xa00ca6aa0a0, 0x9a}, {0x4f26358, 0xa00f41a51f0}, 0xa00d2e3f4a0)
	/home/runner/work/doltgresql/doltgresql/server/doltgres_handler.go:231 +0x125
github.com/dolthub/doltgresql/server.(*ConnectionHandler).query(0xa011fe22dc0, {{0xa00ca6aa0a0, 0x9a}, {0x4f26358, 0xa00f41a51f0}, {0x44fdafe, 0xf}})
	/home/runner/work/doltgresql/doltgresql/server/connection_handler.go:996 +0x235
github.com/dolthub/doltgresql/server.(*ConnectionHandler).handleQuery(0xa011fe22dc0, 0xa00d304c1a0)
	/home/runner/work/doltgresql/doltgresql/server/connection_handler.go:466 +0x22a
github.com/dolthub/doltgresql/server.(*ConnectionHandler).handleMessage(0xa00d304c000?, {0x4f246d8?, 0xa00d304c1a0?})
	/home/runner/work/doltgresql/doltgresql/server/connection_handler.go:408 +0x7d
github.com/dolthub/doltgresql/server.(*ConnectionHandler).receiveMessage(0xa011fe22dc0)
	/home/runner/work/doltgresql/doltgresql/server/connection_handler.go:381 +0x2c5
github.com/dolthub/doltgresql/server.(*ConnectionHandler).HandleConnection(0xa011fe22dc0)
	/home/runner/work/doltgresql/doltgresql/server/connection_handler.go:186 +0x150
created by github.com/dolthub/doltgresql/server.(*Listener).Accept in goroutine 108
	/home/runner/work/doltgresql/doltgresql/server/listener.go:89 +0x11f

create_table_like

QUERY:          CREATE TABLE ctlt13_inh () INHERITS (ctlt1, ctlt3);
RECEIVED ERROR: invalid column name: !hidden!ctlt3_fnidx!0!0 (errno 1105) (sqlstate HY000)

polymorphism

QUERY:          create function first_el(anyarray) returns anyelement as
'select $1[1]' language sql strict immutable;
RECEIVED ERROR: receiveMessage recovered panic: unexpected type *types.deferredType for subscript: goroutine 372743 [running]:
runtime/debug.Stack()
	/opt/hostedtoolcache/go/1.26.2/x64/src/runtime/debug/stack.go:26 +0x5e
github.com/dolthub/doltgresql/server.(*ConnectionHandler).receiveMessage.func1()
	/home/runner/work/doltgresql/doltgresql/server/connection_handler.go:351 +0x4c
panic({0x3bf5da0?, 0xa0120435da0?})
	/opt/hostedtoolcache/go/1.26.2/x64/src/runtime/panic.go:860 +0x13a
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).bindOnly.func1()
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/parse.go:107 +0x71
panic({0x3bf5da0?, 0xa0120435da0?})
	/opt/hostedtoolcache/go/1.26.2/x64/src/runtime/panic.go:860 +0x13a
github.com/dolthub/doltgresql/server/expression.Subscript.Type({{0x4f6d400?, 0xa00ecd27b40?}, {0x4f6d360?, 0xa00f1cfcfa0?}}, 0xa01221460a0)
	/home/runner/work/doltgresql/doltgresql/server/expression/subscript.go:58 +0xc6
github.com/dolthub/go-mysql-server/sql/expression.(*Alias).Type(...)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/expression/alias.go:121
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).analyzeSelectList(0xa010dd38240, 0xa00ea66aa00, 0xa00ea66ab00, {0xa0120435b00, 0x1, 0x0?})
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/project.go:156 +0x597
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).analyzeProjectionList(...)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/project.go:29
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).buildSelect(0xa010dd38240, 0x4466a60?, 0xa00ea632b40)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/select.go:78 +0x2a5
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).buildSelectStmt(0xa010dd38240, 0xa00edffcd00?, {0x4ff2838?, 0xa00ea632b40})
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/select.go:36 +0xf7
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).buildSubquery(0xa010dd38240, 0xa01221460a0?, {0x4f269a8, 0xa00ea632b40}, {0xa0109764320, 0xc}, {0xa0109764320?, 0xc?})
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/builder.go:234 +0x266c
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).build(...)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/builder.go:223
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).bindOnly(0xa010dd38240, {0x4f269a8, 0xa00ea632b40}, {0xa0109764320, 0xc}, 0x0)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/parse.go:119 +0x165
github.com/dolthub/go-mysql-server/sql/planbuilder.(*Builder).BindOnly(0xa010dd38240, {0x4f269a8?, 0xa00ea632b40?}, {0xa0109764320?, 0x0?}, 0xa012eea9058?)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/planbuilder/parse.go:92 +0x27
github.com/dolthub/doltgresql/server/analyzer.ValidateCreateFunction(0xa01221460a0, 0xa00c1f30a00, {0x4f671e8, 0xa0122f89c70}, 0x4f671e8?, 0xa0122f89c70?, 0xa0120435b60?)
	/home/runner/work/doltgresql/doltgresql/server/analyzer/create_function.go:49 +0x16f
github.com/dolthub/go-mysql-server/sql/analyzer.(*Batch).evalOnce(0xa00edffd1b8?, 0xa01221460a0, 0xa00c1f30a00, {0x4f671e8?, 0xa0122f89c70?}, 0x0, 0x4ec4770, 0xa0120435b60)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/analyzer/batch.go:85 +0x263
github.com/dolthub/go-mysql-server/sql/analyzer.(*Batch).EvalWithSelector(0x4f487a8?, 0x4f671e8?, 0xa00c1f30a00, {0x4f671e8?, 0xa0122f89c70?}, 0x0?, 0x6?, 0x44f51fa?)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/analyzer/batch.go:59 +0x151
github.com/dolthub/go-mysql-server/sql/analyzer.(*Batch).Eval(...)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/analyzer/batch.go:51
github.com/dolthub/go-mysql-server/sql/analyzer.(*Analyzer).analyzeWithSelector(0xa00c1f30a00, 0x4f6d540?, {0x4f671e8, 0xa0122f89c70}, 0x0, 0x4ec4778, 0x4ec4770, 0xa0120435b60)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/analyzer/analyzer.go:547 +0x4a5
github.com/dolthub/go-mysql-server/sql/analyzer.(*Analyzer).Analyze(0x27f6b27?, 0xa010dd38180?, {0x4f671e8?, 0xa0122f89c70?}, 0xa012477df10?, 0xa00edffd3a8?)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/sql/analyzer/analyzer.go:500 +0x125
github.com/dolthub/go-mysql-server.(*Engine).analyzeNode(0xa01221460a0?, 0xa01221460a0?, {0xa0122f89c70?, 0x65?}, {0x4f671e8?, 0xa0122f89c70?}, 0x0?)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/engine.go:559 +0x286
github.com/dolthub/go-mysql-server.(*Engine).QueryWithBindings(0xa00c25ba480, 0xa01221460a0, {0xa012477df10, 0x66}, {0x4f26358, 0xa00fac86bd0}, 0x0, 0x0)
	/home/runner/go/pkg/mod/github.com/dolthub/go-mysql-server@v0.20.1-0.20260427172105-a0b357da2f1d/engine.go:365 +0x355
github.com/dolthub/doltgresql/server.(*DoltgresHandler).executeQuery(0xa00f1cfd040?, 0xa0120435b50?, {0xa012477df10?, 0x2a805c0?}, {0x4f26358?, 0xa00fac86bd0?}, {0x2b3e4bf?, 0xa00edffd638?})
	/home/runner/work/doltgresql/doltgresql/server/doltgres_handler.go:438 +0x2b
github.com/dolthub/doltgresql/server.(*DoltgresHandler).doQuery(0xa00f26662c0, {0x4f48428?, 0x97ec040?}, 0xa012e388008?, {0xa012477df10, 0x66}, {0x4f26358, 0xa00fac86bd0}, {0x0, 0x0}, ...)
	/home/runner/work/doltgresql/doltgresql/server/doltgres_handler.go:376 +0x613
github.com/dolthub/doltgresql/server.(*DoltgresHandler).ComQuery(0xa00f26662c0, {0x4f48428, 0x97ec040}, 0xa0134864240, {0xa012477df10, 0x66}, {0x4f26358, 0xa00fac86bd0}, 0xa00ecd2ac00)
	/home/runner/work/doltgresql/doltgresql/server/doltgres_handler.go:231 +0x125
github.com/dolthub/doltgresql/server.(*ConnectionHandler).query(0xa00f2666300, {{0xa012477df10, 0x66}, {0x4f26358, 0xa00fac86bd0}, {0x44fdafe, 0xf}})
	/home/runner/work/doltgresql/doltgresql/server/connection_handler.go:996 +0x235
github.com/dolthub/doltgresql/server.(*ConnectionHandler).handleQuery(0xa00f2666300, 0xa014f663dc0)
	/home/runner/work/doltgresql/doltgresql/server/connection_handler.go:466 +0x22a
github.com/dolthub/doltgresql/server.(*ConnectionHandler).handleMessage(0xa014f663c20?, {0x4f246d8?, 0xa014f663dc0?})
	/home/runner/work/doltgresql/doltgresql/server/connection_handler.go:408 +0x7d
github.com/dolthub/doltgresql/server.(*ConnectionHandler).receiveMessage(0xa00f2666300)
	/home/runner/work/doltgresql/doltgresql/server/connection_handler.go:381 +0x2c5
github.com/dolthub/doltgresql/server.(*ConnectionHandler).HandleConnection(0xa00f2666300)
	/home/runner/work/doltgresql/doltgresql/server/connection_handler.go:186 +0x150
created by github.com/dolthub/doltgresql/server.(*Listener).Accept in goroutine 108
	/home/runner/work/doltgresql/doltgresql/server/listener.go:89 +0x11f

vacuum

QUERY:          INSERT INTO vaccluster VALUES (1), (2);
RECEIVED ERROR: expression does not result in a single value (errno 1105) (sqlstate HY000)

${\color{lightgreen}Progressions (41)}$

alter_table

QUERY: ALTER TABLE tt9 ADD CHECK(c > 2);

collate.icu.utf8

QUERY: CREATE INDEX collate_test1_idx3 ON collate_test1 ((b COLLATE "C"));
QUERY: CREATE INDEX collate_test1_idx4 ON collate_test1 (((b||'foo') COLLATE "POSIX"));

compression

QUERY: CREATE UNIQUE INDEX idx1 ON cmdata2 ((f1 || f2));

create_aggregate

QUERY: create function least_accum(int8, int8) returns int8 language sql as
  'select least($1, $2)';
QUERY: drop function least_accum(int8, int8);

create_function_sql

QUERY: CREATE FUNCTION double_append(anyarray, anyelement) RETURNS SETOF anyarray
LANGUAGE SQL IMMUTABLE AS
$$ SELECT array_append($1, $2) || array_append($1, $2) $$;

create_index

QUERY: CREATE UNIQUE INDEX func_index_index on func_index_heap (textcat(f1,f2));
QUERY: INSERT INTO func_index_heap VALUES('ABCD', 'EF');
QUERY: CREATE UNIQUE INDEX func_index_index on func_index_heap ((f1 || f2) text_ops);
QUERY: INSERT INTO func_index_heap VALUES('ABCD', 'EF');
QUERY: CREATE UNIQUE INDEX concur_reindex_ind3 ON concur_reindex_tab(abs(c1));
QUERY: CREATE UNIQUE INDEX concur_exprs_index_expr
  ON concur_exprs_tab ((c1::text COLLATE "C"));

create_table

QUERY: create index part_column_drop_b_expr on part_column_drop((b = 1));
QUERY: create index part_column_drop_d_expr on part_column_drop((d = 2));

create_table_like

QUERY: CREATE INDEX ctlt1_fnidx ON ctlt1 ((a || b));
QUERY: CREATE INDEX ctlt3_fnidx ON ctlt3 ((a || c));
QUERY: CREATE TABLE inh_error1 () INHERITS (ctlt1, ctlt4);

equivclass

QUERY: create unique index ec1_expr1 on ec1((ff + 1));
QUERY: create unique index ec1_expr2 on ec1((ff + 2 + 1));
QUERY: create unique index ec1_expr3 on ec1((ff + 3 + 1));
QUERY: create unique index ec1_expr4 on ec1((ff + 4));

generated

QUERY: CREATE INDEX gtest22c_expr_idx ON gtest22c ((b * 3));

hash_index

QUERY: create unique index hash_f8_index_1 on hash_f8_heap(abs(random));

indexing

QUERY: create index on idxpart1 ((a + 0));
QUERY: create index on idxpart ((a + b));
QUERY: create index on idxpart (abs(b));
QUERY: create index parted_isvalid_idx on parted_isvalid_tab ((a/b));

inherit

QUERY: alter table p2 add check (f2>0);
QUERY: create index matest0i on matest0 ((1-id));
QUERY: create index matest1i on matest1 ((1-id));
QUERY: create index matest3i on matest3 ((1-id));
QUERY: create index on permtest_parent (left(c, 3));

insert_conflict

QUERY: create unique index expr_key_index on insertconflicttest(lower(fruit));
QUERY: create unique index insertconflicti1 on insertconflict(coalesce(a, 0));

polymorphism

QUERY: CREATE FUNCTION tfp(anyarray,anyelement) RETURNS anyarray AS
'select $1 || $2' LANGUAGE SQL;
QUERY: create function first_el_transfn(anyarray, anyelement) returns anyarray as
'select $1 || $2' language sql immutable;
QUERY: create function formarray(anyelement, variadic anyarray) returns anyarray as $$
  select array_prepend($1, $2);
$$ language sql immutable strict;
QUERY: drop function formarray(anyelement, variadic anyarray);

subselect

QUERY: select count(*) from tenk1 t
where (exists(select 1 from tenk1 k where k.unique1 = t.unique2) or ten < 0);

Footnotes

  1. These are tests that we're marking as Successful, however they do not match the expected output in some way. This is due to small differences, such as different wording on the error messages, or the column names being incorrect while the data itself is correct.

@fulghum fulghum force-pushed the fulghum/function_expr_index branch from df4a5d9 to f389aca Compare April 30, 2026 18:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant