Skip to content

Conformance coverage matrix

Auto-generated. Edit tests/conformance/_surface_inventory.py to add surface items, then run make coverage-matrix to regenerate this document. The CI gate (--check) refuses to merge a PR whose committed matrix has drifted from the inventory or the corpus.

What this measures

Each row in the per-category tables below is one BigQuery surface item (a function, a statement form, a wire-format shape, an error reason). The Count column is the number of fixtures in the conformance corpus that exercise the item, via a static regex match against the fixture's SQL + setup_rest + expected.json. The Tier column places the item in a depth bucket:

  • 🔴 Uncovered -- 0 fixtures touch this surface.
  • 🟡 Sampled -- 1 to 2 fixtures.
  • 🟢 Covered -- 3 to 5 fixtures.
  • 🟢🟢 Deep -- >= 6 fixtures.

Detection is coarse: a fixture matches an item if its text contains the detector pattern, irrespective of whether the item is the fixture's primary surface. A fixture authored to exercise REGEXP_EXTRACT will likely also count under SELECT and STRING -- depth measures broad exposure, not test-purpose isolation.

Summary

Tier counts below exclude the 10 surface items flagged as non-deterministic (RAND, CURRENT_DATE / CURRENT_DATETIME / CURRENT_TIME / CURRENT_TIMESTAMP, SESSION_USER, GENERATE_UUID, TABLESAMPLE, FOR SYSTEM_TIME AS OF). Those items are permanently excluded from the corpus by ADR 0022 §1.2 / §7 and are tracked separately under Excluded (non-deterministic).

Tier Count Share
🔴 Uncovered 1 0.2%
🟡 Sampled 235 58.3%
🟢 Covered 69 17.1%
🟢🟢 Deep 98 24.3%
Total 403 100.0%

Excluded (non-deterministic — see ADR 0022)

These surface items are permanently outside the conformance corpus because their output cannot be reproduced fixture-to-fixture (wall-clock, RNG, session state, or random sampling). They are exercised in adjacent test tiers — see the per-item notes for the canonical location.

Category Item Why excluded
Query language FOR SYSTEM_TIME AS OF (time travel) Excluded from the conformance corpus by ADR 0022 §7 — the relative-timestamp form depends on wall-clock state. Dynamic time-travel is exercised at the integration tier (tests/integration/test_time_travel.py).
Query language TABLESAMPLE Excluded from the conformance corpus by ADR 0022 §1.2 — TABLESAMPLE SYSTEM is non-deterministic (random sampling). Shape-only coverage lives in unit / integration tiers.
Numeric / math functions RAND Excluded from the conformance corpus by ADR 0022 §1.2 — RAND() is non-deterministic. The function is property-tested via Hypothesis (uniformity, range bounds).
Date / time / timestamp / datetime functions CURRENT_DATE Excluded from the conformance corpus by ADR 0022 §1.2 / §7 — wall-clock dependent. Static-date queries are exercised indirectly via DATE_ADD/DATE_SUB fixtures.
Date / time / timestamp / datetime functions CURRENT_DATETIME Excluded from the conformance corpus by ADR 0022 §1.2 / §7 — wall-clock dependent.
Date / time / timestamp / datetime functions CURRENT_TIME Excluded from the conformance corpus by ADR 0022 §1.2 / §7 — wall-clock dependent.
Date / time / timestamp / datetime functions CURRENT_TIMESTAMP Excluded from the conformance corpus by ADR 0022 §1.2 / §7 — wall-clock dependent. The function is exercised in unit / integration tiers where the harness pins time.
Hash / security functions SESSION_USER Excluded from the conformance corpus by ADR 0022 §1.2 — session-state dependent. Exercised at the unit, integration, and e2e × 4 client tiers (ADR 0038); Storage Read row_restriction caller-threading closed in ADR 0040.
Hash / security functions CURRENT_USER Excluded from the conformance corpus by ADR 0022 §1.2 — co-equal alias for SESSION_USER per BigQuery's reference. Exercised at the unit and e2e × 4 client tiers; same resolution path as SESSION_USER (ADR 0040).
Hash / security functions GENERATE_UUID Excluded from the conformance corpus by ADR 0022 §1.2 — non-deterministic. Property-tested via Hypothesis for shape / uniqueness.

Variation depth — broad-but-shallow surfaces

These surfaces have at least 3 fixtures, but every fixture sits in the happy path — the variation taxonomy collapses to {happy_path}. They look covered by fixture count, but the typical BigQuery-vs-DuckDB divergence (NULL propagation, empty inputs, ±Inf / NaN, timezone arithmetic, Unicode case-folding, error-shape parity) lives in scenarios a happy-path-only sweep reliably misses. Add edge-case fixtures targeting these scenarios to close the gap. The taxonomy lives in tests/conformance/_corpus.py and is locked by ADR 0022 §"Variation taxonomy".

Category Item Fixtures Variation BQ docs
GEOGRAPHY functions ST_ASTEXT 17 happy×17 BQ ref
GEOGRAPHY functions ST_NPOINTS 7 happy×7 BQ ref
Aggregate functions GROUPING 6 happy×6 BQ ref
GEOGRAPHY functions ST_DIMENSION 6 happy×6 BQ ref
Query language _TABLE_SUFFIX pseudo-column 6 happy×6 BQ ref
Aggregate functions HLL_COUNT.INIT 4 happy×4 BQ ref
GEOGRAPHY functions ST_BUFFER 4 happy×4 BQ ref
Query language Partition pruning (WHERE on partition col) 4 happy×4 BQ ref
Data Definition (DDL) DROP VIEW 3 happy×3 BQ ref
Date / time / timestamp / datetime functions DATE 3 happy×3 BQ ref
Date / time / timestamp / datetime functions GENERATE_TIMESTAMP_ARRAY 3 happy×3 BQ ref
GEOGRAPHY functions ST_INTERSECTS 3 happy×3 BQ ref
INFORMATION_SCHEMA virtual views INFORMATION_SCHEMA.COLUMNS 3 happy×3 BQ ref
INFORMATION_SCHEMA virtual views INFORMATION_SCHEMA.TABLES 3 happy×3 BQ ref
INFORMATION_SCHEMA virtual views INFORMATION_SCHEMA.TABLE_OPTIONS 3 happy×3 BQ ref
JSON functions JSON_EXTRACT 3 happy×3 BQ ref
JSON functions JSON_EXTRACT_SCALAR 3 happy×3 BQ ref
Query language INTERSECT 3 happy×3 BQ ref
REST / wire-format response shapes ARRAY queryParameter 3 happy×3 BQ ref
String functions REGEXP_SUBSTR 3 happy×3 BQ ref
String functions REPEAT 3 happy×3 BQ ref

Gaps -- top 30 0-fixture surface items

The fastest single-session improvements come from these uncovered cells. Each is a candidate fixture-authoring target.

Category Item BQ docs
GEOGRAPHY functions ST_CLUSTERDBSCAN BQ ref

Per-category coverage

Data Manipulation (DML)

BigQuery reference -- 7 / 7 items covered

BigQuery's DML statements. Coverage must include happy-path + rows-affected reporting + interaction with row-access policies (per ADR 0018) and time-travel snapshots (per ADR 0016).

Item Count Tier Variation Fixtures
INSERT … VALUES 355 🟢🟢 Deep happy×289 / null×41 / empty×6 / bound×9 / error×13 api_configuration/default_dataset_insert_unqualified, api_configuration/default_dataset_join_partial_qualification, api_configuration/default_dataset_select_table, api_configuration/dest_clustering_fields_basic, api_configuration/dest_clustering_fields_invalid_column, … (+350 more)
INSERT … SELECT 2 🟡 Sampled happy×2 api_configuration/dml_insert_select, rest_crud/dml_insert_select
UPDATE 22 🟢🟢 Deep happy×16 / null×3 / empty×1 / error×3 api_configuration/dml_merge_basic, api_configuration/dml_merge_when_matched, api_configuration/dml_update_multi_row, api_configuration/dml_update_single_row, api_configuration/dml_update_with_where, … (+17 more)
UPDATE … FROM 2 🟡 Sampled happy×2 rest_crud/dml_update_from_cte, rest_crud/dml_update_subquery
DELETE 11 🟢🟢 Deep happy×9 / null×1 / empty×1 api_configuration/dml_delete_multi_row, api_configuration/dml_delete_single_row, api_configuration/dml_delete_with_where, rest_crud/dml_delete, rest_crud/dml_delete_all, … (+6 more)
MERGE 10 🟢🟢 Deep happy×8 / null×1 / empty×1 api_configuration/dml_merge_basic, api_configuration/dml_merge_when_matched, api_configuration/dml_merge_when_not_matched, rest_crud/dml_merge, rest_crud/dml_merge_delete_branch, … (+5 more)
TRUNCATE TABLE 1 🟡 Sampled happy×1 rest_crud/dml_truncate_select

Data Definition (DDL)

BigQuery reference -- 20 / 20 items covered

Schema-mutating DDL. Each form has wire-format implications (REST tables.insert / tables.patch / tables.delete) — coverage should pair the SQL form with the REST equivalent where BQ publishes both.

Item Count Tier Variation Fixtures
CREATE TABLE 449 🟢🟢 Deep happy×356 / null×46 / empty×27 / bound×11 / error×15 api_configuration/default_dataset_insert_unqualified, api_configuration/default_dataset_join_partial_qualification, api_configuration/default_dataset_select_table, api_configuration/dest_clustering_fields_basic, api_configuration/dest_clustering_fields_invalid_column, … (+444 more)
CREATE TABLE … AS SELECT (CTAS) 72 🟢🟢 Deep happy×66 / null×4 / empty×1 / bound×1 / error×1 partitioning_clustering/cluster_basic, partitioning_clustering/cluster_filtered, partitioning_clustering/partition_basic, partitioning_clustering/partition_hour_basic, partitioning_clustering/partition_hour_pruned, … (+67 more)
CREATE TABLE … (schema) AS SELECT (combined) 1 🟡 Sampled happy×1 rest_crud/ctas_with_schema_clause
Combined form requires the CTAS-with-schema rewriter (closed 2026-05-18).
CREATE VIEW 11 🟢🟢 Deep happy×9 / null×1 / empty×1 information_schema/is_tables_filter_by_type, information_schema/is_views_basic, information_schema/is_views_with_definition, rest_crud/ddl_create_view_empty_source, rest_crud/ddl_create_view_null_column, … (+6 more)
CREATE MATERIALIZED VIEW 8 🟢🟢 Deep happy×6 / null×1 / empty×1 versioning/mv_basic, versioning/mv_drop_and_recreate, versioning/mv_empty_source, versioning/mv_null_aggregation, versioning/mv_refresh_after_dml, … (+3 more)
REFRESH MATERIALIZED VIEW / CALL BQ.REFRESH_MATERIALIZED_VIEW 1 🟡 Sampled happy×1 versioning/mv_refresh_after_dml
CREATE SNAPSHOT TABLE 8 🟢🟢 Deep happy×6 / null×1 / empty×1 versioning/snapshot_after_dml, versioning/snapshot_aggregate, versioning/snapshot_basic, versioning/snapshot_drop_recreate, versioning/snapshot_empty_source, … (+3 more)
CREATE TABLE … CLONE 8 🟢🟢 Deep happy×6 / null×1 / empty×1 versioning/clone_after_source_dml, versioning/clone_aggregate, versioning/clone_basic, versioning/clone_diverges_after_insert, versioning/clone_empty_source, … (+3 more)
DROP TABLE 1 🟡 Sampled error×1 rest_crud/error_drop_nonexistent_table
DROP VIEW 3 🟢 Covered happy×3 rest_crud/ddl_drop_view_basic, rest_crud/ddl_drop_view_if_exists, rest_crud/ddl_drop_view_recreate
DROP MATERIALIZED VIEW 1 🟡 Sampled happy×1 versioning/mv_drop_and_recreate
DROP SNAPSHOT TABLE 1 🟡 Sampled happy×1 versioning/snapshot_drop_recreate
ALTER TABLE ADD COLUMN 1 🟡 Sampled error×1 rest_crud/error_alter_nonexistent_table
ALTER TABLE DROP COLUMN 5 🟢 Covered happy×3 / null×1 / empty×1 rest_crud/ddl_alter_drop_column_empty_table, rest_crud/ddl_alter_drop_column_null_data, rest_crud/ddl_alter_table_drop_column_basic, rest_crud/ddl_alter_table_drop_column_multiple, rest_crud/ddl_alter_table_drop_column_with_data
ALTER TABLE RENAME 2 🟡 Sampled happy×2 rest_crud/ddl_alter_table_rename_basic, rest_crud/ddl_alter_table_rename_query_after
CREATE FUNCTION (SQL UDF) 16 🟢🟢 Deep happy×13 / null×1 / empty×1 / error×1 routines_scripting/js_udf_array_to_array, routines_scripting/js_udf_in_group_by, routines_scripting/js_udf_int_to_int, routines_scripting/js_udf_json_roundtrip, routines_scripting/js_udf_nested_in_sql_udf, … (+11 more)
CREATE FUNCTION (JS UDF) 12 🟢🟢 Deep happy×9 / null×1 / empty×1 / error×1 routines_scripting/js_udf_array_to_array, routines_scripting/js_udf_in_group_by, routines_scripting/js_udf_int_to_int, routines_scripting/js_udf_json_roundtrip, routines_scripting/js_udf_nested_in_sql_udf, … (+7 more)
CREATE TABLE FUNCTION (TVF) 7 🟢🟢 Deep happy×5 / null×1 / empty×1 routines_scripting/tvf_aggregate_over, routines_scripting/tvf_chained, routines_scripting/tvf_create_and_select, routines_scripting/tvf_empty_output, routines_scripting/tvf_returns_struct_column, … (+2 more)
CREATE PROCEDURE 9 🟢🟢 Deep happy×5 / null×2 / empty×2 routines_scripting/proc_basic, routines_scripting/proc_call_empty_string, routines_scripting/proc_call_in_script, routines_scripting/proc_call_null_arg, routines_scripting/proc_with_empty_body, … (+4 more)
CREATE ROW ACCESS POLICY (REST) 20 🟢🟢 Deep happy×19 / error×1 row_access/authz_view_aggregation_through_bypass, row_access/authz_view_bypasses_rap, row_access/authz_view_chained, row_access/authz_view_join_two_authorized_bases, row_access/authz_view_with_where_pushdown, … (+15 more)
Setup happens via setup_rest.json POST, not SQL.

Query language

BigQuery reference -- 30 / 30 items covered

Composite SELECT shapes (joins, set ops, subqueries, window functions). Coverage depth here drives confidence that the translator handles real-world analytical queries.

Item Count Tier Variation Fixtures
SELECT 1155 🟢🟢 Deep happy×845 / null×109 / empty×62 / bound×49 / unicode×40 / error×43 / tz×20 api_configuration/cache_disabled_with_count_distinct, api_configuration/cache_disabled_with_join, api_configuration/create_never_missing_destination, api_configuration/create_never_with_append, api_configuration/create_never_with_truncate, … (+1150 more)
WHERE 193 🟢🟢 Deep happy×165 / null×22 / empty×3 / bound×1 / error×2 api_configuration/dml_delete_multi_row, api_configuration/dml_delete_single_row, api_configuration/dml_delete_with_where, api_configuration/dml_update_multi_row, api_configuration/dml_update_single_row, … (+188 more)
GROUP BY 123 🟢🟢 Deep happy×98 / null×21 / empty×2 / bound×2 api_configuration/default_dataset_join_partial_qualification, api_configuration/dry_run_aggregate, partitioning_clustering/cluster_basic, partitioning_clustering/wildcard_aggregate, partitioning_clustering/wildcard_count_per_table, … (+118 more)
HAVING 16 🟢🟢 Deep happy×12 / null×3 / empty×1 rest_crud/select_group_having, rest_crud/subquery_in, standard_functions/rw_having_count, standard_functions/rw_having_empty_after_filter, standard_functions/rw_having_null_group, … (+11 more)
QUALIFY 5 🟢 Covered happy×4 / null×1 standard_functions/rw_qualify_basic, standard_functions/rw_qualify_top_n, standard_functions/tpcds_q14, standard_functions/tpcds_q16, standard_functions/tpcds_q73
ORDER BY 313 🟢🟢 Deep happy×263 / null×35 / empty×9 / bound×3 / error×3 api_configuration/cache_disabled_with_join, api_configuration/default_dataset_join_partial_qualification, api_configuration/default_dataset_select_table, api_configuration/dry_run_aggregate, api_configuration/positional_array_int64, … (+308 more)
LIMIT 80 🟢🟢 Deep happy×62 / null×15 / empty×4 partitioning_clustering/wildcard_join_self, rest_crud/select_limit, rest_crud/select_limit_offset, standard_functions/agg_array_agg_ordered, standard_functions/agg_percentile_cont_50, … (+75 more)
OFFSET 1 🟡 Sampled happy×1 rest_crud/select_limit_offset
SELECT DISTINCT 15 🟢🟢 Deep happy×13 / empty×1 / bound×1 rest_crud/select_distinct, standard_functions/distinct_empty, standard_functions/rw_array_subquery, standard_functions/rw_correlated_subquery_max, standard_functions/rw_join_anti, … (+10 more)
UNION ALL 85 🟢🟢 Deep happy×80 / null×4 / empty×1 api_configuration/cache_disabled_with_join, api_configuration/dml_merge_basic, api_configuration/dml_merge_when_matched, api_configuration/dml_merge_when_not_matched, api_configuration/dry_run_aggregate, … (+80 more)
UNION DISTINCT 1 🟡 Sampled happy×1 rest_crud/set_union_distinct
INTERSECT 3 🟢 Covered happy×3 rest_crud/set_intersect, standard_functions/tpcds_q14, standard_functions/tpcds_q38
EXCEPT 2 🟡 Sampled happy×2 rest_crud/set_except, standard_functions/tpcds_q87
INNER JOIN 66 🟢🟢 Deep happy×52 / null×11 / empty×1 / bound×1 / error×1 api_configuration/cache_disabled_with_join, api_configuration/default_dataset_join_partial_qualification, api_configuration/job_timeout_exceeded, api_configuration/max_bytes_billed_exceeded, api_configuration/priority_batch_with_join, … (+61 more)
LEFT JOIN 12 🟢🟢 Deep happy×7 / null×4 / empty×1 rest_crud/join_left, rest_crud/join_right_three_way, standard_functions/rw_join_left_empty_right, standard_functions/rw_join_left_filtered, standard_functions/rw_join_left_null_key, … (+7 more)
RIGHT JOIN 3 🟢 Covered happy×2 / null×1 rest_crud/join_right_basic, rest_crud/join_right_three_way, rest_crud/join_right_with_null
FULL OUTER JOIN 3 🟢 Covered happy×1 / null×2 standard_functions/tpcds_q51, standard_functions/tpcds_q97, versioning/clone_join_with_source
CROSS JOIN 4 🟢 Covered happy×3 / bound×1 api_configuration/job_timeout_exceeded, api_configuration/max_bytes_billed_exceeded, rest_crud/join_cross, standard_functions/tpcds_q28
UNNEST 27 🟢🟢 Deep happy×19 / null×2 / empty×5 / bound×1 api_configuration/cache_disabled_with_count_distinct, api_configuration/dml_insert_select, api_configuration/job_timeout_exceeded, api_configuration/max_bytes_billed_exceeded, api_configuration/positional_array_int64, … (+22 more)
WITH (CTE) 29 🟢🟢 Deep happy×18 / null×10 / empty×1 rest_crud/cte_basic, rest_crud/param_positional_in_join_predicate, standard_functions/cte_empty_first, standard_functions/rw_cte_correlated, standard_functions/rw_double_cte, … (+24 more)
WITH RECURSIVE 1 🟡 Sampled happy×1 routines_scripting/recursive_cte
Window functions (OVER) 47 🟢🟢 Deep happy×38 / null×7 / empty×1 / error×1 rest_crud/win_dense_rank, rest_crud/win_lag, rest_crud/win_lead, rest_crud/win_partition_by, rest_crud/win_rank, … (+42 more)
CASE WHEN 27 🟢🟢 Deep happy×12 / null×15 rest_crud/case_searched, standard_functions/rw_case_in_aggregate, standard_functions/tpcds_q2, standard_functions/tpcds_q21, standard_functions/tpcds_q31, … (+22 more)
EXISTS 10 🟢🟢 Deep happy×8 / null×1 / empty×1 rest_crud/dml_delete_exists, rest_crud/subquery_exists, standard_functions/rw_exists_empty_subquery, standard_functions/rw_exists_subquery_with_null, standard_functions/rw_join_semi, … (+5 more)
IN (subquery) 20 🟢🟢 Deep happy×16 / null×3 / empty×2 rest_crud/dml_update_subquery, rest_crud/subquery_in, routines_scripting/script_for_empty_array, routines_scripting/script_for_iterate_into_table, routines_scripting/script_for_iterate_select, … (+15 more)
Wildcard tables (prefix_*) 110 🟢🟢 Deep happy×86 / null×9 / empty×14 / error×1 information_schema/is_partitions_empty_table, information_schema/is_views_empty_dataset, partitioning_clustering/cluster_basic, partitioning_clustering/partition_prune_integer_range, partitioning_clustering/partition_prune_partitiontime, … (+105 more)
_TABLE_SUFFIX pseudo-column 6 🟢🟢 Deep happy×6 partitioning_clustering/wildcard_count_per_table, partitioning_clustering/wildcard_groupby_suffix, partitioning_clustering/wildcard_join_self, partitioning_clustering/wildcard_table_basic, partitioning_clustering/wildcard_table_suffix, … (+1 more)
Partition pruning (WHERE on partition col) 4 🟢 Covered happy×4 information_schema/is_partitions_ingestion_time, partitioning_clustering/partition_prune_integer_range, partitioning_clustering/partition_prune_partitiondate, partitioning_clustering/partition_prune_partitiontime
FOR SYSTEM_TIME AS OF (time travel) (excluded — non-deterministic) n/a ⚪ Excluded n/a see ADR 0022 §1.2 / §7
Excluded from the conformance corpus by ADR 0022 §7 — the relative-timestamp form depends on wall-clock state. Dynamic time-travel is exercised at the integration tier (tests/integration/test_time_travel.py).
TABLESAMPLE (excluded — non-deterministic) n/a ⚪ Excluded n/a see ADR 0022 §1.2 / §7
Excluded from the conformance corpus by ADR 0022 §1.2 — TABLESAMPLE SYSTEM is non-deterministic (random sampling). Shape-only coverage lives in unit / integration tiers.
PIVOT 7 🟢🟢 Deep happy×5 / null×2 standard_functions/rw_pivot_count_by_type, standard_functions/rw_pivot_sum_by_type, standard_functions/tpcds_q43, standard_functions/tpcds_q50, standard_functions/tpcds_q53, … (+2 more)
UNPIVOT 1 🟡 Sampled happy×1 standard_functions/rw_unpivot_basic

Procedural scripting

BigQuery reference -- 14 / 14 items covered

Multi-statement scripting features — the interpreter at src/bqemulator/scripting/interpreter.py.

Item Count Tier Variation Fixtures
DECLARE 23 🟢🟢 Deep happy×15 / null×5 / empty×2 / bound×1 api_configuration/session_declared_var_shared, routines_scripting/proc_call_empty_string, routines_scripting/proc_call_in_script, routines_scripting/proc_call_null_arg, routines_scripting/proc_with_inout_param, … (+18 more)
SET (script variable) 36 🟢🟢 Deep happy×28 / null×5 / empty×3 api_configuration/dml_merge_basic, api_configuration/dml_merge_when_matched, api_configuration/dml_update_multi_row, api_configuration/dml_update_single_row, api_configuration/dml_update_with_where, … (+31 more)
IF / ELSEIF / ELSE 3 🟢 Covered happy×2 / null×1 routines_scripting/script_for_null_in_array, routines_scripting/script_if_then, routines_scripting/script_loop_break
WHILE 1 🟡 Sampled happy×1 routines_scripting/script_while
LOOP 1 🟡 Sampled happy×1 routines_scripting/script_loop_break
FOR (loop) 5 🟢 Covered happy×3 / null×1 / empty×1 routines_scripting/script_for_empty_array, routines_scripting/script_for_iterate_into_table, routines_scripting/script_for_iterate_select, routines_scripting/script_for_iterate_with_aggregate, routines_scripting/script_for_null_in_array
BREAK / CONTINUE 1 🟡 Sampled happy×1 routines_scripting/script_loop_break
BEGIN … END (block) 14 🟢🟢 Deep happy×8 / null×3 / empty×3 routines_scripting/proc_basic, routines_scripting/proc_call_empty_string, routines_scripting/proc_call_in_script, routines_scripting/proc_call_null_arg, routines_scripting/proc_with_empty_body, … (+9 more)
BEGIN … EXCEPTION WHEN ERROR 2 🟡 Sampled happy×2 routines_scripting/script_exception_handler, routines_scripting/txn_in_exception_block
RAISE 1 🟡 Sampled error×1 rest_crud/error_alter_nonexistent_table
CALL (procedure) 10 🟢🟢 Deep happy×6 / null×2 / empty×2 routines_scripting/proc_basic, routines_scripting/proc_call_empty_string, routines_scripting/proc_call_in_script, routines_scripting/proc_call_null_arg, routines_scripting/proc_with_empty_body, … (+5 more)
EXECUTE IMMEDIATE 2 🟡 Sampled happy×2 routines_scripting/script_exception_handler, routines_scripting/txn_in_exception_block
RETURN 31 🟢🟢 Deep happy×28 / null×2 / empty×1 routines_scripting/js_udf_array_to_array, routines_scripting/js_udf_in_group_by, routines_scripting/js_udf_int_to_int, routines_scripting/js_udf_json_roundtrip, routines_scripting/js_udf_nested_in_sql_udf, … (+26 more)
BEGIN TRANSACTION / COMMIT / ROLLBACK 5 🟢 Covered happy×3 / null×1 / empty×1 routines_scripting/script_transaction_empty_body, routines_scripting/script_transaction_null_insert, routines_scripting/txn_begin_commit, routines_scripting/txn_begin_rollback, routines_scripting/txn_in_exception_block

Data types

BigQuery reference -- 17 / 17 items covered

Every BigQuery scalar + compound type. Coverage should exercise the type as a column type, in a literal, and through CAST.

Item Count Tier Variation Fixtures
INT64 441 🟢🟢 Deep happy×324 / null×61 / empty×39 / bound×8 / error×19 api_configuration/default_dataset_insert_unqualified, api_configuration/default_dataset_join_partial_qualification, api_configuration/default_dataset_select_table, api_configuration/dest_clustering_fields_basic, api_configuration/dest_clustering_fields_invalid_column, … (+436 more)
FLOAT64 47 🟢🟢 Deep happy×32 / null×8 / bound×7 information_schema/is_columns_partitioning_column, routines_scripting/js_udf_uses_math, standard_functions/agg_approx_count_distinct, standard_functions/agg_approx_quantiles, standard_functions/agg_approx_top_count, … (+42 more)
NUMERIC 222 🟢🟢 Deep happy×192 / null×18 / empty×3 / bound×9 information_schema/is_tables_basic, partitioning_clustering/partition_basic, partitioning_clustering/partition_month_basic, partitioning_clustering/partition_month_pruned, partitioning_clustering/partition_pruned, … (+217 more)
BIGNUMERIC 3 🟢 Covered bound×3 rest_crud/select_bignumeric_literal, standard_functions/bound_bignumeric_max, standard_functions/parse_bignumeric_basic
BOOL 5 🟢 Covered happy×4 / null×1 api_configuration/positional_multi_param, information_schema/is_table_options_partition_filter, routines_scripting/js_udf_uses_regexp, standard_functions/json_value_bool_extractor, standard_functions/null_if_branch
STRING 590 🟢🟢 Deep happy×451 / null×70 / empty×37 / bound×12 / unicode×12 / error×12 / tz×1 api_configuration/cache_disabled_with_join, api_configuration/default_dataset_insert_unqualified, api_configuration/default_dataset_join_partial_qualification, api_configuration/default_dataset_select_table, api_configuration/dest_clustering_fields_basic, … (+585 more)
BYTES 7 🟢🟢 Deep happy×4 / error×3 rest_crud/select_bytes_literal, specialized_types/st_asbinary_point, standard_functions/error_concat_no_args, standard_functions/error_safe_cast_no_swallow_when_invalid_signature, standard_functions/error_substr_wrong_arity, … (+2 more)
DATE 187 🟢🟢 Deep happy×156 / null×14 / empty×3 / bound×8 / error×4 / tz×2 api_configuration/dest_time_partitioning_basic, api_configuration/write_append_partitioned_destination, api_configuration/write_truncate_partitioned_destination, information_schema/is_columns_partitioning_column, information_schema/is_partitions_basic, … (+182 more)
TIME 41 🟢🟢 Deep happy×31 / error×2 / tz×10 rest_crud/select_time_literal, standard_functions/dt_format_time_basic, standard_functions/dt_format_time_fractional, standard_functions/dt_time_add_basic, standard_functions/dt_time_add_wrap_midnight, … (+36 more)
DATETIME 23 🟢🟢 Deep happy×19 / bound×2 / tz×2 rest_crud/select_datetime_literal, specialized_types/interval_arith_add, specialized_types/interval_arith_chain, specialized_types/interval_arith_sub, specialized_types/interval_compound_arith, … (+18 more)
TIMESTAMP 103 🟢🟢 Deep happy×76 / null×3 / bound×5 / error×1 / tz×19 information_schema/is_tables_select_specific_columns, partitioning_clustering/partition_hour_basic, partitioning_clustering/partition_hour_pruned, partitioning_clustering/partition_prune_partitiontime, rest_crud/param_named_timestamp_scalar, … (+98 more)
INTERVAL 45 🟢🟢 Deep happy×39 / null×4 / tz×2 specialized_types/extract_day_from_interval, specialized_types/extract_hour_from_interval, specialized_types/extract_year_from_interval, specialized_types/generate_range_array_date, specialized_types/interval_arith_add, … (+40 more)
RANGE<T> 26 🟢🟢 Deep happy×19 / null×1 / empty×2 / bound×2 / error×2 specialized_types/error_range_sessionize_invalid_mode, specialized_types/generate_range_array_date, specialized_types/range_array_aggregate, specialized_types/range_contains_no, specialized_types/range_contains_yes, … (+21 more)
GEOGRAPHY 3 🟢 Covered happy×2 / null×1 specialized_types/geography_column_basic, specialized_types/geography_column_insert, specialized_types/geography_column_select_filter
JSON 12 🟢🟢 Deep happy×11 / null×1 routines_scripting/js_udf_json_roundtrip, specialized_types/st_asgeojson_in_parse_json_roundtrip, standard_functions/json_array_construct, standard_functions/json_array_insert_at_zero, standard_functions/json_array_insert_nested, … (+7 more)
ARRAY<T> 20 🟢🟢 Deep happy×6 / null×1 / empty×13 / error×2 information_schema/is_columns_with_struct_field, rest_crud/dml_insert_array_value, routines_scripting/js_udf_array_to_array, routines_scripting/js_udf_returns_array_of_struct, routines_scripting/script_for_empty_array, … (+15 more)
STRUCT<...> 5 🟢 Covered happy×4 / empty×1 information_schema/is_columns_with_struct_field, rest_crud/dml_insert_struct_value, routines_scripting/js_udf_returns_array_of_struct, routines_scripting/js_udf_struct_to_struct, routines_scripting/sql_udf_returns_struct

String functions

BigQuery reference -- 51 / 51 items covered

Item Count Tier Variation Fixtures
ASCII 1 🟡 Sampled happy×1 standard_functions/str_ascii_basic
BYTE_LENGTH 3 🟢 Covered unicode×3 standard_functions/unicode_byte_length_ascii, standard_functions/unicode_byte_length_cjk, standard_functions/unicode_byte_length_emoji
CHAR_LENGTH 3 🟢 Covered happy×1 / unicode×2 standard_functions/str_char_length, standard_functions/unicode_cjk_char_length, standard_functions/unicode_combining_char_length
CHR 1 🟡 Sampled happy×1 standard_functions/str_chr_basic
CODE_POINTS_TO_BYTES 2 🟡 Sampled happy×1 / empty×1 standard_functions/str_code_points_to_bytes_basic, standard_functions/str_code_points_to_bytes_empty
CODE_POINTS_TO_STRING 1 🟡 Sampled happy×1 standard_functions/str_code_points_to_string
COLLATE 2 🟡 Sampled happy×1 / error×1 standard_functions/str_collate_binary, standard_functions/str_collate_undci
CONCAT 14 🟢🟢 Deep happy×7 / null×2 / empty×3 / unicode×1 / error×1 rest_crud/dml_insert_select, rest_crud/select_string_concat_fn, routines_scripting/proc_call_empty_string, routines_scripting/proc_call_null_arg, routines_scripting/sql_udf_string_param, … (+9 more)
CONTAINS_SUBSTR 1 🟡 Sampled happy×1 standard_functions/str_contains_substr
ENDS_WITH 5 🟢 Covered happy×3 / null×1 / empty×1 standard_functions/str_ends_with, standard_functions/str_ends_with_empty, standard_functions/str_ends_with_no, standard_functions/str_ends_with_null, standard_functions/str_ends_with_yes
FORMAT 7 🟢🟢 Deep happy×5 / null×1 / empty×1 standard_functions/str_format_empty_pattern, standard_functions/str_format_float, standard_functions/str_format_hex, standard_functions/str_format_int, standard_functions/str_format_null, … (+2 more)
FROM_BASE32 2 🟡 Sampled happy×2 standard_functions/str_from_base32_basic, standard_functions/str_from_base32_padding
FROM_BASE64 1 🟡 Sampled happy×1 standard_functions/str_from_base64
FROM_HEX 2 🟡 Sampled happy×2 specialized_types/st_geogfromwkb_point, standard_functions/str_from_hex
INITCAP 1 🟡 Sampled happy×1 standard_functions/str_initcap
INSTR 2 🟡 Sampled happy×2 standard_functions/str_instr_one_arg, standard_functions/str_instr_three_arg
LEFT 1 🟡 Sampled happy×1 standard_functions/str_left
LENGTH 8 🟢🟢 Deep happy×2 / null×1 / empty×1 / unicode×4 standard_functions/bound_string_long, standard_functions/empty_string_length, standard_functions/null_length, standard_functions/str_length, standard_functions/str_normalize_nfd, … (+3 more)
LOWER 3 🟢 Covered happy×1 / null×1 / unicode×1 standard_functions/null_lower, standard_functions/str_lower, standard_functions/unicode_diacritic_lower
LPAD 2 🟡 Sampled happy×1 / null×1 standard_functions/null_lpad, standard_functions/str_lpad
LTRIM 1 🟡 Sampled happy×1 standard_functions/str_ltrim
NORMALIZE 2 🟡 Sampled unicode×2 standard_functions/str_normalize_nfc, standard_functions/str_normalize_nfd
NORMALIZE_AND_CASEFOLD 1 🟡 Sampled unicode×1 standard_functions/str_normalize_casefold
OCTET_LENGTH 2 🟡 Sampled happy×1 / unicode×1 standard_functions/str_octet_length_ascii, standard_functions/str_octet_length_utf8
REGEXP_CONTAINS 3 🟢 Covered happy×1 / null×1 / unicode×1 standard_functions/null_regexp_contains, standard_functions/str_regexp_contains, standard_functions/unicode_regexp_unicode_class
REGEXP_EXTRACT 2 🟡 Sampled happy×1 / null×1 standard_functions/null_regexp_extract, standard_functions/str_regexp_extract
REGEXP_EXTRACT_ALL 2 🟡 Sampled happy×1 / empty×1 standard_functions/empty_string_regexp_split, standard_functions/str_regexp_extract_all
REGEXP_INSTR 1 🟡 Sampled happy×1 standard_functions/str_regexp_instr
REGEXP_REPLACE 1 🟡 Sampled happy×1 standard_functions/str_regexp_replace
REGEXP_SUBSTR 3 🟢 Covered happy×3 standard_functions/str_regexp_substr_basic, standard_functions/str_regexp_substr_group, standard_functions/str_regexp_substr_no_match
REPEAT 3 🟢 Covered happy×3 standard_functions/bound_string_long, standard_functions/str_repeat, standard_functions/str_repeat_zero
REPLACE 4 🟢 Covered happy×1 / null×1 / empty×2 standard_functions/null_replace, standard_functions/str_replace, standard_functions/str_replace_empty_target, standard_functions/str_replace_with_empty
REVERSE 1 🟡 Sampled happy×1 standard_functions/str_reverse
RIGHT 1 🟡 Sampled happy×1 standard_functions/str_right
RPAD 2 🟡 Sampled happy×1 / null×1 standard_functions/null_rpad, standard_functions/str_rpad
RTRIM 1 🟡 Sampled happy×1 standard_functions/str_rtrim
SAFE_CONVERT_BYTES_TO_STRING 2 🟡 Sampled happy×2 standard_functions/str_from_base64, standard_functions/str_safe_convert_bytes_to_string
SOUNDEX 2 🟡 Sampled happy×1 / unicode×1 standard_functions/str_soundex_basic, standard_functions/str_soundex_nonascii
SPLIT 6 🟢🟢 Deep happy×2 / null×1 / empty×2 / unicode×1 standard_functions/empty_string_split, standard_functions/null_split, standard_functions/str_split, standard_functions/str_split_empty_delim, standard_functions/str_split_limit, … (+1 more)
STARTS_WITH 3 🟢 Covered happy×1 / null×1 / unicode×1 standard_functions/null_starts_with, standard_functions/str_starts_with, standard_functions/unicode_starts_with_cjk
STRPOS 1 🟡 Sampled happy×1 standard_functions/str_strpos
SUBSTR 16 🟢🟢 Deep happy×11 / null×1 / unicode×2 / error×2 partitioning_clustering/wildcard_groupby_suffix, standard_functions/error_safe_cast_no_swallow_when_invalid_signature, standard_functions/error_substr_wrong_arity, standard_functions/null_substr, standard_functions/str_substr_three_arg, … (+11 more)
SUBSTRING 2 🟡 Sampled happy×2 standard_functions/str_substring_basic, standard_functions/str_substring_negative_offset
TO_BASE32 2 🟡 Sampled happy×1 / empty×1 standard_functions/str_to_base32_basic, standard_functions/str_to_base32_empty
TO_BASE64 2 🟡 Sampled happy×2 standard_functions/str_from_hex, standard_functions/str_to_base64
TO_CODE_POINTS 2 🟡 Sampled happy×1 / unicode×1 standard_functions/str_string_to_code_points, standard_functions/unicode_to_code_points
TO_HEX 10 🟢🟢 Deep happy×9 / empty×1 standard_functions/agg_hll_count_init_basic, standard_functions/agg_hll_count_merge_partial_basic, standard_functions/hash_md5, standard_functions/hash_sha1_basic, standard_functions/hash_sha256, … (+5 more)
TRANSLATE 1 🟡 Sampled happy×1 standard_functions/str_translate
TRIM 2 🟡 Sampled happy×1 / null×1 standard_functions/null_trim, standard_functions/str_trim
UNICODE 2 🟡 Sampled unicode×2 standard_functions/str_unicode_ascii, standard_functions/str_unicode_codepoint
UPPER 8 🟢🟢 Deep happy×3 / null×1 / empty×1 / unicode×3 routines_scripting/sql_udf_string_param, standard_functions/empty_string_upper, standard_functions/null_upper, standard_functions/str_upper, standard_functions/tpcds_q24, … (+3 more)

Numeric / math functions

BigQuery reference -- 47 / 47 items covered

Item Count Tier Variation Fixtures
ABS 6 🟢🟢 Deep happy×1 / null×5 rest_crud/arith_abs, standard_functions/null_abs, standard_functions/tpcds_q47, standard_functions/tpcds_q53, standard_functions/tpcds_q57, … (+1 more)
ACOS 1 🟡 Sampled happy×1 standard_functions/math_acos
ACOSH 1 🟡 Sampled happy×1 standard_functions/math_acosh
ASIN 1 🟡 Sampled happy×1 standard_functions/math_asin
ASINH 1 🟡 Sampled happy×1 standard_functions/math_asinh
ATAN 1 🟡 Sampled happy×1 standard_functions/math_atan
ATAN2 1 🟡 Sampled happy×1 standard_functions/math_atan2
ATANH 1 🟡 Sampled happy×1 standard_functions/math_atanh
CBRT 2 🟡 Sampled happy×2 standard_functions/math_cbrt_negative, standard_functions/math_cbrt_positive
CEIL 2 🟡 Sampled happy×1 / null×1 standard_functions/null_ceil, standard_functions/num_ceil
CEILING 2 🟡 Sampled happy×2 standard_functions/math_ceiling_basic, standard_functions/math_ceiling_negative
COS 4 🟢 Covered happy×2 / unicode×2 specialized_types/spheroidal_distance_street_match, specialized_types/spheroidal_high_latitude_distance, standard_functions/math_cos, standard_functions/math_sec
COSH 1 🟡 Sampled happy×1 standard_functions/math_cosh
COT 2 🟡 Sampled happy×2 standard_functions/math_cot_basic, standard_functions/math_cot_negative
COTH 2 🟡 Sampled happy×2 standard_functions/math_coth_basic, standard_functions/math_coth_negative
CSC 2 🟡 Sampled happy×2 standard_functions/math_csc_basic, standard_functions/math_csc_negative
CSCH 2 🟡 Sampled happy×2 standard_functions/math_csch_basic, standard_functions/math_csch_negative
DIV 1 🟡 Sampled happy×1 standard_functions/math_div_int
EXP 2 🟡 Sampled happy×2 standard_functions/num_exp, standard_functions/num_ln
FLOOR 2 🟡 Sampled happy×1 / null×1 standard_functions/null_floor, standard_functions/num_floor
GREATEST 1 🟡 Sampled happy×1 standard_functions/num_greatest
IEEE_DIVIDE 2 🟡 Sampled happy×1 / bound×1 standard_functions/div_zero_ieee_divide_keeps_inf, standard_functions/math_ieee_divide
IS_INF 4 🟢 Covered happy×1 / bound×3 standard_functions/bound_float64_is_inf_finite, standard_functions/bound_float64_isinf, standard_functions/div_zero_ieee_divide_keeps_inf, standard_functions/math_ieee_divide
IS_NAN 2 🟡 Sampled bound×2 standard_functions/bound_float64_isnan, standard_functions/bound_log_negative_returns_nan
LEAST 1 🟡 Sampled happy×1 standard_functions/num_least
LN 4 🟢 Covered happy×2 / bound×1 / error×1 standard_functions/bound_log_negative_returns_nan, standard_functions/bound_neg_log_safe, standard_functions/div_zero_safe_swallows, standard_functions/num_ln
LOG 1 🟡 Sampled happy×1 standard_functions/num_log_basex
LOG10 2 🟡 Sampled happy×1 / null×1 standard_functions/null_log, standard_functions/num_log10
MOD 10 🟢🟢 Deep happy×8 / null×1 / bound×1 rest_crud/arith_mod, standard_functions/agg_grouping_cube, standard_functions/agg_grouping_rollup, standard_functions/agg_grouping_sets, standard_functions/agg_string_agg_distinct, … (+5 more)
POW 3 🟢 Covered happy×2 / null×1 rest_crud/arith_pow, standard_functions/bound_pow_zero_zero, standard_functions/null_pow
POWER 2 🟡 Sampled happy×2 standard_functions/math_power_basic, standard_functions/math_power_fractional
RAND (excluded — non-deterministic) n/a ⚪ Excluded n/a see ADR 0022 §1.2 / §7
Excluded from the conformance corpus by ADR 0022 §1.2 — RAND() is non-deterministic. The function is property-tested via Hypothesis (uniformity, range bounds).
RANGE_BUCKET 5 🟢 Covered happy×3 / null×1 / empty×1 partitioning_clustering/partition_int_range, partitioning_clustering/partition_int_range_pruned, standard_functions/math_range_bucket, standard_functions/math_range_bucket_empty_bounds, standard_functions/math_range_bucket_null
ROUND 63 🟢🟢 Deep happy×61 / null×2 standard_functions/agg_corr, standard_functions/agg_covar_pop, standard_functions/agg_covar_samp, standard_functions/agg_stddev_basic, standard_functions/agg_stddev_pop, … (+58 more)
SAFE_ADD 2 🟡 Sampled happy×1 / bound×1 standard_functions/bound_int64_overflow_safe, standard_functions/math_safe_add
SAFE_DIVIDE 7 🟢🟢 Deep happy×5 / null×1 / bound×1 rest_crud/arith_div_safe, standard_functions/bound_zero_div_safe, standard_functions/bound_zero_div_safe_zero, standard_functions/math_div_safe, standard_functions/math_safe_divide_boundary, … (+2 more)
SAFE_MULTIPLY 1 🟡 Sampled happy×1 standard_functions/math_safe_multiply
SAFE_NEGATE 2 🟡 Sampled happy×1 / bound×1 standard_functions/math_safe_negate, standard_functions/math_safe_negate_overflow
SAFE_SUBTRACT 1 🟡 Sampled happy×1 standard_functions/math_safe_subtract
SEC 2 🟡 Sampled happy×2 standard_functions/math_sec_basic, standard_functions/math_sec_negative
SECH 2 🟡 Sampled happy×2 standard_functions/math_sech_basic, standard_functions/math_sech_negative
SIGN 5 🟢 Covered happy×3 / null×1 / bound×1 standard_functions/math_sign_inf, standard_functions/math_sign_null, standard_functions/num_sign_neg, standard_functions/num_sign_pos, standard_functions/num_sign_zero
SIN 2 🟡 Sampled happy×2 standard_functions/math_csc, standard_functions/math_sin
SINH 1 🟡 Sampled happy×1 standard_functions/math_sinh
SQRT 4 🟢 Covered happy×3 / null×1 routines_scripting/js_udf_uses_math, standard_functions/bound_neg_sqrt_safe, standard_functions/null_sqrt, standard_functions/num_sqrt
TAN 2 🟡 Sampled happy×2 standard_functions/math_cot, standard_functions/math_tan
TANH 1 🟡 Sampled happy×1 standard_functions/math_tanh
TRUNC 1 🟡 Sampled happy×1 standard_functions/num_trunc

