Insert objects via FOR LOOP error
See original GitHub issue- EdgeDB Version: 1.0.0-beta.2
- OS Version: MacOS 11.4
I’m trying to bulk insert objects via FOR loop and getting an error:
ERROR: edgedb.InternalServerError: there is no range var for [ns~1]@[ns~12]@@(__derived__::__derived__|t@w~1) source in <pg.SelectStmt at 0x7f9561685490>
Hint: This is most likely a bug in EdgeDB. Please consider opening an issue ticket at https://github.com/edgedb/edgedb/issues/new?template=bug_report.md
So the schema is:
module default {
type Translation {
required property lang -> str;
required property text -> str;
}
};
I’m using the edgedb-go
library, so the code is:
err := db.QueryOne(ctx, `INSERT City {
name := <str>$0,
country := (
SELECT Country
FILTER .id = <uuid>$1),
i18nnames := (
# Bulk insert all translated city names
FOR t IN { array_unpack(<array<Translation>$2>) }
UNION (
INSERT Translation {
lang := t.lang,
text := t.text,
}
)
),
}`, &id,
city.Name,
city.Country.ID,
city.I18NNames,
)
I’m trying to reproduce this in the edgedb-cli, and even without data it yields the same error:
edgedb> FOR t IN { array_unpack(<array<Translation>>{}) }
....... UNION (
....... INSERT Translation {
....... lang := t.lang,
....... text := t.text,
....... }
....... );
ERROR: InternalServerError: there is no range var for (__derived__::__derived__|t@w~1) source in <pg.SelectStmt at 0x7f9561a836d0>
Hint: This is most likely a bug in EdgeDB. Please consider opening an issue ticket at https://github.com/edgedb/edgedb/issues/new?template=bug_report.md
Server traceback:
``` Traceback (most recent call last): File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/__init__.py", line 94, in compile_ir_to_sql_tree qtree = dispatch.compile(ir_expr, ctx=ctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/functools.py", line 877, in wrapper return dispatch(args[0].__class__)(*args, **kw) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/expr.py", line 60, in compile_Set _compile_set_impl(ir_set, ctx=ctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/expr.py", line 114, in _compile_set_impl _compile_set(ir_set, ctx=ctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/expr.py", line 589, in _compile_set relgen.get_set_rvar(ir_set, ctx=ctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/relgen.py", line 136, in get_set_rvar return _process_toplevel_query(ir_set, ctx=ctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/relgen.py", line 243, in _process_toplevel_query rvars = _get_set_rvar(ir_set, ctx=ctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/relgen.py", line 277, in _get_set_rvar rvars = process_set_as_subquery(ir_set, stmt, ctx=ctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/relgen.py", line 1213, in process_set_as_subquery dispatch.visit(ir_set.expr, ctx=newctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/functools.py", line 877, in wrapper return dispatch(args[0].__class__)(*args, **kw) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/dispatch.py", line 44, in visit compile(ir, ctx=ctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/functools.py", line 877, in wrapper return dispatch(args[0].__class__)(*args, **kw) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/stmt.py", line 95, in compile_SelectStmt outvar = clauses.compile_output(stmt.result, ctx=ictx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/clauses.py", line 173, in compile_output dispatch.visit(ir_set, ctx=newctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/functools.py", line 877, in wrapper return dispatch(args[0].__class__)(*args, **kw) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/expr.py", line 85, in visit_Set _compile_set_impl(ir_set, ctx=ctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/expr.py", line 110, in _compile_set_impl _compile_set(ir_set, ctx=scopectx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/expr.py", line 589, in _compile_set relgen.get_set_rvar(ir_set, ctx=ctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/relgen.py", line 189, in get_set_rvar rvars = _get_set_rvar(ir_set, ctx=subctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/relgen.py", line 277, in _get_set_rvar rvars = process_set_as_subquery(ir_set, stmt, ctx=ctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/relgen.py", line 1213, in process_set_as_subquery dispatch.visit(ir_set.expr, ctx=newctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/functools.py", line 877, in wrapper return dispatch(args[0].__class__)(*args, **kw) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/dispatch.py", line 44, in visit compile(ir, ctx=ctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/functools.py", line 877, in wrapper return dispatch(args[0].__class__)(*args, **kw) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/stmt.py", line 157, in compile_InsertStmt dml.process_insert_body( File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/dml.py", line 646, in process_insert_body rel = compile_insert_shape_element( File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/dml.py", line 913, in compile_insert_shape_element dispatch.visit(shape_el, ctx=insvalctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/functools.py", line 877, in wrapper return dispatch(args[0].__class__)(*args, **kw) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/expr.py", line 85, in visit_Set _compile_set_impl(ir_set, ctx=ctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/expr.py", line 110, in _compile_set_impl _compile_set(ir_set, ctx=scopectx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/expr.py", line 589, in _compile_set relgen.get_set_rvar(ir_set, ctx=ctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/relgen.py", line 189, in get_set_rvar rvars = _get_set_rvar(ir_set, ctx=subctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/relgen.py", line 277, in _get_set_rvar rvars = process_set_as_subquery(ir_set, stmt, ctx=ctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/relgen.py", line 1213, in process_set_as_subquery dispatch.visit(ir_set.expr, ctx=newctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/functools.py", line 877, in wrapper return dispatch(args[0].__class__)(*args, **kw) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/dispatch.py", line 44, in visit compile(ir, ctx=ctx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/functools.py", line 877, in wrapper return dispatch(args[0].__class__)(*args, **kw) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/stmt.py", line 95, in compile_SelectStmt outvar = clauses.compile_output(stmt.result, ctx=ictx) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/clauses.py", line 182, in compile_output val = pathctx.get_path_value_output( File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/pathctx.py", line 1004, in get_path_value_output return get_path_output(rel, path_id, aspect='value', env=env) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/pathctx.py", line 848, in get_path_output return _get_path_output(rel, path_id=path_id, aspect=aspect, File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/pathctx.py", line 892, in _get_path_output ref = get_path_var(rel, path_id, aspect=aspect, env=env) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/pathctx.py", line 323, in get_path_var outvar = get_path_output( File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/pathctx.py", line 848, in get_path_output return _get_path_output(rel, path_id=path_id, aspect=aspect, File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/pathctx.py", line 892, in _get_path_output ref = get_path_var(rel, path_id, aspect=aspect, env=env) File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/pathctx.py", line 294, in get_path_var raise LookupError( LookupError: there is no range var for (__derived__::__derived__|t@w~1) source in <pg.SelectStmt at 0x7f9561a836d0> The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/server/compiler_pool/worker.py", line 312, in worker
res = meth(*args)
File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/server/compiler_pool/worker.py", line 173, in compile
units, cstate = COMPILER.compile(
File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/server/compiler/compiler.py", line 1986, in compile
units = self._compile(ctx=ctx, source=source)
File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/server/compiler/compiler.py", line 1565, in _compile
return self._try_compile(ctx=ctx, source=source)
File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/server/compiler/compiler.py", line 1618, in _try_compile
comp, capabilities = self._compile_dispatch_ql(ctx, stmt)
File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/server/compiler/compiler.py", line 1539, in _compile_dispatch_ql
query = self._compile_ql_query(ctx, ql)
File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/server/compiler/compiler.py", line 597, in _compile_ql_query
sql_text, argmap = pg_compiler.compile_ir_to_sql(
File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/__init__.py", line 116, in compile_ir_to_sql
qtree = compile_ir_to_sql_tree(
File "/Library/Frameworks/EdgeDB.framework/Versions/1-beta2/lib/edgedb-server-1-beta2/lib/python3.9/site-packages/edb/pgsql/compiler/__init__.py", line 101, in compile_ir_to_sql_tree
raise errors.InternalServerError(*args) from e
edb.errors.InternalServerError: there is no range var for (__derived__::__derived__|t@w~1) source in <pg.SelectStmt at 0x7f9561a836d0>
edgedb>
</details>
I'm not sure I'm doing for loop insert correctly, though. If I can provide more details to make it easier to figure out the problem, let me know.
Issue Analytics
- State:
- Created 2 years ago
- Comments:9 (5 by maintainers)
Top Results From Across the Web
Adding new objects to a list; (For loop not working properly)
So I'm trying to add a names to a new list from a file called directory.txt that has 1000 objects that contain a...
Read more >Dml Exception while inserting multiple records using a for loop
hi, iam going to insert a multiple records using a forloop on the account object, but getting an dml exception. User-added image
Read more >unity - Trouble adding to a dictionary using a for loop
When I try to run the following code, I get the error NullReferenceException: Object reference not set to an instance of an object....
Read more >R Open Labs: Scripting 2 - Loops and Error Handling
Let's convert the heights to inches using a loop. In this case, our output object is the column althletes$height . Note that we...
Read more >5. Working with Arrays and Loops - JavaScript Cookbook [Book]
One you’ve created an array, using Array object or literal notation, you can access the array elements in a loop, or use any...
Read more >
Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free
Top Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Also, this isn’t related to your issue, but regarding this comment in your query:
# TODO: check if we need LIMIT here, as cardinality should be ONE anyways
In this case of a filter checking equality against an objects
id
, EdgeDB should always be able to infer singleton cardinality, sinceid
has a unique constraint. However in other cases where EdgeDB isn’t able to infer singleton cardinality, but you know it should be, EdgeDB now has theassert_single
function (added in beta 3), which will throw an error if there is ever more than a single item, instead of silently discarding the extra items asLIMIT 1
would.Yes, there is a
json_array_unpack
function (docs), so thefor
loop sub query would become: