Refactor Standard.Test to the builder API

Closes #7566
Pull Request Description

Important Notes

Checklist
Please ensure that the following checklist has been satisfied before submitting the PR:

[ ] The documentation has been updated, if necessary.
[ ] Screenshots/screencasts have been attached, if there are any visual changes. For interactive or animated visual changes, a screencast is preferred.
[ ] All code follows the
Scala,
Java,
and
Rust
style guides. In case you are using a language not listed above, follow the Rust style guide.
All code has been tested:

[ ] Unit tests have been written where possible.
[ ] If GUI codebase was changed, the GUI was tested when built using ./run ide build.

Proposition (1)
Let's try to retain the old API as much as possible. The standalone (only in one source) prototype is in test/Tests/src/Proposition_1.enso. In this prototype:

All the test groups and specs are first collected, and then run.
The collection of tests is done in Test_Suite.collect method.

We use State of Test_Suite_Builder and Group_Builder to keep track of groups and suites that are being collected. Both of these are just Vector builders.

The API is the same as it used to be - we only need to add the Test_Suite.collect method call to every test source file.
The test data initialization (setup) can be done via lazy atom fields.
This concept can be expanded to multiple sources just by merging all the Test_Suite from all the sources.

We can do some validation there, like ensure that group names do not clash.

The output of running the prototype with enso --run test/Tests/src/Proposition_1.enso is:
All test names:
  my-group:my-spec-1
  my-group:my-spec-2
  my-group-2:my-spec-3
Running tests...
Running group 'my-group'
  Running spec 'my-spec-1'
    In my-spec-1
  Running spec 'my-spec-2'
    In my-spec-2
Creating test data
    my-spec-2: res = True
Running group 'my-group-2'
  Running spec 'my-spec-3'
    In my-spec-3
Done running tests.

From the output, we can see that the concept of first collecting and then running the tests works.
The advantage of this proposition is that the vast majority of test sources will stay the same, the disadvantage is that we have to use State to keep track of the builders and that the test sources will not look like the bench sources (for example test/Benchmarks/src/Equality.enso)
Proposition (2)
The proposition (2) introduces a similar builder API pattern that was introduced to benchmarks in #7324. Its prototype is implemented as Test_New library. Usage of this builder API is demonstrated in test/Tests/src/Data/Bool_Spec_New.enso.
The output of running enso --in-project test/Tests --run test/Tests/src/Data/Bool_Spec_New.enso (excluding unused variable binding warnings) is:
Running `Test.build` (collecting tests)...
Done with `Test.build` (collecting tests)
Running `Test.run_main` - running all tests
Running group 'Booleans'
  Running spec 'should allow converting Bools to Text values'
    In First spec
  Running spec 'should allow for comparing Bools'
    In Second spec
Done with `Test.run_main` - running all tests

The closer to Bench API the better.
Ideally I'd like to see just a single API for building group of specs of Tests and Benchmarks. There is no difference between building a test and building a benchmark as far as I can tell. Running tests and running benchmarks is different. However building tests and benchmarks is the same.
On the other hand, searching for the proper abstraction may be too much for now, so: To keep things simple, we can copy & paste. In such case, please mimic:
type Bench
    ## A set of groups of benchmarks.
    All (groups : Vector Bench)

    ## A single group of benchmarks sharing configuration.
    Group (name:Text) (configuration:Bench_Options) (specs : Vector Bench)

    ## A specific single benchmark.
    Spec (name:Text) (code : Any -> Any)

    ## Construct a Bench object.
    build : (Bench_Builder -> Any) -> Bench
    build fn =
        b = Vector.new_builder
        fn (Bench_Builder.Impl b)
        groups_vec = b.to_vector
        Bench.All groups_vec . validate

moreover, if we 100% copy - we may find the proper abstraction between tests and benchmarks later. As such my choice is clear:
The closer to Bench API the better.

There are two API prototypes (1) and (2).
Both of them handle collection and running of tests separately.
The only difference between those prototypes is in handling of setup and teardown procedures.
In (1), the setup is done via lazy field initialization.
In (2), the setup is done via a method that is passed as a parameter to the group method (See the section with Prototype 2 for more info).
The API and the implementation is implemented as a new library in distribution/lib/Standard/Test_New, which also contains some sources that were simply copied from the Test library.
The migrated tests are in the test directory with *Spec_New.enso suffixes, along with the old tests (links included below).
So far, I have migrated Bool_Spec.enso and portion of SQLite_Spec.enso on both prototypes.
SQLite_Spec.enso appends tests from, among others, Common_Spec.enso and Default_Ordering_Spec.enso.
I have struggled with (1) too much, so not all the migrated tests work there.
On (2), every migrated test works.
In the following sections, I will provide descriptions of the prototypes, links to the API, migrated tests, and the output from running the tests.
Prototype 1
Prototype (1) is present on this PR.
Uses lazy field initialization for setups and teardowns.
Links
API

Test.build
Suite_Builder.group
Group_Builder.specify
Suite.run_with_filter

Takes optional group_filter and spec_filter parameters to filter only specific tests to run.

Migrated tests

test/Table_Tests/src/Database/SQLite_Spec_New.enso.
test/Tests/src/Data/Bool_Spec_New.enso.
test/Table_Tests/src/Database/Common/Default_Ordering_Spec_New.enso.
test/Table_Tests/src/Database/Common/Common_Spec_New.enso.