Date / time / timestamp / datetime functions

BigQuery reference -- 40 / 40 items covered

Item Count Tier Variation Fixtures
CURRENT_DATE (excluded — non-deterministic) n/a ⚪ Excluded n/a see ADR 0022 §1.2 / §7
Excluded from the conformance corpus by ADR 0022 §1.2 / §7 — wall-clock dependent. Static-date queries are exercised indirectly via DATE_ADD/DATE_SUB fixtures.
CURRENT_DATETIME (excluded — non-deterministic) n/a ⚪ Excluded n/a see ADR 0022 §1.2 / §7
Excluded from the conformance corpus by ADR 0022 §1.2 / §7 — wall-clock dependent.
CURRENT_TIME (excluded — non-deterministic) n/a ⚪ Excluded n/a see ADR 0022 §1.2 / §7
Excluded from the conformance corpus by ADR 0022 §1.2 / §7 — wall-clock dependent.
CURRENT_TIMESTAMP (excluded — non-deterministic) n/a ⚪ Excluded n/a see ADR 0022 §1.2 / §7
Excluded from the conformance corpus by ADR 0022 §1.2 / §7 — wall-clock dependent. The function is exercised in unit / integration tiers where the harness pins time.
DATE 3 🟢 Covered happy×3 standard_functions/dt_date_constructor, standard_functions/rw_daily_revenue, standard_functions/tpcds_q79
DATETIME 2 🟡 Sampled happy×1 / tz×1 standard_functions/dt_datetime_constructor, standard_functions/tz_datetime_from_timestamp_named_zone
DATE_ADD 12 🟢🟢 Deep happy×8 / null×4 standard_functions/dt_date_add_day, standard_functions/null_date_add, standard_functions/tpcds_q12, standard_functions/tpcds_q16, standard_functions/tpcds_q20, … (+7 more)
DATE_DIFF 6 🟢🟢 Deep happy×5 / null×1 specialized_types/date_diff_day, specialized_types/date_diff_month, specialized_types/date_diff_year, standard_functions/dt_date_diff_day, standard_functions/dt_date_diff_year, … (+1 more)
DATE_FROM_UNIX_DATE 1 🟡 Sampled happy×1 standard_functions/dt_date_from_unix_date
DATE_SUB 2 🟡 Sampled happy×1 / null×1 standard_functions/dt_date_sub_day, standard_functions/tpcds_q21
DATE_TRUNC 11 🟢🟢 Deep happy×9 / null×1 / bound×1 partitioning_clustering/partition_month_basic, partitioning_clustering/partition_month_pruned, partitioning_clustering/partition_year_basic, partitioning_clustering/partition_year_pruned, standard_functions/dt_date_trunc_isoyear, … (+6 more)
DATETIME_ADD 1 🟡 Sampled happy×1 standard_functions/dt_datetime_add
DATETIME_DIFF 2 🟡 Sampled happy×2 standard_functions/dt_datetime_diff_hour, standard_functions/dt_datetime_diff_minute
DATETIME_SUB 1 🟡 Sampled happy×1 standard_functions/dt_datetime_sub
DATETIME_TRUNC 2 🟡 Sampled happy×2 standard_functions/dt_datetime_trunc, standard_functions/dt_datetime_trunc_day
EXTRACT 32 🟢🟢 Deep happy×22 / null×1 / error×1 / tz×9 partitioning_clustering/partition_year_pruned, specialized_types/extract_day_from_interval, specialized_types/extract_hour_from_interval, specialized_types/extract_year_from_interval, specialized_types/interval_extract_microsecond, … (+27 more)
FORMAT_DATE 5 🟢 Covered happy×3 / null×1 / bound×1 standard_functions/dt_format_date, standard_functions/dt_format_date_min, standard_functions/dt_format_date_null, standard_functions/dt_format_date_pct_a, standard_functions/dt_format_date_pct_b
FORMAT_DATETIME 2 🟡 Sampled happy×2 standard_functions/dt_format_datetime_basic, standard_functions/dt_format_datetime_iso_week
FORMAT_TIME 2 🟡 Sampled happy×2 standard_functions/dt_format_time_basic, standard_functions/dt_format_time_fractional
FORMAT_TIMESTAMP 3 🟢 Covered happy×2 / tz×1 standard_functions/dt_format_timestamp, standard_functions/dt_format_timestamp_with_tz, standard_functions/tz_format_timestamp_named_zone
GENERATE_DATE_ARRAY 1 🟡 Sampled happy×1 standard_functions/arr_generate_date_array
GENERATE_TIMESTAMP_ARRAY 3 🟢 Covered happy×3 standard_functions/dt_generate_timestamp_array_basic, standard_functions/dt_generate_timestamp_array_descending, standard_functions/dt_generate_timestamp_array_step_minute
LAST_DAY 5 🟢 Covered happy×3 / null×1 / bound×1 standard_functions/dt_last_day_min, standard_functions/dt_last_day_month, standard_functions/dt_last_day_null, standard_functions/dt_last_day_week, standard_functions/dt_last_day_year
PARSE_DATE 2 🟡 Sampled happy×2 standard_functions/dt_parse_date, standard_functions/parse_date_format
PARSE_DATETIME 2 🟡 Sampled happy×2 standard_functions/dt_parse_datetime_basic, standard_functions/dt_parse_datetime_iso
PARSE_TIME 1 🟡 Sampled happy×1 standard_functions/parse_time_format
PARSE_TIMESTAMP 3 🟢 Covered happy×1 / error×1 / tz×2 standard_functions/parse_timestamp_format, standard_functions/tz_parse_timestamp_with_named_zone, standard_functions/tz_parse_timestamp_with_offset
TIME 2 🟡 Sampled happy×2 standard_functions/dt_time_constructor_hms, standard_functions/dt_time_from_timestamp
TIME_ADD 2 🟡 Sampled happy×2 standard_functions/dt_time_add_basic, standard_functions/dt_time_add_wrap_midnight
TIME_DIFF 2 🟡 Sampled happy×2 standard_functions/dt_time_diff_microsecond, standard_functions/dt_time_diff_seconds
TIME_SUB 2 🟡 Sampled happy×2 standard_functions/dt_time_sub_basic, standard_functions/dt_time_sub_wrap_midnight
TIME_TRUNC 2 🟡 Sampled happy×2 standard_functions/dt_time_trunc_hour, standard_functions/dt_time_trunc_minute
TIMESTAMP 2 🟡 Sampled happy×1 / tz×1 standard_functions/dt_timestamp_constructor, standard_functions/tz_timestamp_from_datetime_named_zone
TIMESTAMP_ADD 4 🟢 Covered happy×2 / tz×2 specialized_types/interval_with_timestamp_add, standard_functions/dt_timestamp_add_seconds, standard_functions/tz_timestamp_add_across_dst_fall, standard_functions/tz_timestamp_add_across_dst_spring
TIMESTAMP_DIFF 7 🟢🟢 Deep happy×5 / null×1 / tz×1 standard_functions/dt_timestamp_diff_hour, standard_functions/dt_timestamp_diff_millisecond, standard_functions/dt_timestamp_diff_minute, standard_functions/dt_timestamp_diff_seconds, standard_functions/rw_self_join_lag, … (+2 more)
TIMESTAMP_MICROS 1 🟡 Sampled bound×1 standard_functions/dt_timestamp_micros
TIMESTAMP_MILLIS 1 🟡 Sampled happy×1 standard_functions/dt_timestamp_millis
TIMESTAMP_SECONDS 2 🟡 Sampled happy×1 / tz×1 standard_functions/dt_timestamp_seconds, standard_functions/tz_timestamp_seconds_round_trip
TIMESTAMP_SUB 1 🟡 Sampled happy×1 standard_functions/dt_timestamp_sub
TIMESTAMP_TRUNC 9 🟢🟢 Deep happy×5 / null×1 / bound×1 / tz×2 partitioning_clustering/partition_hour_basic, partitioning_clustering/partition_hour_pruned, standard_functions/dt_timestamp_trunc_day, standard_functions/dt_timestamp_trunc_hour, standard_functions/dt_timestamp_trunc_min, … (+4 more)
UNIX_DATE 1 🟡 Sampled happy×1 standard_functions/dt_unix_date
UNIX_MICROS 1 🟡 Sampled happy×1 standard_functions/dt_unix_micros
UNIX_MILLIS 1 🟡 Sampled happy×1 standard_functions/dt_unix_millis
UNIX_SECONDS 3 🟢 Covered happy×2 / tz×1 standard_functions/dt_unix_seconds, standard_functions/rw_window_range_between, standard_functions/tz_timestamp_seconds_round_trip

