question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

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:closed
  • Created 2 years ago
  • Comments:9 (5 by maintainers)

github_iconTop GitHub Comments

3reactions
jaclarkecommented, Aug 15, 2021

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, since id 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 the assert_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 as LIMIT 1 would.

1reaction
jaclarkecommented, Aug 15, 2021

Is there a way to specify query right for this use case?

Yes, there is a json_array_unpack function (docs), so the for loop sub query would become:

FOR t IN { json_array_unpack(<json>$2) }
UNION (
    INSERT Translation {
        lang := <str>t['lang'],
        text := <str>t['text'],
    }
)
Read more comments on GitHub >

github_iconTop 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 >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found