How to use the API
The basic test collection works as in the Bench collection API (introduced in #7324).
The basic usage can be seen in Bool_Spec_New.enso.
An example of how a setup via lazy atom field can be done is in SQLite_Spec_New.enso:124.
Output
I am including the whole output from running all SQLite tests.
Note that they do not work so far, because I was not able to design the setups correctly, as can be seen in the output mentioning table creation and deletion.
> env JAVA_OPTS= -ea /home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/bin/enso --no-ir-caches --in-project test/Table_Tests --run test/Table_Tests/src/Database/SQLite_Spec_New.enso
[WARN] [2024-01-12T18:34:12+01:00] [org.enso.librarymanager.local.DefaultLocalLibraryProvider] Local library search path [***/libraries] does not exist.
==============
Test Suite:
  Group '[SQLite File] Table.default_ordering':
    will return Nothing if no primary key is defined
    will return the key for a table with a primary key
    will return Nothing for composite tables (join, aggregate)
    will return the ordering determined by order_by
  Group '[SQLite File] Basic Table Access':
    should allow to materialize tables and columns into local memory
    should allow to materialize columns directly into a Vector
    should handle bigger result sets
    should not allow to set a column coming from another table
  Group '[SQLite File] Connection.query':
    should allow to access a Table by name
    should allow to access a Table by an SQL query
    should allow to access a Table by an SQL query
    should use labels for column names
    should allow a shorthand trying to deduce if the query is a table name or an SQL query
    should report an error depending on input SQL_Query type
    should not allow interpolations in raw user-built queries
    should make a best-effort attempt at returning a reasonable error for the short-hand
    will fail if the table is modified and a column gets removed
    will not fail if the table is modified and a column gets added
  Group '[SQLite File] Masking Tables':
    should allow to select rows from a table or column based on an expression
  Group '[SQLite File] Missing Values':
    fill_nothing should replace nulls
    should correctly be counted
  Group '[SQLite File] Sorting':
    should allow sorting by a single column name
    should allow sorting by multiple column names
    should allow sorting with specific by-column rules
    should correctly reorder all kinds of columns and leave the original columns untouched
    should sort columns with specified ordering and missing placement
  Group '[SQLite File] Aggregation':
    should allow counting group sizes and elements
    should allow simple arithmetic aggregations
  Group '[SQLite File] Table.filter':
    report error when trying to filter by a custom predicate
  Group '[SQLite In-Memory] Table.default_ordering':
    will return Nothing if no primary key is defined
    will return the key for a table with a primary key
    will return Nothing for composite tables (join, aggregate)
    will return the ordering determined by order_by
  Group '[SQLite In-Memory] Basic Table Access':
    should allow to materialize tables and columns into local memory
    should allow to materialize columns directly into a Vector
    should handle bigger result sets
    should not allow to set a column coming from another table
  Group '[SQLite In-Memory] Connection.query':
    should allow to access a Table by name
    should allow to access a Table by an SQL query
    should allow to access a Table by an SQL query
    should use labels for column names
    should allow a shorthand trying to deduce if the query is a table name or an SQL query
    should report an error depending on input SQL_Query type
    should not allow interpolations in raw user-built queries
    should make a best-effort attempt at returning a reasonable error for the short-hand
    will fail if the table is modified and a column gets removed
    will not fail if the table is modified and a column gets added
  Group '[SQLite In-Memory] Masking Tables':
    should allow to select rows from a table or column based on an expression
  Group '[SQLite In-Memory] Missing Values':
    fill_nothing should replace nulls
    should correctly be counted
  Group '[SQLite In-Memory] Sorting':
    should allow sorting by a single column name
    should allow sorting by multiple column names
    should allow sorting with specific by-column rules
    should correctly reorder all kinds of columns and leave the original columns untouched
    should sort columns with specified ordering and missing placement
  Group '[SQLite In-Memory] Aggregation':
    should allow counting group sizes and elements
    should allow simple arithmetic aggregations
  Group '[SQLite In-Memory] Table.filter':
    report error when trying to filter by a custom predicate
  Group 'SQLite_Format should allow connecting to SQLite files':
    should recognise a SQLite database file
    should not duplicate warnings
==============
Running tests in group '[SQLite File] Table.default_ordering'...
  Running spec 'will return Nothing if no primary key is defined'...
    SQLite_Spec_New.File_Connection.create_file
  Finished spec 'will return Nothing if no primary key is defined'.
  Running spec 'will return the key for a table with a primary key'...
  Finished spec 'will return the key for a table with a primary key'.
  Running spec 'will return Nothing for composite tables (join, aggregate)'...
  Finished spec 'will return Nothing for composite tables (join, aggregate)'.
  Running spec 'will return the ordering determined by order_by'...
  Finished spec 'will return the ordering determined by order_by'.
    SQLite_Spec_New.File_Connection.teardown
[SQLite File] Table.default_ordering: [4/4, 2248ms]
    - will return Nothing if no primary key is defined [1440ms]
    - will return the key for a table with a primary key [582ms]
    - will return Nothing for composite tables (join, aggregate) [204ms]
    - will return the ordering determined by order_by [21ms]
Running tests in group '[SQLite File] Basic Table Access'...
  Running spec 'should allow to materialize tables and columns into local memory'...
      upload: Created table with name T1-412e7c1c-696e-456c-b226-8a8e4988fadd
      upload: Created table with name T1-2093fe35-21e3-4e1a-a499-0fd3f9f82455
  Finished spec 'should allow to materialize tables and columns into local memory'.
  Running spec 'should allow to materialize columns directly into a Vector'...
      upload: Created table with name T1-f5dfdc61-b849-4d57-bccf-31a80cc83b3b
  Finished spec 'should allow to materialize columns directly into a Vector'.
  Running spec 'should handle bigger result sets'...
      upload: Created table with name Big-1d87cb52-6715-4d08-9d5d-32d463f9839b
  Finished spec 'should handle bigger result sets'.
  Running spec 'should not allow to set a column coming from another table'...
      upload: Created table with name T1-2255cdd0-8399-470c-bc9b-878dcd218485
      upload: Created table with name T2-f96f7e3e-f7fc-428a-a9a5-d910a6f58c02
  Finished spec 'should not allow to set a column coming from another table'.
    Common_Spec_New.Basic_Data.teardown
      upload: Created table with name T1-9b8bc49f-93bb-4ff2-ae57-47401040499c
      drop_table: Dropping table with name T1-9b8bc49f-93bb-4ff2-ae57-47401040499c
      upload: Created table with name T2-23ec20e4-9c74-4a35-9d91-504c4cc7ff4f
      drop_table: Dropping table with name T2-23ec20e4-9c74-4a35-9d91-504c4cc7ff4f
      upload: Created table with name T4-8f1a0b7a-cd04-4a87-83aa-6f16212cf4c4
      drop_table: Dropping table with name T4-8f1a0b7a-cd04-4a87-83aa-6f16212cf4c4
      upload: Created table with name Big-053e7379-79a6-46f6-a7e6-63ebad98551e
      drop_table: Dropping table with name Big-053e7379-79a6-46f6-a7e6-63ebad98551e
    SQLite_Spec_New.File_Connection.teardown
[SQLite File] Basic Table Access: [4/4, 1281ms]
    - should allow to materialize tables and columns into local memory [218ms]
    - should allow to materialize columns directly into a Vector [76ms]
    - should handle bigger result sets [837ms]
    - should not allow to set a column coming from another table [148ms]
Running tests in group '[SQLite File] Connection.query'...
  Running spec 'should allow to access a Table by name'...
      upload: Created table with name T1-d6438bba-2bcc-43fd-9a8d-4db74c66feb1
      Querying table with name T1-d6438bba-2bcc-43fd-9a8d-4db74c66feb1
      upload: Created table with name T1-637f629c-255d-4277-895e-d15bc61e41a9
  Finished spec 'should allow to access a Table by name'.
  Running spec 'should allow to access a Table by an SQL query'...
      upload: Created table with name T1-1aba039b-8b1c-49a6-af54-fe00d8ecc925
  Finished spec 'should allow to access a Table by an SQL query'.
  Running spec 'should allow to access a Table by an SQL query'...
      upload: Created table with name T1-915e0cb3-b588-48d0-b38f-7beccb029e9a
  Finished spec 'should allow to access a Table by an SQL query'.
  Running spec 'should use labels for column names'...
      upload: Created table with name T1-7bdbf2a9-77b5-4cad-8404-cc1fa747f381
  Finished spec 'should use labels for column names'.
  Running spec 'should allow a shorthand trying to deduce if the query is a table name or an SQL query'...
      upload: Created table with name T1-f9513a3f-bb68-4d86-b0bf-f2006fe37df3
      upload: Created table with name T1-a8650bed-c9c3-4ba1-ba0f-c2c234629712
  Finished spec 'should allow a shorthand trying to deduce if the query is a table name or an SQL query'.
  Running spec 'should report an error depending on input SQL_Query type'...
  Finished spec 'should report an error depending on input SQL_Query type'.
  Running spec 'should not allow interpolations in raw user-built queries'...
  Finished spec 'should not allow interpolations in raw user-built queries'.
  Running spec 'should make a best-effort attempt at returning a reasonable error for the short-hand'...
  Finished spec 'should make a best-effort attempt at returning a reasonable error for the short-hand'.
  Running spec 'will fail if the table is modified and a column gets removed'...
  Finished spec 'will fail if the table is modified and a column gets removed'.
  Running spec 'will not fail if the table is modified and a column gets added'...
  Finished spec 'will not fail if the table is modified and a column gets added'.
    Common_Spec_New.Basic_Data.teardown
      upload: Created table with name T1-a8311dc7-7342-4c68-b90f-0934a7a23f91
      drop_table: Dropping table with name T1-a8311dc7-7342-4c68-b90f-0934a7a23f91
      upload: Created table with name T2-552d37b6-9165-449c-a619-0884389517c0
      drop_table: Dropping table with name T2-552d37b6-9165-449c-a619-0884389517c0
      upload: Created table with name T4-9064f666-7786-4e9c-84cd-9fcd959e1b55
      drop_table: Dropping table with name T4-9064f666-7786-4e9c-84cd-9fcd959e1b55
      upload: Created table with name Big-9146b5db-204a-4dfc-bff3-c7b47dea7904
      drop_table: Dropping table with name Big-9146b5db-204a-4dfc-bff3-c7b47dea7904
    SQLite_Spec_New.File_Connection.teardown
[FAILED] [SQLite File] Connection.query: [3/10, 812ms]
    - [FAILED] should allow to access a Table by name [189ms]
        Reason: An unexpected dataflow error ((Table_Not_Found.Error 'T1-d6438bba-2bcc-43fd-9a8d-4db74c66feb1' There was an SQL error: [SQLITE_ERROR] SQL error or missing database (no such table: T1-d6438bba-2bcc-43fd-9a8d-4db74c66feb1). [Query was: SELECT * FROM "T1-d6438bba-2bcc-43fd-9a8d-4db74c66feb1" AS "T1-d6438bba-2bcc-4 …] False '')) has been matched (at /home/pavel/dev/enso/test/Table_Tests/src/Database/Common/Common_Spec_New.enso:194:13-48).
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:479:9-98)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Error.enso:138:25-43)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Error.enso:137-142)
        at <enso> Error.catch_primitive(Internal)
        at <enso> Error.catch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Error.enso:136-142)
        at <enso> Connection.make_table_for_name(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:478-479)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:244:25-59)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:243-246)
        at <enso> Connection.query(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:215-246)
        at <enso> SQLite_Connection.query(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/SQLite/SQLite_Connection.enso:137:33-65)
        at <enso> <anonymous><arg-1>(/home/pavel/dev/enso/test/Table_Tests/src/Database/Common/Common_Spec_New.enso:193:19-67)
        at <enso> null(Internal)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Group.enso:22:53-56)
        at <enso> Helpers.execute_spec_code<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:60:18-34)
        at <enso> Panic.catch(Internal)
        at <enso> Panic.type.recover(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Panic.enso:185-190)
        at <enso> Helpers.execute_spec_code(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:59-63)
        at <enso> case_branch<arg-3>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:51:37-63)
        at <enso> case_branch<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:51:13-64)
        at <enso> Runtime.no_inline(Internal)
        at <enso> Duration.type.time_execution(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Time/Duration.enso:127:18-43)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:50-51)
        at <enso> Helpers.run_spec(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:49-52)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:36:24-36)
        at <enso> Function.<<(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Function.enso:46:26-38)
        at <enso> wrapped_function(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Internal/Array_Like_Helpers.enso:73:18-27)
        at <enso> Array_Like_Helpers.vector_from_function(Internal)
        at <enso> Array_Like_Helpers.vector_from_function(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Internal/Array_Like_Helpers.enso:98:15-68)
        at <enso> Vector.map(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Vector.enso:614:9-93)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:34-40)
        at <enso> Helpers.run_specs_from_group(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:30-43)
        at <enso> Helpers.run_group_with_filter(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:20:5-45)
        at <enso> <anonymous><arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Suite.enso:61:27-78)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Suite.enso:60-62)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Vector.enso:723:13-26)
        at <enso> go<arg-2>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso:243:21-36)
        at <enso> go(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso:242-244)
    - [FAILED] should allow to access a Table by an SQL query [72ms]
        Reason: An unexpected dataflow error (There was an SQL error: [SQLITE_ERROR] SQL error or missing database (no such table: T1-1aba039b-8b1c-49a6-af54-fe00d8ecc925). [Query was: SELECT a, b FROM "T1-1aba039b-8b1c-49a6-af54-fe00d8ecc925" WHERE a >= 3]) has been matched (at /home/pavel/dev/enso/test/Table_Tests/src/Database/Common/Common_Spec_New.enso:200:13-53).
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:294:20-66)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:292-294)
        at <enso> Panic.catch(Internal)
        at <enso> JDBC_Connection.handle_sql_errors(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:291-294)
        at <enso> go(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:122-124)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:127:25-35)
        at <enso> JDBC_Connection.with_prepared_statement<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:126-130)
        at <enso> callback<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:55:21-26)
        at <enso> Runtime.with_enabled_context(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Runtime.enso:217:5-80)
        at <enso> Context.with_enabled(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Runtime.enso:191:9-78)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:48:29-55)
        at <enso> saved_setting(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:47-49)
        at <enso> callback<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:54-55)
        at <enso> Runtime.with_enabled_context(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Runtime.enso:217:5-80)
        at <enso> Context.with_enabled(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Runtime.enso:191:9-78)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:48:29-55)
        at <enso> saved_setting(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:47-49)
        at <enso> callback(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:53-55)
        at <java> PolyglotFunction<class org.enso.interpreter.runtime.callable.function.Function, class org.graalvm.polyglot.Value>.apply(Internal)
        at <Unknown Location> related to com.oracle.truffle.host.HostObject.doInvoke
        at <enso> JDBC_Connection.synchronized(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:56:9-66)
        at <enso> JDBC_Connection.with_prepared_statement(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:107-130)
        at <enso> JDBC_Connection.ensure_query_has_no_holes(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:176-184)
        at <enso> case_branch<arg-0>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:226:13-66)
        at <enso> case_branch<arg-0>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:226:13-81)
        at <enso> case_branch<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:226-241)
        at <enso> Any.if_not_error(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Any.enso:417:32-36)
        at <enso> case_branch<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:225-241)
        at <enso> Panic.catch(Internal)
        at <enso> JDBC_Connection.handle_sql_errors(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:291-294)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:225-241)
        at <enso> Connection.query(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:215-246)
        at <enso> SQLite_Connection.query(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/SQLite/SQLite_Connection.enso:137:33-65)
        at <enso> <anonymous><arg-1>(/home/pavel/dev/enso/test/Table_Tests/src/Database/Common/Common_Spec_New.enso:198:18-107)
        at <enso> null(Internal)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Group.enso:22:53-56)
        at <enso> Helpers.execute_spec_code<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:60:18-34)
        at <enso> Panic.catch(Internal)
        at <enso> Panic.type.recover(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Panic.enso:185-190)
        at <enso> Helpers.execute_spec_code(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:59-63)
        at <enso> case_branch<arg-3>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:51:37-63)
        at <enso> case_branch<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:51:13-64)
        at <enso> Runtime.no_inline(Internal)
        at <enso> Duration.type.time_execution(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Time/Duration.enso:127:18-43)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:50-51)
        at <enso> Helpers.run_spec(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:49-52)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:36:24-36)
        at <enso> Function.<<(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Function.enso:46:26-38)
        at <enso> wrapped_function(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Internal/Array_Like_Helpers.enso:73:18-27)
        at <enso> Array_Like_Helpers.vector_from_function(Internal)
        at <enso> Array_Like_Helpers.vector_from_function(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Internal/Array_Like_Helpers.enso:98:15-68)
        at <enso> Vector.map(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Vector.enso:614:9-93)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:34-40)
        at <enso> Helpers.run_specs_from_group(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:30-43)
        at <enso> Helpers.run_group_with_filter(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:20:5-45)
        at <enso> <anonymous><arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Suite.enso:61:27-78)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Suite.enso:60-62)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Vector.enso:723:13-26)
        at <enso> go<arg-2>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso:243:21-36)
        at <enso> go(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso:242-244)
    - [FAILED] should allow to access a Table by an SQL query [74ms]
        Reason: An unexpected dataflow error (There was an SQL error: [SQLITE_ERROR] SQL error or missing database (no such table: T1-915e0cb3-b588-48d0-b38f-7beccb029e9a). [Query was: SELECT a, b FROM "T1-915e0cb3-b588-48d0-b38f-7beccb029e9a" WHERE a >= 3]) has been matched (at /home/pavel/dev/enso/test/Table_Tests/src/Database/Common/Common_Spec_New.enso:209:13-53).
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:294:20-66)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:292-294)
        at <enso> Panic.catch(Internal)
        at <enso> JDBC_Connection.handle_sql_errors(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:291-294)
        at <enso> go(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:122-124)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:127:25-35)
        at <enso> JDBC_Connection.with_prepared_statement<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:126-130)
        at <enso> callback<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:55:21-26)
        at <enso> Runtime.with_enabled_context(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Runtime.enso:217:5-80)
        at <enso> Context.with_enabled(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Runtime.enso:191:9-78)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:48:29-55)
        at <enso> saved_setting(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:47-49)
        at <enso> callback<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:54-55)
        at <enso> Runtime.with_enabled_context(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Runtime.enso:217:5-80)
        at <enso> Context.with_enabled(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Runtime.enso:191:9-78)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:48:29-55)
        at <enso> saved_setting(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:47-49)
        at <enso> callback(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:53-55)
        at <java> PolyglotFunction<class org.enso.interpreter.runtime.callable.function.Function, class org.graalvm.polyglot.Value>.apply(Internal)
        at <Unknown Location> related to com.oracle.truffle.host.HostObject.doInvoke
        at <enso> JDBC_Connection.synchronized(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:56:9-66)
        at <enso> JDBC_Connection.with_prepared_statement(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:107-130)
        at <enso> JDBC_Connection.ensure_query_has_no_holes(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:176-184)
        at <enso> case_branch<arg-0>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:226:13-66)
        at <enso> case_branch<arg-0>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:226:13-81)
        at <enso> case_branch<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:226-241)
        at <enso> Any.if_not_error(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Any.enso:417:32-36)
        at <enso> case_branch<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:225-241)
        at <enso> Panic.catch(Internal)
        at <enso> JDBC_Connection.handle_sql_errors(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:291-294)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:225-241)
        at <enso> Connection.query(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:215-246)
        at <enso> SQLite_Connection.query(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/SQLite/SQLite_Connection.enso:137:33-65)
        at <enso> <anonymous><arg-1>(/home/pavel/dev/enso/test/Table_Tests/src/Database/Common/Common_Spec_New.enso:207:18-107)
        at <enso> null(Internal)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Group.enso:22:53-56)
        at <enso> Helpers.execute_spec_code<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:60:18-34)
        at <enso> Panic.catch(Internal)
        at <enso> Panic.type.recover(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Panic.enso:185-190)
        at <enso> Helpers.execute_spec_code(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:59-63)
        at <enso> case_branch<arg-3>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:51:37-63)
        at <enso> case_branch<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:51:13-64)
        at <enso> Runtime.no_inline(Internal)
        at <enso> Duration.type.time_execution(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Time/Duration.enso:127:18-43)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:50-51)
        at <enso> Helpers.run_spec(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:49-52)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:36:24-36)
        at <enso> Function.<<(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Function.enso:46:26-38)
        at <enso> wrapped_function(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Internal/Array_Like_Helpers.enso:73:18-27)
        at <enso> Array_Like_Helpers.vector_from_function(Internal)
        at <enso> Array_Like_Helpers.vector_from_function(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Internal/Array_Like_Helpers.enso:98:15-68)
        at <enso> Vector.map(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Vector.enso:614:9-93)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:34-40)
        at <enso> Helpers.run_specs_from_group(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:30-43)
        at <enso> Helpers.run_group_with_filter(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:20:5-45)
        at <enso> <anonymous><arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Suite.enso:61:27-78)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Suite.enso:60-62)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Vector.enso:723:13-26)
        at <enso> go<arg-2>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso:243:21-36)
        at <enso> go(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso:242-244)
    - [FAILED] should use labels for column names [64ms]
        Reason: An unexpected dataflow error (There was an SQL error: [SQLITE_ERROR] SQL error or missing database (no such table: T1-7bdbf2a9-77b5-4cad-8404-cc1fa747f381). [Query was: SELECT a AS c, b FROM "T1-7bdbf2a9-77b5-4cad-8404-cc1fa747f381" WHERE a >= 3]) has been matched (at /home/pavel/dev/enso/test/Table_Tests/src/Database/Common/Common_Spec_New.enso:222:13-53).
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:294:20-66)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:292-294)
        at <enso> Panic.catch(Internal)
        at <enso> JDBC_Connection.handle_sql_errors(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:291-294)
        at <enso> go(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:122-124)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:127:25-35)
        at <enso> JDBC_Connection.with_prepared_statement<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:126-130)
        at <enso> callback<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:55:21-26)
        at <enso> Runtime.with_enabled_context(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Runtime.enso:217:5-80)
        at <enso> Context.with_enabled(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Runtime.enso:191:9-78)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:48:29-55)
        at <enso> saved_setting(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:47-49)
        at <enso> callback<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:54-55)
        at <enso> Runtime.with_enabled_context(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Runtime.enso:217:5-80)
        at <enso> Context.with_enabled(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Runtime.enso:191:9-78)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:48:29-55)
        at <enso> saved_setting(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:47-49)
        at <enso> callback(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:53-55)
        at <java> PolyglotFunction<class org.enso.interpreter.runtime.callable.function.Function, class org.graalvm.polyglot.Value>.apply(Internal)
        at <Unknown Location> related to com.oracle.truffle.host.HostObject.doInvoke
        at <enso> JDBC_Connection.synchronized(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:56:9-66)
        at <enso> JDBC_Connection.with_prepared_statement(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:107-130)
        at <enso> JDBC_Connection.ensure_query_has_no_holes(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:176-184)
        at <enso> case_branch<arg-0>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:226:13-66)
        at <enso> case_branch<arg-0>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:226:13-81)
        at <enso> case_branch<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:226-241)
        at <enso> Any.if_not_error(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Any.enso:417:32-36)
        at <enso> case_branch<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:225-241)
        at <enso> Panic.catch(Internal)
        at <enso> JDBC_Connection.handle_sql_errors(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/JDBC_Connection.enso:291-294)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:225-241)
        at <enso> Connection.query(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:215-246)
        at <enso> SQLite_Connection.query(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/SQLite/SQLite_Connection.enso:137:33-65)
        at <enso> <anonymous><arg-1>(/home/pavel/dev/enso/test/Table_Tests/src/Database/Common/Common_Spec_New.enso:220:18-112)
        at <enso> null(Internal)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Group.enso:22:53-56)
        at <enso> Helpers.execute_spec_code<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:60:18-34)
        at <enso> Panic.catch(Internal)
        at <enso> Panic.type.recover(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Panic.enso:185-190)
        at <enso> Helpers.execute_spec_code(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:59-63)
        at <enso> case_branch<arg-3>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:51:37-63)
        at <enso> case_branch<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:51:13-64)
        at <enso> Runtime.no_inline(Internal)
        at <enso> Duration.type.time_execution(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Time/Duration.enso:127:18-43)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:50-51)
        at <enso> Helpers.run_spec(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:49-52)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:36:24-36)
        at <enso> Function.<<(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Function.enso:46:26-38)
        at <enso> wrapped_function(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Internal/Array_Like_Helpers.enso:73:18-27)
        at <enso> Array_Like_Helpers.vector_from_function(Internal)
        at <enso> Array_Like_Helpers.vector_from_function(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Internal/Array_Like_Helpers.enso:98:15-68)
        at <enso> Vector.map(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Vector.enso:614:9-93)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:34-40)
        at <enso> Helpers.run_specs_from_group(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:30-43)
        at <enso> Helpers.run_group_with_filter(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:20:5-45)
        at <enso> <anonymous><arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Suite.enso:61:27-78)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Suite.enso:60-62)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Vector.enso:723:13-26)
        at <enso> go<arg-2>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso:243:21-36)
        at <enso> go(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso:242-244)
    - [FAILED] should allow a shorthand trying to deduce if the query is a table name or an SQL query [142ms]
        Reason: An unexpected dataflow error ((Table_Not_Found.Error 'T1-f9513a3f-bb68-4d86-b0bf-f2006fe37df3' There was an SQL error: [SQLITE_ERROR] SQL error or missing database (near "T1": syntax error). [Query was: T1-f9513a3f-bb68-4d86-b0bf-f2006fe37df3] True '')) has been matched (at /home/pavel/dev/enso/test/Table_Tests/src/Database/Common/Common_Spec_New.enso:230:13-47).
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:224:25-114)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:221-224)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Error.enso:138:25-43)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Error.enso:137-142)
        at <enso> Error.catch_primitive(Internal)
        at <enso> Error.catch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Error.enso:136-142)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:220-224)
        at <enso> Connection.query(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Connection/Connection.enso:215-246)
        at <enso> SQLite_Connection.query(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Internal/SQLite/SQLite_Connection.enso:137:33-65)
        at <enso> <anonymous><arg-1>(/home/pavel/dev/enso/test/Table_Tests/src/Database/Common/Common_Spec_New.enso:229:18-43)
        at <enso> null(Internal)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Group.enso:22:53-56)
        at <enso> Helpers.execute_spec_code<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:60:18-34)
        at <enso> Panic.catch(Internal)
        at <enso> Panic.type.recover(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Panic.enso:185-190)
        at <enso> Helpers.execute_spec_code(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:59-63)
        at <enso> case_branch<arg-3>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:51:37-63)
        at <enso> case_branch<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:51:13-64)
        at <enso> Runtime.no_inline(Internal)
        at <enso> Duration.type.time_execution(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Time/Duration.enso:127:18-43)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:50-51)
        at <enso> Helpers.run_spec(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:49-52)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:36:24-36)
        at <enso> Function.<<(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Function.enso:46:26-38)
        at <enso> wrapped_function(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Internal/Array_Like_Helpers.enso:73:18-27)
        at <enso> Array_Like_Helpers.vector_from_function(Internal)
        at <enso> Array_Like_Helpers.vector_from_function(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Internal/Array_Like_Helpers.enso:98:15-68)
        at <enso> Vector.map(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Vector.enso:614:9-93)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:34-40)
        at <enso> Helpers.run_specs_from_group(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:30-43)
        at <enso> Helpers.run_group_with_filter(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:20:5-45)
        at <enso> <anonymous><arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Suite.enso:61:27-78)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Suite.enso:60-62)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Vector.enso:723:13-26)
        at <enso> go<arg-2>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso:243:21-36)
        at <enso> go(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso:242-244)
    - should report an error depending on input SQL_Query type [33ms]
    - should not allow interpolations in raw user-built queries [11ms]
    - should make a best-effort attempt at returning a reasonable error for the short-hand [75ms]
    - [FAILED] will fail if the table is modified and a column gets removed [88ms]
        Reason: Expected the result to not be an error, but a dataflow error has been matched: The name removing-column-44e93e69-59a3-41c8-af3c-121c189fca77 was treated as a query, but the query failed with the following error: There was an SQL error: [SQLITE_ERROR] SQL error or missing database (near "removing": syntax error). [Query was: removing-column-44e93e69-59a3-41c8-af3c-121c189fca77]; if you want to force to use that as a table name, wrap it in `SQL_Query.Table_Name`. (at /home/pavel/dev/enso/test/Table_Tests/src/Database/Common/Common_Spec_New.enso:276:13-42).
    - [FAILED] will not fail if the table is modified and a column gets added [59ms]
        Reason: Expected the result to not be an error, but a dataflow error has been matched: The name adding-column-4a3ea223-6bd0-416a-8c65-09ad08195b1e was treated as a query, but the query failed with the following error: There was an SQL error: [SQLITE_ERROR] SQL error or missing database (near "adding": syntax error). [Query was: adding-column-4a3ea223-6bd0-416a-8c65-09ad08195b1e]; if you want to force to use that as a table name, wrap it in `SQL_Query.Table_Name`. (at /home/pavel/dev/enso/test/Table_Tests/src/Database/Common/Common_Spec_New.enso:298:13-42).