Aggregate functions

BigQuery reference -- 35 / 35 items covered

Item Count Tier Variation Fixtures
ANY_VALUE 1 🟡 Sampled happy×1 standard_functions/agg_any_value
ARRAY_AGG 5 🟢 Covered happy×3 / null×1 / empty×1 standard_functions/agg_array_agg, standard_functions/agg_array_agg_empty, standard_functions/agg_array_agg_ordered, standard_functions/rw_array_agg_ignore_nulls, standard_functions/rw_array_agg_with_filter
ARRAY_CONCAT_AGG 3 🟢 Covered happy×2 / null×1 standard_functions/agg_array_concat_basic, standard_functions/agg_array_concat_ordered, standard_functions/agg_array_concat_with_null
AVG 29 🟢🟢 Deep happy×22 / null×6 / empty×1 rest_crud/select_avg, row_access/rap_filter_with_subquery, standard_functions/agg_avg, standard_functions/agg_avg_empty, standard_functions/rw_window_rows_between, … (+24 more)
BIT_AND 1 🟡 Sampled happy×1 standard_functions/agg_bit_and
BIT_OR 1 🟡 Sampled happy×1 standard_functions/agg_bit_or
BIT_XOR 1 🟡 Sampled happy×1 standard_functions/agg_bit_xor
COUNT 85 🟢🟢 Deep happy×64 / null×5 / empty×15 / bound×1 api_configuration/cache_disabled_with_count_distinct, api_configuration/job_timeout_exceeded, api_configuration/max_bytes_billed_exceeded, information_schema/is_partitions_empty_table, information_schema/is_schemata_empty_project, … (+80 more)
COUNTIF 5 🟢 Covered happy×3 / null×2 / empty×1 rest_crud/select_count_if, standard_functions/agg_countif, standard_functions/agg_countif_empty, standard_functions/agg_countif_null_predicate, standard_functions/rw_funnel_conversion_pct
GROUPING 6 🟢🟢 Deep happy×6 standard_functions/agg_grouping_func_cube, standard_functions/agg_grouping_func_rollup, standard_functions/tpcds_q27, standard_functions/tpcds_q36, standard_functions/tpcds_q70, … (+1 more)
LOGICAL_AND 2 🟡 Sampled happy×2 standard_functions/agg_logical_and, standard_functions/agg_logical_and_mixed
LOGICAL_OR 2 🟡 Sampled happy×2 standard_functions/agg_logical_or, standard_functions/agg_logical_or_mixed
MAX 9 🟢🟢 Deep happy×3 / null×2 / empty×1 / bound×5 rest_crud/select_min_max, standard_functions/agg_max_empty, standard_functions/agg_max_null_col, standard_functions/agg_min_max, standard_functions/rw_correlated_subquery_max, … (+4 more)
MAX_BY 3 🟢 Covered null×1 / bound×3 standard_functions/agg_max_by_basic, standard_functions/agg_max_by_grouped, standard_functions/agg_max_by_null_keys
MIN 7 🟢🟢 Deep happy×5 / bound×2 rest_crud/select_min_max, standard_functions/agg_min_max, standard_functions/rw_cte_correlated, standard_functions/rw_first_seen_per_user, standard_functions/rw_funnel_first_event, … (+2 more)
MIN_BY 3 🟢 Covered null×1 / bound×3 standard_functions/agg_min_by_basic, standard_functions/agg_min_by_grouped, standard_functions/agg_min_by_null_keys
STRING_AGG 5 🟢 Covered happy×3 / empty×2 standard_functions/agg_string_agg_basic, standard_functions/agg_string_agg_distinct, standard_functions/agg_string_agg_empty, standard_functions/agg_string_agg_limit, standard_functions/agg_string_agg_separator
SUM 100 🟢🟢 Deep happy×77 / null×18 / empty×3 / error×2 api_configuration/default_dataset_join_partial_qualification, api_configuration/dry_run_aggregate, rest_crud/cte_basic, rest_crud/select_sum, rest_crud/subquery_scalar, … (+95 more)
CORR 1 🟡 Sampled happy×1 standard_functions/agg_corr
COVAR_POP 1 🟡 Sampled happy×1 standard_functions/agg_covar_pop
COVAR_SAMP 1 🟡 Sampled happy×1 standard_functions/agg_covar_samp
STDDEV 2 🟡 Sampled happy×2 standard_functions/agg_stddev_basic, standard_functions/agg_stddev_single
STDDEV_POP 1 🟡 Sampled happy×1 standard_functions/agg_stddev_pop
STDDEV_SAMP 3 🟢 Covered happy×2 / null×1 standard_functions/agg_stddev_samp, standard_functions/tpcds_q17, standard_functions/tpcds_q39
VAR_POP 1 🟡 Sampled happy×1 standard_functions/agg_var_pop
VAR_SAMP 1 🟡 Sampled happy×1 standard_functions/agg_var_samp
VARIANCE 2 🟡 Sampled happy×2 standard_functions/agg_variance_basic, standard_functions/agg_variance_single
APPROX_COUNT_DISTINCT 1 🟡 Sampled happy×1 standard_functions/agg_approx_count_distinct
APPROX_QUANTILES 1 🟡 Sampled happy×1 standard_functions/agg_approx_quantiles
APPROX_TOP_COUNT 1 🟡 Sampled happy×1 standard_functions/agg_approx_top_count
APPROX_TOP_SUM 1 🟡 Sampled happy×1 standard_functions/agg_approx_top_sum
HLL_COUNT.INIT 4 🟢 Covered happy×4 standard_functions/agg_hll_count_extract_basic, standard_functions/agg_hll_count_init_basic, standard_functions/agg_hll_count_merge_basic, standard_functions/agg_hll_count_merge_partial_basic
HLL_COUNT.MERGE 1 🟡 Sampled happy×1 standard_functions/agg_hll_count_merge_basic
HLL_COUNT.MERGE_PARTIAL 1 🟡 Sampled happy×1 standard_functions/agg_hll_count_merge_partial_basic
HLL_COUNT.EXTRACT 1 🟡 Sampled happy×1 standard_functions/agg_hll_count_extract_basic

Array functions

BigQuery reference -- 12 / 12 items covered

Item Count Tier Variation Fixtures
ARRAY 2 🟡 Sampled happy×2 standard_functions/rw_array_filter, standard_functions/rw_array_subquery
ARRAY_CONCAT 2 🟡 Sampled happy×1 / empty×1 standard_functions/arr_concat, standard_functions/empty_array_concat
ARRAY_LENGTH 9 🟢🟢 Deep happy×7 / empty×1 / unicode×1 specialized_types/st_dump_multipoint, standard_functions/agg_approx_top_count, standard_functions/agg_approx_top_sum, standard_functions/arr_length, standard_functions/bound_array_size_zero, … (+4 more)
ARRAY_REVERSE 1 🟡 Sampled happy×1 standard_functions/arr_reverse
ARRAY_TO_STRING 3 🟢 Covered happy×2 / null×1 standard_functions/arr_to_string, standard_functions/arr_to_string_with_nulls, standard_functions/str_array_to_string
GENERATE_ARRAY 7 🟢🟢 Deep happy×6 / bound×1 api_configuration/job_timeout_exceeded, api_configuration/max_bytes_billed_exceeded, partitioning_clustering/partition_int_range, partitioning_clustering/partition_int_range_pruned, standard_functions/arr_generate_array, … (+2 more)
ARRAY_FIRST 2 🟡 Sampled happy×1 / empty×1 / error×1 standard_functions/arr_first_basic, standard_functions/arr_first_empty
ARRAY_LAST 2 🟡 Sampled happy×1 / empty×1 / error×1 standard_functions/arr_last_basic, standard_functions/arr_last_empty
OFFSET 1 🟡 Sampled happy×1 standard_functions/arr_offset
ORDINAL 1 🟡 Sampled happy×1 standard_functions/arr_ordinal
SAFE_OFFSET 1 🟡 Sampled happy×1 standard_functions/arr_safe_offset
SAFE_ORDINAL 2 🟡 Sampled happy×2 standard_functions/arr_safe_ordinal_in_bounds, standard_functions/arr_safe_ordinal_oob

JSON functions

BigQuery reference -- 27 / 27 items covered

Item Count Tier Variation Fixtures
JSON_EXTRACT 3 🟢 Covered happy×3 standard_functions/json_extract_arr, standard_functions/json_extract_obj, standard_functions/json_extract_str
JSON_EXTRACT_SCALAR 3 🟢 Covered happy×3 standard_functions/json_extract_scalar_boolean, standard_functions/json_extract_scalar_number, standard_functions/json_extract_scalar_string
JSON_EXTRACT_ARRAY 2 🟡 Sampled happy×2 standard_functions/json_extract_array_basic, standard_functions/json_extract_array_objects
JSON_EXTRACT_STRING_ARRAY 2 🟡 Sampled happy×1 / unicode×1 standard_functions/json_extract_string_array_basic, standard_functions/json_extract_string_array_unicode
JSON_QUERY 2 🟡 Sampled happy×2 standard_functions/json_extract_path, standard_functions/json_query_basic
JSON_QUERY_ARRAY 1 🟡 Sampled happy×1 standard_functions/json_query_array
JSON_VALUE 5 🟢 Covered happy×4 / null×1 standard_functions/json_array_index, standard_functions/json_contains_path, standard_functions/json_extract_value, standard_functions/json_path_dot, standard_functions/json_value_basic
JSON_VALUE_ARRAY 1 🟡 Sampled happy×1 standard_functions/json_value_array
JSON_TYPE 1 🟡 Sampled happy×1 standard_functions/json_type_object
JSON_OBJECT 1 🟡 Sampled happy×1 standard_functions/json_object_construct
JSON_ARRAY 1 🟡 Sampled happy×1 standard_functions/json_array_construct
JSON_ARRAY_INSERT 2 🟡 Sampled happy×2 standard_functions/json_array_insert_at_zero, standard_functions/json_array_insert_nested
JSON_REMOVE 1 🟡 Sampled happy×1 standard_functions/json_remove
JSON_SET 1 🟡 Sampled happy×1 standard_functions/json_set
JSON_STRIP_NULLS 1 🟡 Sampled null×1 standard_functions/json_strip_nulls
JSON_KEYS 2 🟡 Sampled happy×2 standard_functions/json_keys, standard_functions/json_size
PARSE_JSON 16 🟢🟢 Deep happy×15 / null×1 specialized_types/st_asgeojson_in_parse_json_roundtrip, standard_functions/json_keys, standard_functions/json_lax_bool, standard_functions/json_lax_double, standard_functions/json_lax_int64, … (+11 more)
TO_JSON 2 🟡 Sampled happy×2 standard_functions/json_to_json_array, standard_functions/json_to_json_struct
TO_JSON_STRING 2 🟡 Sampled happy×2 standard_functions/json_concat, standard_functions/json_to_json_string
BOOL 1 🟡 Sampled happy×1 standard_functions/json_value_bool_extractor
FLOAT64 1 🟡 Sampled happy×1 standard_functions/json_value_float_extractor
INT64 1 🟡 Sampled happy×1 standard_functions/json_value_int_extractor
STRING 1 🟡 Sampled happy×1 standard_functions/json_value_string_extractor
LAX_BOOL 1 🟡 Sampled happy×1 standard_functions/json_lax_bool
LAX_FLOAT64 1 🟡 Sampled happy×1 standard_functions/json_lax_double
LAX_INT64 1 🟡 Sampled happy×1 standard_functions/json_lax_int64
LAX_STRING 1 🟡 Sampled happy×1 standard_functions/json_lax_string