Running tests in group '[SQLite File] Masking Tables'...
  Running spec 'should allow to select rows from a table or column based on an expression'...
      upload: Created table with name T1-9424592c-a939-4a93-a616-36e8dbd00981
      upload: Created table with name T1-5d37b118-3b8d-4f36-89a9-f899645cba65
  Finished spec 'should allow to select rows from a table or column based on an expression'.
    Common_Spec_New.Basic_Data.teardown
      upload: Created table with name T1-ea51b173-7a09-4385-b7ce-34ec4d74c0da
      drop_table: Dropping table with name T1-ea51b173-7a09-4385-b7ce-34ec4d74c0da
      upload: Created table with name T2-023bc4c6-d507-4dfd-9e75-4789c968c7fc
      drop_table: Dropping table with name T2-023bc4c6-d507-4dfd-9e75-4789c968c7fc
      upload: Created table with name T4-285e9d2d-a374-4f45-b3ad-4bf64f6398c0
      drop_table: Dropping table with name T4-285e9d2d-a374-4f45-b3ad-4bf64f6398c0
      upload: Created table with name Big-88ead7e7-4bbd-4255-b0d7-fd70c892d36c
      drop_table: Dropping table with name Big-88ead7e7-4bbd-4255-b0d7-fd70c892d36c
    SQLite_Spec_New.File_Connection.teardown
[FAILED] [SQLite File] Masking Tables: [0/1, 125ms]
    - [FAILED] should allow to select rows from a table or column based on an expression [125ms]
        Reason: An unexpected dataflow error (Column [[a] == 1] == True comes from a different context.) has been matched (at /home/pavel/dev/enso/test/Table_Tests/src/Database/Common/Common_Spec_New.enso:328:13-52).
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Data/Table.enso:578:20-83)
        at <enso> mask(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Data/Table.enso:576-582)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Data/Table.enso:586:20-72)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Data/Table.enso:583-591)
        at <enso> Table.filter(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Database/0.0.0-dev/src/Data/Table.enso:574-594)
        at <enso> <anonymous><arg-1>(/home/pavel/dev/enso/test/Table_Tests/src/Database/Common/Common_Spec_New.enso:326:18-53)
        at <enso> null(Internal)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Group.enso:22:53-56)
        at <enso> Helpers.execute_spec_code<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:60:18-34)
        at <enso> Panic.catch(Internal)
        at <enso> Panic.type.recover(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Panic.enso:185-190)
        at <enso> Helpers.execute_spec_code(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:59-63)
        at <enso> case_branch<arg-3>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:51:37-63)
        at <enso> case_branch<arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:51:13-64)
        at <enso> Runtime.no_inline(Internal)
        at <enso> Duration.type.time_execution(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Time/Duration.enso:127:18-43)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:50-51)
        at <enso> Helpers.run_spec(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:49-52)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:36:24-36)
        at <enso> Function.<<(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Function.enso:46:26-38)
        at <enso> wrapped_function(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Internal/Array_Like_Helpers.enso:73:18-27)
        at <enso> Array_Like_Helpers.vector_from_function(Internal)
        at <enso> Array_Like_Helpers.vector_from_function(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Internal/Array_Like_Helpers.enso:98:15-68)
        at <enso> Vector.map(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Vector.enso:614:9-93)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:34-40)
        at <enso> Helpers.run_specs_from_group(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:30-43)
        at <enso> Helpers.run_group_with_filter(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:20:5-45)
        at <enso> <anonymous><arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Suite.enso:61:27-78)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Suite.enso:60-62)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Vector.enso:723:13-26)
        at <enso> go<arg-2>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso:243:21-36)
        at <enso> go(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso:242-244)
Running tests in group '[SQLite File] Missing Values'...
  Running spec 'fill_nothing should replace nulls'...
      upload: Created table with name T4-ad685ecc-5065-42ef-9054-f5425346f70e
      upload: Created table with name T4-c0128f8e-6d28-46bc-8ff4-dc1532a54b19
      upload: Created table with name T4-635b8f5f-020f-42aa-83d5-1efdda186994
  Finished spec 'fill_nothing should replace nulls'.
  Running spec 'should correctly be counted'...
      upload: Created table with name T4-6418c33d-ddba-4922-b9c4-3f0620b845eb
      upload: Created table with name T4-250c7151-e0a8-4578-89c7-9fcb352a8bc3
  Finished spec 'should correctly be counted'.
    Common_Spec_New.Basic_Data.teardown
      upload: Created table with name T1-1297889f-6887-4bec-b4d4-806c1506fdaa
      drop_table: Dropping table with name T1-1297889f-6887-4bec-b4d4-806c1506fdaa
      upload: Created table with name T2-ac631f63-92ba-4d1a-86d7-60b64215a6ad
      drop_table: Dropping table with name T2-ac631f63-92ba-4d1a-86d7-60b64215a6ad
      upload: Created table with name T4-3073b80a-6639-469e-8622-bc6c5b6a1359
      drop_table: Dropping table with name T4-3073b80a-6639-469e-8622-bc6c5b6a1359
      upload: Created table with name Big-d1d13b0a-2ddc-450b-8a94-7a5fb537a443
      drop_table: Dropping table with name Big-d1d13b0a-2ddc-450b-8a94-7a5fb537a443
    SQLite_Spec_New.File_Connection.teardown
[SQLite File] Missing Values: [2/2, 395ms]
    - fill_nothing should replace nulls [231ms]
    - should correctly be counted [164ms]
Running tests in group '[SQLite File] Sorting'...
  Running spec 'should allow sorting by a single column name'...
      upload: Created table with name clothes-1b62d653-ce0d-4aa7-b85f-d4c8bd30122c
      upload: Created table with name clothes-5fa34df2-9751-42a7-8951-d92f9fd92925
  Finished spec 'should allow sorting by a single column name'.
  Running spec 'should allow sorting by multiple column names'...
      upload: Created table with name clothes-cc3ff7c1-497c-4abf-9b74-82686fa749a0
      upload: Created table with name clothes-23ac6fb8-af06-49df-aebd-6472469b6431
  Finished spec 'should allow sorting by multiple column names'.
  Running spec 'should allow sorting with specific by-column rules'...
      upload: Created table with name clothes-b8e3cb60-bb35-4a26-b6f8-bf2527d83c39
  Finished spec 'should allow sorting with specific by-column rules'.
  Running spec 'should correctly reorder all kinds of columns and leave the original columns untouched'...
  Finished spec 'should correctly reorder all kinds of columns and leave the original columns untouched'.
  Running spec 'should sort columns with specified ordering and missing placement'...
      upload: Created table with name clothes-5a11c1bb-12a6-4e56-96d7-16aec0c965ec
  Finished spec 'should sort columns with specified ordering and missing placement'.
    Common_Spec_New.Sorting_Data.teardown
      upload: Created table with name clothes-4b93a6a8-4ae3-4c21-ac68-0e5aad389105
      drop_table: Dropping table with name clothes-4b93a6a8-4ae3-4c21-ac68-0e5aad389105
Execution finished with an error: Method `name` of type Function could not be found.
        at <enso> Sorting_Data.teardown<arg-2>(/home/pavel/dev/enso/test/Table_Tests/src/Database/Common/Common_Spec_New.enso:95:36-47)
        at <enso> Sorting_Data.teardown(/home/pavel/dev/enso/test/Table_Tests/src/Database/Common/Common_Spec_New.enso:95:9-47)
        at <enso> <anonymous><arg-1>(/home/pavel/dev/enso/test/Table_Tests/src/Database/Common/Common_Spec_New.enso:359:13-25)
        at <enso> null(Internal)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Group.enso:31:37-40)
        at <enso> case_branch(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:42:13-34)
        at <enso> Helpers.run_specs_from_group(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:30-43)
        at <enso> Helpers.run_group_with_filter(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Helpers.enso:20:5-45)
        at <enso> <anonymous><arg-1>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Suite.enso:61:27-78)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Test_New/0.0.0-dev/src/Suite.enso:60-62)
        at <enso> <anonymous>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Vector.enso:723:13-26)
        at <enso> go<arg-2>(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso:243:21-36)
        at <enso> go(/home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso:242-244)