GEOGRAPHY functions

BigQuery reference -- 46 / 47 items covered

Spheroidal-vs-planar divergences here are documented in ADR 0019 and out-of-scope.md (continental-scale comparisons are pinned as expected mismatches).

Item Count Tier Variation Fixtures
ST_GEOGPOINT 38 🟢🟢 Deep happy×30 / null×1 / unicode×7 specialized_types/geography_column_basic, specialized_types/geography_column_select_filter, specialized_types/numeric_in_geog_predicate, specialized_types/spheroidal_buffer_neighborhood_match, specialized_types/spheroidal_buffer_state_xfail, … (+33 more)
ST_GEOGFROMTEXT 68 🟢🟢 Deep happy×60 / empty×3 / bound×1 / unicode×4 specialized_types/geography_column_insert, specialized_types/spheroidal_area_city_match, specialized_types/spheroidal_area_neighborhood_match, specialized_types/spheroidal_area_state_xfail, specialized_types/spheroidal_length_city_match, … (+63 more)
ST_GEOGFROMGEOJSON 1 🟡 Sampled happy×1 specialized_types/st_geogfromgeojson_point
ST_GEOGFROMWKB 1 🟡 Sampled happy×1 specialized_types/st_geogfromwkb_point
ST_ASTEXT 17 🟢🟢 Deep happy×17 specialized_types/geography_column_basic, specialized_types/spheroidal_buffer_neighborhood_match, specialized_types/spheroidal_buffer_state_xfail, specialized_types/spheroidal_buffer_street_match, specialized_types/st_astext_point, … (+12 more)
ST_ASGEOJSON 9 🟢🟢 Deep happy×8 / empty×1 specialized_types/st_asgeojson_empty_point, specialized_types/st_asgeojson_geometrycollection, specialized_types/st_asgeojson_in_parse_json_roundtrip, specialized_types/st_asgeojson_linestring, specialized_types/st_asgeojson_multilinestring, … (+4 more)
ST_ASBINARY 1 🟡 Sampled happy×1 specialized_types/st_asbinary_point
ST_BOUNDARY 1 🟡 Sampled bound×1 specialized_types/st_boundary_polygon
ST_CENTROID 1 🟡 Sampled happy×1 specialized_types/st_centroid_polygon
ST_CLOSESTPOINT 1 🟡 Sampled happy×1 specialized_types/st_closestpoint_basic
ST_CLUSTERDBSCAN 0 🔴 Uncovered gap
ST_CONVEXHULL 1 🟡 Sampled happy×1 specialized_types/st_convexhull_points
ST_DIFFERENCE 1 🟡 Sampled happy×1 specialized_types/st_difference_planar
ST_DUMP 1 🟡 Sampled happy×1 specialized_types/st_dump_multipoint
ST_DWITHIN 2 🟡 Sampled happy×2 specialized_types/st_dwithin_no, specialized_types/st_dwithin_yes
ST_DIMENSION 6 🟢🟢 Deep happy×6 specialized_types/st_dimension_line, specialized_types/st_dimension_point, specialized_types/st_dimension_polygon, specialized_types/st_geogfromtext_multilinestring, specialized_types/st_geogfromtext_multipolygon, … (+1 more)
ST_DISJOINT 2 🟡 Sampled happy×2 specialized_types/st_disjoint_no, specialized_types/st_disjoint_yes
ST_DISTANCE 8 🟢🟢 Deep happy×1 / unicode×7 specialized_types/spheroidal_distance_city_match, specialized_types/spheroidal_distance_metro_close_or_xfail, specialized_types/spheroidal_distance_national_xfail, specialized_types/spheroidal_distance_neighborhood_match, specialized_types/spheroidal_distance_state_xfail, … (+3 more)
ST_EQUALS 1 🟡 Sampled happy×1 specialized_types/st_equals_basic
ST_INTERSECTION 1 🟡 Sampled happy×1 specialized_types/st_intersection_polygons
ST_INTERSECTS 3 🟢 Covered happy×3 specialized_types/numeric_in_geog_predicate, specialized_types/st_intersects_no, specialized_types/st_intersects_yes
ST_INTERSECTSBOX 2 🟡 Sampled happy×2 specialized_types/st_intersectsbox_no, specialized_types/st_intersectsbox_yes
ST_ISCLOSED 1 🟡 Sampled happy×1 specialized_types/st_isclosed_closed
ST_ISCOLLECTION 2 🟡 Sampled happy×2 specialized_types/st_geogfromtext_collection, specialized_types/st_isclosed_line
ST_ISEMPTY 2 🟡 Sampled empty×2 specialized_types/st_isempty_no, specialized_types/st_isempty_yes
ST_ISRING 1 🟡 Sampled happy×1 specialized_types/st_isring_basic
ST_LENGTH 3 🟢 Covered happy×2 / unicode×1 specialized_types/spheroidal_length_city_match, specialized_types/spheroidal_length_state_xfail, specialized_types/st_length_continental
ST_MAKELINE 1 🟡 Sampled happy×1 specialized_types/st_makeline_basic
ST_MAKEPOLYGON 1 🟡 Sampled happy×1 specialized_types/st_makepolygon_basic
ST_MAKEPOLYGONORIENTED 1 🟡 Sampled happy×1 specialized_types/st_makepolygonoriented_basic
ST_MAXDISTANCE 1 🟡 Sampled happy×1 specialized_types/st_maxdistance_basic
ST_NPOINTS 7 🟢🟢 Deep happy×7 specialized_types/st_endpoint_line, specialized_types/st_geogfromtext_multipoint, specialized_types/st_isring_line, specialized_types/st_makeline_basic, specialized_types/st_npoints_line, … (+2 more)
ST_PERIMETER 1 🟡 Sampled happy×1 specialized_types/st_perimeter_continental
ST_POINTN 1 🟡 Sampled happy×1 specialized_types/st_pointn_first
ST_SIMPLIFY 1 🟡 Sampled happy×1 specialized_types/st_simplify_planar
ST_SNAPTOGRID 1 🟡 Sampled happy×1 specialized_types/st_snaptogrid_basic
ST_TOUCHES 2 🟡 Sampled happy×2 specialized_types/st_touches_no, specialized_types/st_touches_yes
ST_UNION 1 🟡 Sampled happy×1 specialized_types/st_union_points
ST_UNION_AGG 1 🟡 Sampled happy×1 specialized_types/st_union_agg_basic
ST_WITHIN 2 🟡 Sampled happy×2 specialized_types/st_within_no, specialized_types/st_within_yes
ST_X 1 🟡 Sampled happy×1 specialized_types/st_x_basic
ST_Y 1 🟡 Sampled happy×1 specialized_types/st_y_basic
ST_AREA 4 🟢 Covered happy×1 / unicode×3 specialized_types/spheroidal_area_city_match, specialized_types/spheroidal_area_neighborhood_match, specialized_types/spheroidal_area_state_xfail, specialized_types/st_area_continental
ST_BUFFER 4 🟢 Covered happy×4 specialized_types/spheroidal_buffer_neighborhood_match, specialized_types/spheroidal_buffer_state_xfail, specialized_types/spheroidal_buffer_street_match, specialized_types/st_buffer_continental
ST_CONTAINS 2 🟡 Sampled happy×2 specialized_types/st_contains_no, specialized_types/st_contains_yes
ST_COVERS 1 🟡 Sampled happy×1 specialized_types/st_covers_yes
ST_COVEREDBY 1 🟡 Sampled happy×1 specialized_types/st_coveredby_yes

Conversion / type functions

BigQuery reference -- 4 / 4 items covered

Item Count Tier Variation Fixtures
CAST 91 🟢🟢 Deep happy×15 / null×61 / empty×10 / bound×7 / error×4 api_configuration/schema_update_relaxation_rejected_without_option, api_configuration/schema_update_relaxation_required_to_nullable, api_configuration/use_query_cache_disabled, rest_crud/cmp_is_null, rest_crud/coalesce_basic, … (+86 more)
SAFE_CAST 3 🟢 Covered happy×1 / null×1 / bound×1 standard_functions/bound_log_negative_returns_nan, standard_functions/null_safe_cast_str_int, standard_functions/safe_cast_invalid
PARSE_NUMERIC 1 🟡 Sampled happy×1 standard_functions/parse_numeric_basic
PARSE_BIGNUMERIC 1 🟡 Sampled bound×1 standard_functions/parse_bignumeric_basic

Conditional functions

BigQuery reference -- 4 / 4 items covered

Item Count Tier Variation Fixtures
COALESCE 8 🟢🟢 Deep happy×5 / null×3 rest_crud/coalesce_basic, rest_crud/join_right_three_way, standard_functions/null_coalesce_all, standard_functions/tpcds_q49, standard_functions/tpcds_q67, … (+3 more)
IF 4 🟢 Covered happy×1 / null×3 rest_crud/if_expr, standard_functions/null_if_branch, standard_functions/rw_array_agg_ignore_nulls, standard_functions/rw_session_count
IFNULL 6 🟢🟢 Deep null×5 / empty×1 rest_crud/ifnull_basic, routines_scripting/proc_call_null_arg, routines_scripting/proc_with_null_default, routines_scripting/tvf_with_null_input, standard_functions/empty_array_aggsum, … (+1 more)
NULLIF 3 🟢 Covered null×3 rest_crud/nullif_eq, rest_crud/nullif_neq, standard_functions/null_nullif_passthrough

Hash / security functions

BigQuery reference -- 5 / 5 items covered