Prototype 2
Links

Branch wip/akirathan/7566-stdlib-test-builder-api-2.

API

Test.build.

The same as in (1).

Suite_Builder.group.

Unlike (1), has optional setup and teardown parameters.

Group_Builder.specify.

Same as in (1).

Group_Builder.specify_with_args.

Not in (1).

Suite.run_with_filter.

Same as in (1).

Migrated tests

test/Tests/src/Data/Bool_Spec_New.enso
test/Table_Tests/src/Database/SQLite_Spec_New.enso
test/Table_Tests/src/Database/Common/Default_Ordering_Spec_New.enso
test/Table_Tests/src/Database/Common/Common_Spec_New.enso

How to use the API
The basic test collection works exactly the same as in (1) and Bench collection API.
The basic usage can be seen in Bool_Spec_New.enso.
Setup method is passed as a parameter to the Group_Builder.group method (See Suite.enso).
It is invoked before the very first test in the group (See Helpers.enso).
specify_with_args gets the return value from the setup method in its arguments (See SQLite_Spec_New.enso)
Output
The, rather verbose, output from running all the tests is:
> env JAVA_OPTS=-ea /home/pavel/dev/enso/built-distribution/enso-engine-0.0.0-dev-linux-amd64/enso-0.0.0-dev/bin/enso --no-ir-caches --in-project test/Table_Tests --run test/Table_Tests/src/Database/SQLite_Spec_New.enso
[WARN] [2024-01-12T17:39:41+01:00] [org.enso.librarymanager.local.DefaultLocalLibraryProvider] Local library search path [***/libraries] does not exist.
======
Test Suite:
  Group '[SQLite File] Table.default_ordering':
    will return Nothing if no primary key is defined
    will return the key for a table with a primary key
    will return Nothing for composite tables (join, aggregate)
    will return the ordering determined by order_by
  Group '[SQLite File] Basic Table Access':
    should allow to materialize tables and columns into local memory
    should allow to materialize columns directly into a Vector
    should handle bigger result sets
    should not allow to set a column coming from another table
  Group '[SQLite File] Connection.query':
    should allow to access a Table by name
    should allow to access a Table by an SQL query
    should allow to access a Table by an SQL query
    should use labels for column names
    should allow a shorthand trying to deduce if the query is a table name or an SQL query
    should report an error depending on input SQL_Query type
    should not allow interpolations in raw user-built queries
    should make a best-effort attempt at returning a reasonable error for the short-hand
    will fail if the table is modified and a column gets removed
    will not fail if the table is modified and a column gets added
  Group '[SQLite File] Masking Tables':
    should allow to select rows from a table or column based on an expression
  Group '[SQLite File] Missing Values':
    fill_nothing should replace nulls
    should correctly be counted
  Group '[SQLite File] Sorting':
    should allow sorting by a single column name
    should allow sorting by multiple column names
    should allow sorting with specific by-column rules
    should correctly reorder all kinds of columns and leave the original columns untouched
    should sort columns with specified ordering and missing placement
  Group '[SQLite File] Aggregation':
    should allow counting group sizes and elements
    should allow simple arithmetic aggregations
  Group '[SQLite File] Table.filter':
    report error when trying to filter by a custom predicate
  Group '[SQLite In-Memory] Table.default_ordering':
    will return Nothing if no primary key is defined
    will return the key for a table with a primary key
    will return Nothing for composite tables (join, aggregate)
    will return the ordering determined by order_by
  Group '[SQLite In-Memory] Basic Table Access':
    should allow to materialize tables and columns into local memory
    should allow to materialize columns directly into a Vector
    should handle bigger result sets
    should not allow to set a column coming from another table
  Group '[SQLite In-Memory] Connection.query':
    should allow to access a Table by name
    should allow to access a Table by an SQL query
    should allow to access a Table by an SQL query
    should use labels for column names
    should allow a shorthand trying to deduce if the query is a table name or an SQL query
    should report an error depending on input SQL_Query type
    should not allow interpolations in raw user-built queries
    should make a best-effort attempt at returning a reasonable error for the short-hand
    will fail if the table is modified and a column gets removed
    will not fail if the table is modified and a column gets added
  Group '[SQLite In-Memory] Masking Tables':
    should allow to select rows from a table or column based on an expression
  Group '[SQLite In-Memory] Missing Values':
    fill_nothing should replace nulls
    should correctly be counted
  Group '[SQLite In-Memory] Sorting':
    should allow sorting by a single column name
    should allow sorting by multiple column names
    should allow sorting with specific by-column rules
    should correctly reorder all kinds of columns and leave the original columns untouched
    should sort columns with specified ordering and missing placement
  Group '[SQLite In-Memory] Aggregation':
    should allow counting group sizes and elements
    should allow simple arithmetic aggregations
  Group '[SQLite In-Memory] Table.filter':
    report error when trying to filter by a custom predicate
  Group 'SQLite_Format should allow connecting to SQLite files':
    should recognise a SQLite database file
    should not duplicate warnings
======
Running tests in group '[SQLite File] Table.default_ordering'...
  Default_Ordering_Spec_New.setup
  Running spec 'will return Nothing if no primary key is defined'...
  Finished spec 'will return Nothing if no primary key is defined'.
  Running spec 'will return the key for a table with a primary key'...
  Finished spec 'will return the key for a table with a primary key'.
  Running spec 'will return Nothing for composite tables (join, aggregate)'...
  Finished spec 'will return Nothing for composite tables (join, aggregate)'.
  Running spec 'will return the ordering determined by order_by'...
  Finished spec 'will return the ordering determined by order_by'.
[SQLite File] Table.default_ordering: [4/4, 666ms]
    - will return Nothing if no primary key is defined [96ms]
    - will return the key for a table with a primary key [343ms]
    - will return Nothing for composite tables (join, aggregate) [206ms]
    - will return the ordering determined by order_by [19ms]
Running tests in group '[SQLite File] Basic Table Access'...
  Common_Spec_New.setup_basic_data
    upload: Created table with name T1-34d7a1db-79c7-4d72-95bb-6df90b8d7e43
    upload: Created table with name T2-35c5fd33-9a37-437b-9832-d83ac9f10a7e
    upload: Created table with name aSELECT "A",'B' FROM t;---d4c66cc3-43f5-4ccc-a5a4-55855d66cda1
    upload: Created table with name Big-daf6108b-c81a-46dc-9559-0b5a794c39e9
  Running spec 'should allow to materialize tables and columns into local memory'...
  Finished spec 'should allow to materialize tables and columns into local memory'.
  Running spec 'should allow to materialize columns directly into a Vector'...
  Finished spec 'should allow to materialize columns directly into a Vector'.
  Running spec 'should handle bigger result sets'...
  Finished spec 'should handle bigger result sets'.
  Running spec 'should not allow to set a column coming from another table'...
  Finished spec 'should not allow to set a column coming from another table'.
  Common_Spec_New.teardown_basic_data
    drop_table: Dropping table with name T1-34d7a1db-79c7-4d72-95bb-6df90b8d7e43
    drop_table: Dropping table with name T2-35c5fd33-9a37-437b-9832-d83ac9f10a7e
    drop_table: Dropping table with name aSELECT "A",'B' FROM t;---d4c66cc3-43f5-4ccc-a5a4-55855d66cda1
    drop_table: Dropping table with name Big-daf6108b-c81a-46dc-9559-0b5a794c39e9
[SQLite File] Basic Table Access: [4/4, 235ms]
    - should allow to materialize tables and columns into local memory [48ms]
    - should allow to materialize columns directly into a Vector [8ms]
    - should handle bigger result sets [170ms]
    - should not allow to set a column coming from another table [8ms]
Running tests in group '[SQLite File] Connection.query'...
  Common_Spec_New.setup_basic_data
    upload: Created table with name T1-095df4cb-4386-4078-a9d2-fcaface06e54
    upload: Created table with name T2-4e6aa281-f1e0-446b-a973-63736b2a48dc
    upload: Created table with name aSELECT "A",'B' FROM t;---d48111b1-f802-4b61-badd-9b7d786cce47
    upload: Created table with name Big-18010469-43b4-4d6c-88a3-a579ac4394a4
  Running spec 'should allow to access a Table by name'...
      Querying table with name T1-095df4cb-4386-4078-a9d2-fcaface06e54
  Finished spec 'should allow to access a Table by name'.
  Running spec 'should allow to access a Table by an SQL query'...
  Finished spec 'should allow to access a Table by an SQL query'.
  Running spec 'should allow to access a Table by an SQL query'...
  Finished spec 'should allow to access a Table by an SQL query'.
  Running spec 'should use labels for column names'...
  Finished spec 'should use labels for column names'.
  Running spec 'should allow a shorthand trying to deduce if the query is a table name or an SQL query'...
  Finished spec 'should allow a shorthand trying to deduce if the query is a table name or an SQL query'.
  Running spec 'should report an error depending on input SQL_Query type'...
  Finished spec 'should report an error depending on input SQL_Query type'.
  Running spec 'should not allow interpolations in raw user-built queries'...
  Finished spec 'should not allow interpolations in raw user-built queries'.
  Running spec 'should make a best-effort attempt at returning a reasonable error for the short-hand'...
  Finished spec 'should make a best-effort attempt at returning a reasonable error for the short-hand'.
  Running spec 'will fail if the table is modified and a column gets removed'...
  Finished spec 'will fail if the table is modified and a column gets removed'.
  Running spec 'will not fail if the table is modified and a column gets added'...
  Finished spec 'will not fail if the table is modified and a column gets added'.
  Common_Spec_New.teardown_basic_data
    drop_table: Dropping table with name T1-095df4cb-4386-4078-a9d2-fcaface06e54
    drop_table: Dropping table with name T2-4e6aa281-f1e0-446b-a973-63736b2a48dc
    drop_table: Dropping table with name aSELECT "A",'B' FROM t;---d48111b1-f802-4b61-badd-9b7d786cce47
    drop_table: Dropping table with name Big-18010469-43b4-4d6c-88a3-a579ac4394a4
[SQLite File] Connection.query: [10/10, 1112ms]
    - should allow to access a Table by name [59ms]
    - should allow to access a Table by an SQL query [40ms]
    - should allow to access a Table by an SQL query [47ms]
    - should use labels for column names [27ms]
    - should allow a shorthand trying to deduce if the query is a table name or an SQL query [200ms]
    - should report an error depending on input SQL_Query type [40ms]
    - should not allow interpolations in raw user-built queries [7ms]
    - should make a best-effort attempt at returning a reasonable error for the short-hand [107ms]
    - will fail if the table is modified and a column gets removed [257ms]
    - will not fail if the table is modified and a column gets added [325ms]
Running tests in group '[SQLite File] Masking Tables'...
  Common_Spec_New.setup_basic_data
    upload: Created table with name T1-93e897d4-8860-439c-87b9-73344fca9c7b
    upload: Created table with name T2-58e72cc8-52bb-494e-bee4-7f31a932f56f
    upload: Created table with name aSELECT "A",'B' FROM t;---d2594710-8981-4703-a605-efa3deba09a5
    upload: Created table with name Big-0c9777fa-3574-48bc-93dc-6381a397e0f1
  Running spec 'should allow to select rows from a table or column based on an expression'...
  Finished spec 'should allow to select rows from a table or column based on an expression'.
  Common_Spec_New.teardown_basic_data
    drop_table: Dropping table with name T1-93e897d4-8860-439c-87b9-73344fca9c7b
    drop_table: Dropping table with name T2-58e72cc8-52bb-494e-bee4-7f31a932f56f
    drop_table: Dropping table with name aSELECT "A",'B' FROM t;---d2594710-8981-4703-a605-efa3deba09a5
    drop_table: Dropping table with name Big-0c9777fa-3574-48bc-93dc-6381a397e0f1
[SQLite File] Masking Tables: [1/1, 135ms]
    - should allow to select rows from a table or column based on an expression [135ms]
Running tests in group '[SQLite File] Missing Values'...
  Common_Spec_New.setup_missing_values_data
    upload: Created table with name T4-349d2be9-cb58-4974-8d61-08f259e22f3b
  Running spec 'fill_nothing should replace nulls'...
  Finished spec 'fill_nothing should replace nulls'.
  Running spec 'should correctly be counted'...
  Finished spec 'should correctly be counted'.
  Common_Spec_New.teardown_missing_values_data
    drop_table: Dropping table with name T4-349d2be9-cb58-4974-8d61-08f259e22f3b
[SQLite File] Missing Values: [2/2, 238ms]
    - fill_nothing should replace nulls [134ms]
    - should correctly be counted [104ms]
Running tests in group '[SQLite File] Sorting'...
  Common_Spec_New.setup_sorting_data
    upload: Created table with name clothes-09ed42ea-6daa-42be-83ae-d8d103e0d09e
    upload: Created table with name T8-8509067c-ef7d-4ccc-9ed0-0ac4bf6f4fe2
  Running spec 'should allow sorting by a single column name'...
  Finished spec 'should allow sorting by a single column name'.
  Running spec 'should allow sorting by multiple column names'...
  Finished spec 'should allow sorting by multiple column names'.
  Running spec 'should allow sorting with specific by-column rules'...
  Finished spec 'should allow sorting with specific by-column rules'.
  Running spec 'should correctly reorder all kinds of columns and leave the original columns untouched'...
  Finished spec 'should correctly reorder all kinds of columns and leave the original columns untouched'.
  Running spec 'should sort columns with specified ordering and missing placement'...
  Finished spec 'should sort columns with specified ordering and missing placement'.
  Common_Spec_New.teardown_sorting_data
    drop_table: Dropping table with name clothes-09ed42ea-6daa-42be-83ae-d8d103e0d09e
    drop_table: Dropping table with name T8-8509067c-ef7d-4ccc-9ed0-0ac4bf6f4fe2
[SQLite File] Sorting: [5/5, 165ms]
    - should allow sorting by a single column name [31ms]
    - should allow sorting by multiple column names [22ms]
    - should allow sorting with specific by-column rules [11ms]
    - should correctly reorder all kinds of columns and leave the original columns untouched [79ms]
    - should sort columns with specified ordering and missing placement [21ms]
Running tests in group '[SQLite File] Aggregation'...
  Common_Spec_New.setup_aggregation_data
    upload: Created table with name T9-57835a51-d770-4231-aad9-bfbd7789eeb6
  Running spec 'should allow counting group sizes and elements'...
  Finished spec 'should allow counting group sizes and elements'.
  Running spec 'should allow simple arithmetic aggregations'...
  Finished spec 'should allow simple arithmetic aggregations'.
  Common_Spec_New.teardown_aggregation_data
    drop_table: Dropping table with name T9-57835a51-d770-4231-aad9-bfbd7789eeb6
[SQLite File] Aggregation: [2/2, 240ms]
    - should allow counting group sizes and elements [111ms]
    - should allow simple arithmetic aggregations [128ms]
Running tests in group '[SQLite File] Table.filter'...
  Common_Spec_New.setup_basic_data
    upload: Created table with name T1-829e4127-27b9-491e-bbee-20ef2091438d
    upload: Created table with name T2-3fa8c495-cb76-4afa-9249-fe68844dae41
    upload: Created table with name aSELECT "A",'B' FROM t;---947585ff-54c8-4cce-8e4b-03128a1925d8
    upload: Created table with name Big-28b00ee6-bd32-429b-9748-ecd5bb03704f
  Running spec 'report error when trying to filter by a custom predicate'...
  Finished spec 'report error when trying to filter by a custom predicate'.
  Common_Spec_New.teardown_basic_data
    drop_table: Dropping table with name T1-829e4127-27b9-491e-bbee-20ef2091438d
    drop_table: Dropping table with name T2-3fa8c495-cb76-4afa-9249-fe68844dae41
    drop_table: Dropping table with name aSELECT "A",'B' FROM t;---947585ff-54c8-4cce-8e4b-03128a1925d8
    drop_table: Dropping table with name Big-28b00ee6-bd32-429b-9748-ecd5bb03704f
[SQLite File] Table.filter: [1/1, 2ms]
    - report error when trying to filter by a custom predicate [2ms]
Running tests in group '[SQLite In-Memory] Table.default_ordering'...
  Default_Ordering_Spec_New.setup
  Running spec 'will return Nothing if no primary key is defined'...
  Finished spec 'will return Nothing if no primary key is defined'.
  Running spec 'will return the key for a table with a primary key'...
  Finished spec 'will return the key for a table with a primary key'.
  Running spec 'will return Nothing for composite tables (join, aggregate)'...
  Finished spec 'will return Nothing for composite tables (join, aggregate)'.
  Running spec 'will return the ordering determined by order_by'...
  Finished spec 'will return the ordering determined by order_by'.
[SQLite In-Memory] Table.default_ordering: [4/4, 101ms]
    - will return Nothing if no primary key is defined [8ms]
    - will return the key for a table with a primary key [54ms]
    - will return Nothing for composite tables (join, aggregate) [34ms]
    - will return the ordering determined by order_by [3ms]
Running tests in group '[SQLite In-Memory] Basic Table Access'...
  Common_Spec_New.setup_basic_data
    upload: Created table with name T1-e847d986-eb25-4a96-b80a-28239a337fbd
    upload: Created table with name T2-f76b3094-2f97-47dc-8511-15348cb2400d
    upload: Created table with name aSELECT "A",'B' FROM t;---1a8a9723-2075-42f3-8c88-c7bdafaf638d
    upload: Created table with name Big-79971f4d-0895-464e-87e5-d956a745b166
  Running spec 'should allow to materialize tables and columns into local memory'...
  Finished spec 'should allow to materialize tables and columns into local memory'.
  Running spec 'should allow to materialize columns directly into a Vector'...
  Finished spec 'should allow to materialize columns directly into a Vector'.
  Running spec 'should handle bigger result sets'...
  Finished spec 'should handle bigger result sets'.
  Running spec 'should not allow to set a column coming from another table'...
  Finished spec 'should not allow to set a column coming from another table'.
  Common_Spec_New.teardown_basic_data
    drop_table: Dropping table with name T1-e847d986-eb25-4a96-b80a-28239a337fbd
    drop_table: Dropping table with name T2-f76b3094-2f97-47dc-8511-15348cb2400d
    drop_table: Dropping table with name aSELECT "A",'B' FROM t;---1a8a9723-2075-42f3-8c88-c7bdafaf638d
    drop_table: Dropping table with name Big-79971f4d-0895-464e-87e5-d956a745b166
[SQLite In-Memory] Basic Table Access: [4/4, 72ms]
    - should allow to materialize tables and columns into local memory [19ms]
    - should allow to materialize columns directly into a Vector [5ms]
    - should handle bigger result sets [40ms]
    - should not allow to set a column coming from another table [6ms]
Running tests in group '[SQLite In-Memory] Connection.query'...
  Common_Spec_New.setup_basic_data
    upload: Created table with name T1-9f0e08e0-d5e8-483f-9191-b6da1fcad58d
    upload: Created table with name T2-38017d6f-6071-49ed-93e7-ad1f89227925
    upload: Created table with name aSELECT "A",'B' FROM t;---c472c119-7c3e-421d-adb3-5688a5246fd4
    upload: Created table with name Big-30f27ea0-cc7c-4ec6-90d2-592f400118a6
  Running spec 'should allow to access a Table by name'...
      Querying table with name T1-9f0e08e0-d5e8-483f-9191-b6da1fcad58d
  Finished spec 'should allow to access a Table by name'.
  Running spec 'should allow to access a Table by an SQL query'...
  Finished spec 'should allow to access a Table by an SQL query'.
  Running spec 'should allow to access a Table by an SQL query'...
  Finished spec 'should allow to access a Table by an SQL query'.
  Running spec 'should use labels for column names'...
  Finished spec 'should use labels for column names'.
  Running spec 'should allow a shorthand trying to deduce if the query is a table name or an SQL query'...
  Finished spec 'should allow a shorthand trying to deduce if the query is a table name or an SQL query'.
  Running spec 'should report an error depending on input SQL_Query type'...
  Finished spec 'should report an error depending on input SQL_Query type'.
  Running spec 'should not allow interpolations in raw user-built queries'...
  Finished spec 'should not allow interpolations in raw user-built queries'.
  Running spec 'should make a best-effort attempt at returning a reasonable error for the short-hand'...
  Finished spec 'should make a best-effort attempt at returning a reasonable error for the short-hand'.
  Running spec 'will fail if the table is modified and a column gets removed'...
  Finished spec 'will fail if the table is modified and a column gets removed'.
  Running spec 'will not fail if the table is modified and a column gets added'...
  Finished spec 'will not fail if the table is modified and a column gets added'.
  Common_Spec_New.teardown_basic_data
    drop_table: Dropping table with name T1-9f0e08e0-d5e8-483f-9191-b6da1fcad58d
    drop_table: Dropping table with name T2-38017d6f-6071-49ed-93e7-ad1f89227925
    drop_table: Dropping table with name aSELECT "A",'B' FROM t;---c472c119-7c3e-421d-adb3-5688a5246fd4
    drop_table: Dropping table with name Big-30f27ea0-cc7c-4ec6-90d2-592f400118a6