Item Count Tier Variation Fixtures
FARM_FINGERPRINT 2 🟡 Sampled happy×2 standard_functions/hash_farm_fingerprint, standard_functions/math_rand_ish_deterministic
MD5 2 🟡 Sampled happy×2 standard_functions/hash_md5, standard_functions/hash_to_hex_md5
SHA1 1 🟡 Sampled happy×1 standard_functions/hash_sha1_basic
SHA256 1 🟡 Sampled happy×1 standard_functions/hash_sha256
SHA512 1 🟡 Sampled happy×1 standard_functions/hash_sha512_basic
SESSION_USER (excluded — non-deterministic) n/a ⚪ Excluded n/a see ADR 0022 §1.2 / §7
Excluded from the conformance corpus by ADR 0022 §1.2 — session-state dependent. Exercised at the unit, integration, and e2e × 4 client tiers (ADR 0038); Storage Read row_restriction caller-threading closed in ADR 0040.
CURRENT_USER (excluded — non-deterministic) n/a ⚪ Excluded n/a see ADR 0022 §1.2 / §7
Excluded from the conformance corpus by ADR 0022 §1.2 — co-equal alias for SESSION_USER per BigQuery's reference. Exercised at the unit and e2e × 4 client tiers; same resolution path as SESSION_USER (ADR 0040).
GENERATE_UUID (excluded — non-deterministic) n/a ⚪ Excluded n/a see ADR 0022 §1.2 / §7
Excluded from the conformance corpus by ADR 0022 §1.2 — non-deterministic. Property-tested via Hypothesis for shape / uniqueness.

Window / navigation functions

BigQuery reference -- 13 / 13 items covered

Item Count Tier Variation Fixtures
ROW_NUMBER 6 🟢🟢 Deep happy×5 / empty×1 rest_crud/win_row_number, standard_functions/rw_distinct_on, standard_functions/rw_qualify_basic, standard_functions/rw_qualify_top_n, standard_functions/rw_window_row_number, … (+1 more)
RANK 11 🟢🟢 Deep happy×8 / null×3 rest_crud/win_rank, standard_functions/rw_double_cte, standard_functions/rw_top_event_type, standard_functions/tpcds_q36, standard_functions/tpcds_q44, … (+6 more)
DENSE_RANK 1 🟡 Sampled happy×1 rest_crud/win_dense_rank
PERCENT_RANK 1 🟡 Sampled happy×1 standard_functions/rw_window_percent_rank
CUME_DIST 1 🟡 Sampled happy×1 standard_functions/rw_window_cume_dist
NTILE 1 🟡 Sampled happy×1 standard_functions/rw_window_ntile
LAG 4 🟢 Covered happy×3 / null×1 rest_crud/win_lag, standard_functions/rw_purchase_following_view, standard_functions/rw_self_join_lag, standard_functions/rw_session_count
LEAD 1 🟡 Sampled happy×1 rest_crud/win_lead
FIRST_VALUE 1 🟡 Sampled happy×1 standard_functions/rw_window_first_value
LAST_VALUE 1 🟡 Sampled happy×1 standard_functions/rw_window_last_value
NTH_VALUE 1 🟡 Sampled happy×1 standard_functions/rw_window_nth_value_2
PERCENTILE_CONT 2 🟡 Sampled happy×2 standard_functions/agg_percentile_cont_50, standard_functions/agg_percentile_cont_95
PERCENTILE_DISC 1 🟡 Sampled happy×1 standard_functions/agg_percentile_disc_50

INTERVAL / RANGE functions

BigQuery reference -- 12 / 12 items covered

Item Count Tier Variation Fixtures
JUSTIFY_DAYS 1 🟡 Sampled happy×1 specialized_types/justify_days_basic
JUSTIFY_HOURS 1 🟡 Sampled happy×1 specialized_types/justify_hours_basic
JUSTIFY_INTERVAL 1 🟡 Sampled happy×1 specialized_types/justify_interval_basic
MAKE_INTERVAL 1 🟡 Sampled happy×1 specialized_types/make_interval_basic
RANGE 7 🟢🟢 Deep happy×6 / null×1 specialized_types/range_constructor_basic, specialized_types/range_end_basic, specialized_types/range_start_basic, standard_functions/tpcds_q34, standard_functions/tpcds_q37, … (+2 more)
RANGE_CONTAINS 2 🟡 Sampled happy×2 specialized_types/range_contains_no, specialized_types/range_contains_yes
RANGE_END 1 🟡 Sampled happy×1 specialized_types/range_end_basic
RANGE_INTERSECT 1 🟡 Sampled happy×1 specialized_types/range_intersect_basic
RANGE_OVERLAPS 3 🟢 Covered happy×2 / empty×1 specialized_types/range_intersects_empty, specialized_types/range_overlaps_no, specialized_types/range_overlaps_yes
RANGE_SESSIONIZE 12 🟢🟢 Deep happy×8 / null×1 / empty×1 / error×2 specialized_types/error_range_sessionize_invalid_mode, specialized_types/range_sessionize_basic, specialized_types/range_sessionize_datetime_element, specialized_types/range_sessionize_empty_input, specialized_types/range_sessionize_grouped, … (+7 more)
RANGE_START 1 🟡 Sampled happy×1 specialized_types/range_start_basic
GENERATE_RANGE_ARRAY 1 🟡 Sampled happy×1 specialized_types/generate_range_array_date

INFORMATION_SCHEMA virtual views

BigQuery reference -- 6 / 6 items covered

BigQuery's INFORMATION_SCHEMA family of virtual tables. The emulator's pre-translation rewriter materialises each view as an inline VALUES subquery sourced from the catalog: SCHEMATA, TABLES, COLUMNS, TABLE_OPTIONS, VIEWS, PARTITIONS, ROUTINES, MATERIALIZED_VIEWS, ROW_ACCESS_POLICIES. The JOBS/JOBS_BY_* family is permanently out of scope — see out-of-scope.md#information_schemajobs-family.

Item Count Tier Variation Fixtures
INFORMATION_SCHEMA.SCHEMATA 3 🟢 Covered happy×2 / empty×1 information_schema/is_schemata_basic, information_schema/is_schemata_empty_project, information_schema/is_schemata_with_filter
INFORMATION_SCHEMA.TABLES 3 🟢 Covered happy×3 information_schema/is_tables_basic, information_schema/is_tables_filter_by_type, information_schema/is_tables_select_specific_columns
INFORMATION_SCHEMA.COLUMNS 3 🟢 Covered happy×3 information_schema/is_columns_basic, information_schema/is_columns_partitioning_column, information_schema/is_columns_with_struct_field
INFORMATION_SCHEMA.TABLE_OPTIONS 3 🟢 Covered happy×3 information_schema/is_table_options_basic, information_schema/is_table_options_description, information_schema/is_table_options_partition_filter
INFORMATION_SCHEMA.VIEWS 3 🟢 Covered happy×2 / empty×1 information_schema/is_views_basic, information_schema/is_views_empty_dataset, information_schema/is_views_with_definition
INFORMATION_SCHEMA.PARTITIONS 3 🟢 Covered happy×2 / empty×1 information_schema/is_partitions_basic, information_schema/is_partitions_empty_table, information_schema/is_partitions_ingestion_time

REST / wire-format response shapes

BigQuery reference -- 8 / 8 items covered

Shape-level concerns about the JSON BigQuery returns. The conformance corpus diffs schema + rows against recorded baselines, so these items are exercised indirectly by every fixture; depth here measures coverage of unusual shapes (REPEATED, nested STRUCT, NULL representations).

Item Count Tier Variation Fixtures
REPEATED mode schema field 20 🟢🟢 Deep happy×6 / null×1 / empty×13 / error×2 information_schema/is_columns_with_struct_field, rest_crud/dml_insert_array_value, routines_scripting/js_udf_array_to_array, routines_scripting/js_udf_returns_array_of_struct, routines_scripting/script_for_empty_array, … (+15 more)
REPEATED is the wire form of ARRAY.
Nested RECORD/STRUCT schema field 5 🟢 Covered happy×4 / empty×1 information_schema/is_columns_with_struct_field, rest_crud/dml_insert_struct_value, routines_scripting/js_udf_returns_array_of_struct, routines_scripting/js_udf_struct_to_struct, routines_scripting/sql_udf_returns_struct
NULL in row payload 204 🟢🟢 Deep happy×43 / null×107 / empty×10 / bound×10 / error×45 / tz×2 api_configuration/create_never_missing_destination, api_configuration/create_never_with_append, api_configuration/create_never_with_truncate, api_configuration/dest_clustering_fields_invalid_column, api_configuration/dest_time_partitioning_invalid_field, … (+199 more)
Named queryParameters (mode="named") 11 🟢🟢 Deep happy×10 / null×1 api_configuration/dml_insert_with_parameters, rest_crud/param_named_array_int64, rest_crud/param_named_date_scalar, rest_crud/param_named_int64_scalar, rest_crud/param_named_nullable_with_null, … (+6 more)
Parameter-bound queries via QueryJobConfig.query_parameters. Detected by the parameters.json fixture file.
Positional queryParameters (mode="positional") 10 🟢🟢 Deep happy×8 / null×2 api_configuration/positional_array_int64, api_configuration/positional_multi_param, api_configuration/positional_null_bound_string, api_configuration/positional_parameter_int64, api_configuration/positional_struct_basic, … (+5 more)
Parameter-bound queries via QueryJobConfig.query_parameters using ? placeholders. Detected by parameters.json.
ARRAY queryParameter 3 🟢 Covered happy×3 api_configuration/positional_array_int64, rest_crud/param_named_array_int64, rest_crud/param_positional_array
arrayType parameter shape. Detected by parameters.json carrying an ARRAY type spec.
STRUCT queryParameter 2 🟡 Sampled happy×2 api_configuration/positional_struct_basic, rest_crud/param_named_struct
structTypes parameter shape. Detected by parameters.json carrying a STRUCT type spec.
NULL-valued queryParameter 3 🟢 Covered null×3 api_configuration/positional_null_bound_string, rest_crud/param_named_nullable_with_null, rest_crud/param_positional_null
A typed parameter with no value — exercises BQ's typed-NULL binding. Emulator wraps with CAST(? AS T) to preserve the declared type through the schema renderer.

Error response parity

BigQuery reference -- 4 / 4 items covered

Recorded error envelopes (error.reason / http_status / message_pattern). Coverage lives in recorded error.json fixtures.

Item Count Tier Variation Fixtures
reason=invalid (syntax / argument) 7 🟢🟢 Deep null×1 / error×7 api_configuration/dest_clustering_fields_invalid_column, api_configuration/dest_time_partitioning_invalid_field, api_configuration/schema_update_addition_with_truncate, api_configuration/schema_update_relaxation_required_to_nullable, api_configuration/session_invalid_session_id, … (+2 more)
reason=notFound 8 🟢🟢 Deep error×8 api_configuration/create_never_missing_destination, api_configuration/create_never_with_append, api_configuration/create_never_with_truncate, rest_crud/error_alter_nonexistent_table, rest_crud/error_dataset_not_found, … (+3 more)
reason=duplicate (already exists) 1 🟡 Sampled error×1 rest_crud/error_create_table_already_exists
reason=accessDenied 1 🟡 Sampled error×1 rest_crud/error_invalid_project_format

See also