[SQLite In-Memory] Connection.query: [10/10, 383ms]
    - should allow to access a Table by name [15ms]
    - should allow to access a Table by an SQL query [14ms]
    - should allow to access a Table by an SQL query [12ms]
    - should use labels for column names [9ms]
    - should allow a shorthand trying to deduce if the query is a table name or an SQL query [90ms]
    - should report an error depending on input SQL_Query type [8ms]
    - should not allow interpolations in raw user-built queries [1ms]
    - should make a best-effort attempt at returning a reasonable error for the short-hand [33ms]
    - will fail if the table is modified and a column gets removed [89ms]
    - will not fail if the table is modified and a column gets added [108ms]
Running tests in group '[SQLite In-Memory] Masking Tables'...
  Common_Spec_New.setup_basic_data
    upload: Created table with name T1-dfaa2243-ab44-4a6f-8d97-bd8ffd18affe
    upload: Created table with name T2-3b76113c-cd6e-487d-ada7-c36859199892
    upload: Created table with name aSELECT "A",'B' FROM t;---56c888c9-4101-480c-a506-98c96803415d
    upload: Created table with name Big-54012133-a830-457c-8b4a-88368219ac73
  Running spec 'should allow to select rows from a table or column based on an expression'...
  Finished spec 'should allow to select rows from a table or column based on an expression'.
  Common_Spec_New.teardown_basic_data
    drop_table: Dropping table with name T1-dfaa2243-ab44-4a6f-8d97-bd8ffd18affe
    drop_table: Dropping table with name T2-3b76113c-cd6e-487d-ada7-c36859199892
    drop_table: Dropping table with name aSELECT "A",'B' FROM t;---56c888c9-4101-480c-a506-98c96803415d
    drop_table: Dropping table with name Big-54012133-a830-457c-8b4a-88368219ac73
[SQLite In-Memory] Masking Tables: [1/1, 64ms]
    - should allow to select rows from a table or column based on an expression [64ms]
Running tests in group '[SQLite In-Memory] Missing Values'...
  Common_Spec_New.setup_missing_values_data
    upload: Created table with name T4-f15a7665-e624-45d9-a6ee-ce997c33253c
  Running spec 'fill_nothing should replace nulls'...
  Finished spec 'fill_nothing should replace nulls'.
  Running spec 'should correctly be counted'...
  Finished spec 'should correctly be counted'.
  Common_Spec_New.teardown_missing_values_data
    drop_table: Dropping table with name T4-f15a7665-e624-45d9-a6ee-ce997c33253c
[SQLite In-Memory] Missing Values: [2/2, 126ms]
    - fill_nothing should replace nulls [90ms]
    - should correctly be counted [36ms]
Running tests in group '[SQLite In-Memory] Sorting'...
  Common_Spec_New.setup_sorting_data
    upload: Created table with name clothes-938ed521-a24e-4efe-a6a8-352ffaf2c1b9
    upload: Created table with name T8-56cc5c9c-fb3c-4c98-bd5a-a09bb3a04d02
  Running spec 'should allow sorting by a single column name'...
  Finished spec 'should allow sorting by a single column name'.
  Running spec 'should allow sorting by multiple column names'...
  Finished spec 'should allow sorting by multiple column names'.
  Running spec 'should allow sorting with specific by-column rules'...
  Finished spec 'should allow sorting with specific by-column rules'.
  Running spec 'should correctly reorder all kinds of columns and leave the original columns untouched'...
  Finished spec 'should correctly reorder all kinds of columns and leave the original columns untouched'.
  Running spec 'should sort columns with specified ordering and missing placement'...
  Finished spec 'should sort columns with specified ordering and missing placement'.
  Common_Spec_New.teardown_sorting_data
    drop_table: Dropping table with name clothes-938ed521-a24e-4efe-a6a8-352ffaf2c1b9
    drop_table: Dropping table with name T8-56cc5c9c-fb3c-4c98-bd5a-a09bb3a04d02
[SQLite In-Memory] Sorting: [5/5, 90ms]
    - should allow sorting by a single column name [12ms]
    - should allow sorting by multiple column names [15ms]
    - should allow sorting with specific by-column rules [6ms]
    - should correctly reorder all kinds of columns and leave the original columns untouched [42ms]
    - should sort columns with specified ordering and missing placement [13ms]
Running tests in group '[SQLite In-Memory] Aggregation'...
  Common_Spec_New.setup_aggregation_data
    upload: Created table with name T9-c9bd4369-d938-484e-9707-2c39b5f4ee08
  Running spec 'should allow counting group sizes and elements'...
  Finished spec 'should allow counting group sizes and elements'.
  Running spec 'should allow simple arithmetic aggregations'...
  Finished spec 'should allow simple arithmetic aggregations'.
  Common_Spec_New.teardown_aggregation_data
    drop_table: Dropping table with name T9-c9bd4369-d938-484e-9707-2c39b5f4ee08
[SQLite In-Memory] Aggregation: [2/2, 103ms]
    - should allow counting group sizes and elements [59ms]
    - should allow simple arithmetic aggregations [44ms]
Running tests in group '[SQLite In-Memory] Table.filter'...
  Common_Spec_New.setup_basic_data
    upload: Created table with name T1-0e7aaa79-d725-4f3b-8b9a-eee366ed6cb4
    upload: Created table with name T2-1af37057-6f87-46f6-925e-e0415bab04ca
    upload: Created table with name aSELECT "A",'B' FROM t;---18cb5216-5442-41fb-bc18-042ab245cddc
    upload: Created table with name Big-a73f5420-7da6-4120-9c0f-ec8cb46817b0
  Running spec 'report error when trying to filter by a custom predicate'...
  Finished spec 'report error when trying to filter by a custom predicate'.
  Common_Spec_New.teardown_basic_data
    drop_table: Dropping table with name T1-0e7aaa79-d725-4f3b-8b9a-eee366ed6cb4
    drop_table: Dropping table with name T2-1af37057-6f87-46f6-925e-e0415bab04ca
    drop_table: Dropping table with name aSELECT "A",'B' FROM t;---18cb5216-5442-41fb-bc18-042ab245cddc
    drop_table: Dropping table with name Big-a73f5420-7da6-4120-9c0f-ec8cb46817b0
[SQLite In-Memory] Table.filter: [1/1, 1ms]
    - report error when trying to filter by a custom predicate [1ms]
Running tests in group 'SQLite_Format should allow connecting to SQLite files'...
  SQLite_Spec_New.setup
  Running spec 'should recognise a SQLite database file'...
  Finished spec 'should recognise a SQLite database file'.
  Running spec 'should not duplicate warnings'...
  Finished spec 'should not duplicate warnings'.
  SQLite_Spec_New.teardown
SQLite_Format should allow connecting to SQLite files: [2/2, 215ms]
    - should recognise a SQLite database file [70ms]
    - should not duplicate warnings [145ms]

In that output, we can see that all the tests pass.
Moreover, that setups and teardowns are always called just once before and after group.
My two cents
From the very beginning of the benchmark collection API (introduced in #7324), I have been an advocate of providing more sophisticated setup and teardown methods, rather than managing it manually via lazy atom fields.
When migrating SQLite_Spec, my expectations were confirmed, as I had much better experience with (2) (obviously, as (1) is not even finished).
In (1), when working with lazy atom fields, one can get easily lost and confused in the code, especially, if you want to compute a lazy field from another lazy field.
In (2), the setups and teardowns are straightforward - they are just functions that gets called before and after the group.
Maybe, my bad experience with (1) is just because I don't understand the semantics of lazy atom fields well enough.
I am leaving potential improvements of (1) to @JaroslavTulach as the only and most vocal advocate of (1).
I would rather go in the direction of (2).
The only "disadvantage" is that one has to write specify_with_args and use the args parameter if one wishes to use setups.
Final remarks
Note that both of these prototypes are just prototypes and work in progress.
Try not to focus too much on details.
CCing @JaroslavTulach @radeusgd @GregoryTravis  and @jdunkerley

For a while I struggled to find the right way to review this PR (as various comments of mine show). Today morning I found an approach that seems to yield some results. Let's start from something that works! Thus I checked out the version 2 of Pavel's API and I was able to successfully execute:
enso$ ./built-distribution/enso-engine-*/enso-*/bin/enso --run test/Table_Tests/src/Database/SQLite_Spec_New.enso --in-project test/Table_Tests/

When looking at the output I can see that first of all list of all tests is printed. Only then they are executed. As the tests are being executed various messages about setup and teardown are being intermixed in the output. These messages serve as a proof that setup and teardown are happening where expected.
Step-by-Step Elimination of setup
The version 2 branch is supposed to demonstrate the superiority of setup over lazy field initialization. However I, as...

the only and most vocal advocate of (1)

...as (the only) someone who understands that removing elements from an API is way harder than adding them, I  try to avoid introducing API concepts that aren't necessary. At least until it is clear they provide some benefits. I continue to believe setup isn't needed and to prove that I am offering a step-by-step conversion guide to turn version 2 branch into setup-free system. After each step one can execute
enso$ ./built-distribution/enso-engine-*/enso-*/bin/enso \
  --run test/Table_Tests/src/Database/SQLite_Spec_New.enso \
  --in-project test/Table_Tests/

and verify the system behaves the same as at the beginning.
Type's setup and teardown
First of all let's give the code a better structure. Instead of having top-level setup and teardown, let's make them methods of the Data type. setup is a static method. teardown an instance one. By using:
setup = Data.Value <|
    some initialization code

pattern, one can keep the original code almost unchanged. The group definition then changes slightly, but without any effect on the semantic of the code:
suite_builder.group "name" setup=Data.setup teardown=_.teardown group_builder->

Obviously such a change doesn't influence the behavior and everything continues to work without any difference. As a bonus and as a step towards future, the change also makes the only Data field lazily initialized. That has no real impact right now, but allows us to make the next step.
Replace setup
The next step is surprisingly simple. Just create a field:
args = Data.setup

remove setup and modify teardown to use the args value. Replace specify_with_args with simple:
group_builder.specify "should recognise a SQLite database file" <|
    args.file

The code of the test remains unchanged. Just instead of accessing args function argument, it accesses the args field from the closure scope. Needless to say, everything continues to work as before.
Initialize Multiple Values at Once
The previous pattern - e.g. having setup as a static type method and teardown as an instance method seems to be generally applicable. Just, in some more complicated cases one may need to lazily initialize multiple values instead of a single variable. Here is the pattern to follow:
type Data
    Value ~data

    setup arg1 arg2 = Data.Value <|
       [ "first", "second"]

    db_table_without_key self = self.data.first
    db_table_with_key self = self.data.second

The trick is to still keep just a single lazy field and initialize it at once. In this example the setup method creates a Vector of values. To keep the rest of the testing code unchanged, one should define getters that extract values from the vector just like db_table_without_key and db_table_with_key do.
With such a well prepared Data type, it is then easy to get rid of setup and replace it with simple args field.
Note: the initialize at once pattern scales. The setup method may initialize as long Vector as it wants. One may just need seven getters then.
Powerful Lazy Fields
The version 2 branch is supposed to demonstrate the superiority of setup over lazy field initialization. However it does not!  When one knows the right patterns, it is easy to turn setup based approach to lazily initialized fields. Here is the whole rewrite for completeness.
Teardown Next to Specify
During the rewrite I avoided changes to the setup and teardown API. However the final rewrite shows a quirk: there are multiple bd1, bd2, etc. fields and it all looks a bit ugly. The reason is that teardown shall not be an argument of .group method, but rather a sibling of .specify. Then one could write:
    suite_builder.group (prefix + "Masking Tables") group_builder->
       args = Basic_Data.setup create_connection_fn
       group_builder.teardown args.teardown

Let's have a teardown method in the group_builder!
Btw. we may provide teardown method in suite_builder as well - that would allow users to handle setup and teardown for the whole suite, not just a group.
The end of Setup?
While the rewrite clearly demonstrates the unnecessity of setup, the way the setup and teardown is introduced in the version 2 of the API is relatively slick. The fact that there is a simple specify  method and more complex specify_with_args one addresses my biggest objection against previous attempts (done when designing  Bench API - #7324). Simple things are easy and complex are hidden.
However simple things are simple with lazy fields and complex things are also possible with lazy fields, so I don't think we need  setup API  right now. Maybe a day will come when we find a need for setup. It may be more understandable concept for less experienced developers. However for now, when we need to solve only our own needs, let's keep API simple and follow this tutorial to use lazy fields where needed - e.g. benefit from the Enso language concepts rather than expanded API.
Remember: extending API is simpler than trying to shrink it.

While the rewrite clearly demonstrates the unnecessity of setup

After getting relatively up-to-speed (without sinking into deeper details), this approach seems to look great - it gives us relatively simple initialization and still allows to clean-up afterwards with the teardown.
I'm slightly anxious, feeling that the lazy fields give us a bit less 'control' than an explicit method (e.g. when exactly the initializer is run), but I cannot seem to find any rational examples showing that this is really the case - so I think it is rather just a bad intuition I have here.
I also think the way we can rely on the closure scope to access the needed 'utils' that are lazily initialized is more elegant and easy to use than the specify_with_args which indeed adds some (understandable here) complexity.
I guess one difference I see currently is if the lazy initializer panics - then such panic will be thrown from the within every test case (as panics in lazy field are cached and rethrown upon each access) and not once from outside - but I don't think that would be too harmful, it may actually prove to be an advantage.

What is the plan for the next steps? Our test suite is quite large, do you think we will be able to somehow 'incrementally' migrate it to the new API?

My 2 more cents.
Setup
As suggested by Jaroslav, the lazy-field driven seems like a good direction. However, creating a new type for every kind of data that is initialized for a whole group of test seems like it might be a bit tedious, so I was wondering if we could figure out some kind of common 'idiom' or helper to use.
What if we do:
type Lazy_Test_Value
    Value ~get

and then add the following method to group builder:
lazy_setup ~action = Lazy_Test_Value.Value action

so that in the tests we could be writing:
my_sqlite_connection = group_builder.lazy_setup (Database.connect (SQLite In_Memory))
group_builder.specify "should do foo" <|
    my_sqlite_connection.query "bar"

IMO 'standardizing' the way we initialize these kinds of resources will result in cleaner test code. Of course allowing exceptions that need more custom handling.
What do you think?

Teardown
I've been recently working with secrets that I create on an Enso Cloud account, and to avoid another run of tests to fail without manual cleaning, I'm trying to clean these secrets up, regardless if my test succeeds or not. I'm using the Panic.with_finalizer for that purpose.
It works OK, but I'm quite annoyed in particular by the fact that I'm getting far too much indentation.
Example:
https://github.com/enso-org/enso/blob/71427c3319edd8b46bc66b7cd645d837a66ab445/test/Base_Tests/src/Network/URI_Spec.enso#L300-L318
Here I need 2 secrets, and so for each of them the Panic.with_finalizer block adds one more indentation level. Together with the overall indentation from Test.group and Test.specify and some other helpers, that gets pretty deep.
I'm wondering if while working on the teardown logic we could somehow address it?
Maybe I could do something like group_builder.register_finalizer secret1.delete which will save the closure for finalization in some State, and run it at the end of the current specify block?
Then I'd be able to rewrite my deeply nested code into something (IMO) clearer:
 group_builder.specify "should allow to use secrets in query arguments, containing all kinds of various characters" pending=cloud_setup.httpbin_pending <|
     secret1 = Enso_Secret.create "my_test_secret-uri-4" "My Very Secret Value"
     secret1.should_succeed
     group_builder.register_finalizer secret1.delete
     s2 = "Another Secret Value containing Emoji 😊❤ and ąęś AND [a=b]:[b=c][d=e]++++!?&->#...__(){}@///\\\|%%%100*^, ]]] ==> <br>a"
     secret2 = Enso_Secret.create "my_test_secret-uri-5" s2
     secret2.should_succeed
     group_builder.register_finalizer secret2.delete
     uri = (cloud_setup.httpbin_secure_uri / "get")
         . add_query_argument "arg1" secret1
         . add_query_argument "arg2" "plain value"
         . add_query_argument "arg3" secret2

     uri.to_text . should_equal (cloud_setup.httpbin_secure_uri.to_text + "get?arg1=__SECRET__&arg2=plain+value&arg3=__SECRET__")
     uri.raw_query . should_fail_with Enso_Secret_Error

     with_retries <|
         response = cloud_setup.httpbin_secure_client.request (Request.get uri)
         decode_query_params response.decode_as_json . should_equal [["arg1", "My Very Secret Value"], ["arg2", "plain value"], ["arg3", s2]]

IMO this reads a bit cleaner than the old block.
What do you think? Could we get something similar as part of the teardown work?

What is the plan for the next steps? Our test suite is quite large, do you think we will be able to somehow 'incrementally' migrate it to the new API?

@radeusgd There will be multiple PRs. This one will provide Test_New library alongside the Test library, for now. And it will convert Table_Tests to use Test_New instead of Test. In the subsequent PRs, I will migrate the rest of the test. When that is done, as the very last PR, I will replace Test with Test_New. So for some time, some of our tests will be using the old Test library, and other tests will be using the new Test_New library.
I am planning to test the correctness of the Test_New framework by comparing the output of running all the Table_Test with the output from the merge base with develop. Not only the stdout, which will be a bit different, but mostly the JUnit xml output.

However, creating a new type for every kind of data that is initialized for a whole group of test seems like it might be a bit tedious

@radeusgd You don't have to create a new type of data for every group. If, for example, you have many groups, that only need to initialize a single value, let's say a connection to a database, then all what you need is the following type of data:
type Data
  Value ~connection

  # make_new_connection is a function that takes Nothing and creates a connection to a database.
  setup make_new_connection =
    Data.Value (make_new_connection Nothing)

And then you simply initialize this data (by calling Data.setup) at the beginning of every group.
Your suggestion seems just like a mere replacement of this type by the lazy_setup method.

@radeusgd Answer to your question about teardowns

Maybe I could do something like group_builder.register_finalizer secret1.delete which will save the closure for finalization in some State, and run it at the end of the current specify block?

There is currently no way how to enforce finalization at the end of a specify block. However, there is a way how to do teardown at the end of the group. So in your particular case, with the two secrets, there are two options. Either wrap that in a separate group (one group, one specify block), and clean the secrets in the group teardown. Or design the Data type to hold more secrets, that will all be cleaned at the end of the group.
So your test case could be rewritten in this way (with the current API):

Remove the Panic.with_finalizer blocks
Initialize secret1 and secret2 in a lazy field.
Use data.secret1 in the specify block instead of plain secret1.

What do you think? Could we get something similar as part of the teardown work?

Because the test case can be rewritten with the new API without any weird hacks, I would not add any new methods to the API.

Your suggestion seems just like a mere replacement of this type by the lazy_setup method, thus, I don't see a reason why to introduce yet another method to the API.

Yes, exactly that is what I wanted to suggest.
Instead of creating this kind of boilerplate code, let's standardize it and create an idiom that can be used across most of our initializers (with the exception of some cases requiring more complexity). Such an idiom will be then clearly recognizable and easier to understand to users that are learning the library.

What if we do:
type Lazy_Test_Value
    Value ~get

What do you think?

The lazy initialization pattern includes a section on Initialize Multiple Values at Once - that requires defining getters. It's kinda hard to do with common Lazy_Test_Value. Solutions:

one may not need the getters at all
one may define them as extension methods

If you want to have type Lazy_Test_Value in Base_Tests or Table_Tests and it gives you some benefits, feel free to do it.

@radeusgd I "fixed" a test in https://github.com/enso-org/enso/pull/8622/commits/348af3f7d1e8cab9238fa2945eed0fbc1c0130a4 by reordering expected columns. Is that OK?

@radeusgd I "fixed" a test in 348af3f by reordering expected columns. Is that OK?

I think so. Why did you need to change it though? I'm surprsied the tested behaviour has changed. Did you do any related changes there?

I guess that means expand_column should be doing some sort under the hood to ensure the order of the created columns, but that is ofc out of scope of this PR.

Example of teardown usage is in https://github.com/enso-org/enso/blob/5e3114ec506b35f7dbd503b38b06839d694865c3/test/Table_Tests/src/IO/Excel_Spec.enso#L104-L105
It deletes all the created temporary files in enso_project.data / "transient".

With 9864a5a0f85698d60832dd5a3492f05db8a38a80, all the Postgres tests work:
enso --no-ir-caches --in-project test/Table_Tests --run test/Table_Tests/src/Database/Postgres_Spec.enso

The new test-result/Table_Tests/JUnit.xml is at https://github.com/enso-org/enso/runs/20773008223#r4
The old one is at https://github.com/enso-org/enso/runs/20752687602#r5

There is a failure in LibrariesTest - https://github.com/enso-org/enso/actions/runs/7639372482/job/20818708117#step:10:15735 . I though this was transient, but now it failed for the third time. This test has nothing to do with a new Test_New std library. Let's try to merge develop and restart the job once more.

There is one last failure in Table_Spec.enso - https://github.com/enso-org/enso/actions/runs/7639372482/job/20818708973#step:10:5104 . Seems like an error after wrong merge of develop. Let's fix that and merge this PR.