Commit b355de2
Fix failing tests in continuous loop (#112)
* Fix nested empty array handling in aliased expressions
Add checks for empty nested arrays in explainAliasedExpr to properly
render arrays containing empty subarrays as Function array instead of
Literal. This matches the behavior in explainLiteral.
The fix adds:
- Check for nested arrays that are empty or contain empty arrays
- containsEmptyArraysRecursive check for deeply nested empty arrays
- containsTuplesRecursive check for deeply nested tuples
This resolves 10+ failing explain tests across multiple test suites:
- 00909_arrayEnumerateUniq (10 statements)
- 00548_slice_of_nested
- 02699_polygons_sym_difference_rollup
- 02699_polygons_sym_difference_total_analyzer
* Fix binary string literal parsing (b'...')
Add readBinaryString() function to properly decode binary string
literals. Binary strings like b'0' should be decoded as byte values
where each bit (0 or 1) contributes to the resulting bytes.
For example:
- b'0' -> \0 (single bit 0, left-padded to 8 bits = 0x00)
- b'00110000' -> '0' (8 bits = ASCII 0x30)
- b'111001101011010110001011111010001010111110010101' -> '测试'
This fixes 9 failing explain tests in 02494_parser_string_binary_literal.
* Fix IS NOT DISTINCT FROM operator and boolean tuple handling
Two fixes in this commit:
1. Fix IS NOT DISTINCT FROM operator parsing:
- Use <=> operator which maps to isNotDistinctFrom function
- Use NOT_PREC for right side to correctly include lower-precedence operators like IN
- IS DISTINCT FROM wraps in NOT(IS NOT DISTINCT FROM)
2. Add boolean support for IN list tuple literals:
- Boolean literals in IN lists can now be combined into Literal Tuple_ format
- Added allBooleansOrNull check to both explainInExpr functions
This fixes 9 statements in 02868_operator_is_not_distinct_from_priority
and 1 statement in 03214_join_on_tuple_comparison_elimination_bug.
* Handle non-literal expressions in aliased array formatting
Add checks for CAST expressions, binary expressions, and other non-literal
expressions when determining if an array should be rendered as Function array
vs Literal Array_. This ensures arrays containing CAST, function calls, etc.
are properly rendered while preserving correct behavior for:
- Simple arrays with primitive literals
- Arrays with negated numbers
- Nested arrays (handled separately)
This fixes 9 statements in 00502_sum_map and many other tests:
- 02916_analyzer_set_in_join (1 statement)
- 02708_dotProduct (2 statements)
- 02423_json_quote_float64 (2 statements)
- 02524_fuzz_and_fuss (1 statement)
- 00597_push_down_predicate_long (2 statements)
- 03727_concat_with_separator_subquery (3 statements)
* Handle STRICT modifier for EXCEPT and REPLACE column transformers
Add handling for the STRICT modifier in asterisk and columns matcher
EXCEPT and REPLACE parsing functions. This ensures that queries like
`* EXCEPT STRICT i` and `* REPLACE STRICT i + 1 AS i` parse correctly.
This fixes 7 statements in 01470_columns_transformers:
- stmt12-15 (EXCEPT STRICT)
- stmt16-17, stmt22 (REPLACE STRICT)
* Add support for RENAME DICTIONARY statements
The parser now handles RENAME DICTIONARY syntax in addition to RENAME TABLE.
This allows dictionary rename operations to be properly parsed and explained.
This fixes:
- 3 statements in 01155_rename_move_materialized_view
- 6 statements in 01191_rename_dictionary
- 3 statements in 02343_analyzer_column_transformers_strict (from STRICT fix)
* Add DISTINCT ON (col1, col2, ...) syntax support
Added parsing and EXPLAIN AST output for PostgreSQL-style DISTINCT ON
clause which specifies columns to determine row uniqueness.
Changes:
- Added DistinctOn field to SelectQuery AST node
- Added DISTINCT ON parsing in parseSelect() and parseFromSelectSyntax()
- Added DISTINCT ON output in explainSelectQuery (outputs Literal UInt64_1
followed by ExpressionList of columns)
Fixed tests:
- 03363_hive_style_partition (3 statements)
- 01244_optimize_distributed_group_by_sharding_key (1 statement)
- 01952_optimize_distributed_group_by_sharding_key (8 statements)
* Add support for tagged dollar-quoted strings ($tag$...$tag$)
Extended the lexer to properly handle PostgreSQL-style dollar-quoted strings
with custom tags like $doc$content$doc$. The lexer now:
1. Looks ahead to verify a matching closing tag exists before treating
something as a dollar-quoted string
2. Falls back to identifier parsing for cases like $alias$name$ which are
valid ClickHouse identifiers containing $ characters
3. Added peekCharN function to peek multiple characters ahead
This fixes all 8 pending statements in test 01948_heredoc.
* Add PARTITION ID syntax support for ALTER commands
Added parsing and EXPLAIN AST output for PARTITION ID 'value' syntax
in ALTER TABLE commands (ATTACH, DETACH, DROP, REPLACE, FETCH, FREEZE).
Changes:
- Added PartitionIsID field to AlterCommand AST node
- Parse PARTITION ID 'value' in parseAlterCommand for multiple partition operations
- Output Partition_ID format in explainAlterCommand when PartitionIsID is true
Fixed 8 statements in test 01166_truncate_multiple_partitions and many
other tests that use PARTITION ID syntax.
* Add WITH RECURSIVE support for CTEs
Skip the RECURSIVE keyword after WITH when parsing CTEs. The keyword is
handled by silently consuming it since the recursive behavior is
transparent at the AST/parsing level.
Fixed 8 statements in 03033_recursive_cte_basic and many other tests
using recursive CTEs.
* Add REPLACE/EXCHANGE DICTIONARY and fix RENAME/dict source parsing
Multiple dictionary-related fixes:
1. Added REPLACE DICTIONARY support (equivalent to CREATE OR REPLACE)
2. Added EXCHANGE DICTIONARIES support (similar to EXCHANGE TABLES)
3. Fixed key-value pair parsing for dictionary SOURCE clause
- Values like TABLE test are now properly parsed
4. Fixed RENAME output to not include database names when not specified
Fixed 8 statements in 03173_check_cyclic_dependencies_on_create_and_rename
and many other dictionary-related tests.
* Add support for MATERIALIZE TTL ALTER command
- Add AlterMaterializeTTL constant to ast/ast.go
- Add MATERIALIZE TTL parsing after MATERIALIZE keyword in parser.go
- Fix explainAlterCommand to omit (children N) when count is 0
This fixes 01070_materialize_ttl and several other tests that use MATERIALIZE TTL.
* Support dotted column names in INSERT column lists
Handle column names like ip4Map.value for nested columns in INSERT statements.
This allows parsing INSERT INTO table(id, column.subcolumn, ...) VALUES (...)
without requiring backticks around the dotted names.
Fixes many tests using nested column syntax.
* Fix ALTER query FORMAT and SETTINGS clause ordering
- Parse FORMAT before SETTINGS in ALTER TABLE statements
- Output FORMAT identifier before Set in explain output
This matches ClickHouse's FORMAT Null SETTINGS ... syntax.
* Support trailing commas in expression lists
ClickHouse allows trailing commas before clauses like FROM, WHERE, etc.
For example: SELECT a, b, FROM table
Add isClauseKeyword function to detect when a token is a clause keyword
that should terminate an expression list, vs when it's being used as
an identifier (which ClickHouse allows for many keywords).
The detection is context-aware - keywords followed by (, [, or = are
treated as expression continuations rather than clause terminators.
* Include type in QueryParameter EXPLAIN output
Format QueryParameter with type as Name:Type to match ClickHouse output.
For example: QueryParameter filter:FixedString(2)
Fixes many parameterized view tests.
* Add PARALLEL WITH statement chaining and fix EXISTS TABLE explain format
- Add PARALLEL token to lexer keywords
- Add ParallelWithQuery AST node for chaining statements with PARALLEL WITH
- Add parseParallelWith in parser to handle statement chaining
- Fix table expression alias handling to not consume PARALLEL when followed by WITH
- Fix ExistsTableQuery explain output to match ClickHouse format (space alignment for missing database)
Tests fixed:
- 03305_parallel_with (all statements)
- 03604_parallel_with_query_lock (all statements)
- 01048_exists_query (all statements)
- 00101_materialized_views_and_insert_without_explicit_database (exists-related)
- 01073_attach_if_not_exists
* Fix Identifier handling in FormatDataType and escape strings in CAST explain
- Add Identifier handling in FormatDataType to properly format
AggregateFunction types that contain function name identifiers
- Escape string literals in CAST explain output to properly handle
null bytes and other control characters
Tests fixed:
- 02688_aggregate_states (all statements)
- 02477_single_value_data_string_regression
- 02689_meaningless_data_types
- 02731_nothing_deserialization
- 02885_arg_min_max_combinator
- 03011_definitive_guide_to_cast
- 03210_variant_with_aggregate_function_type
- 03254_normalize_aggregate_states_with_named_tuple_args
- 03411_iceberg_bucket
* Add STALENESS support for WITH FILL and fix OrderByElement/InterpolateElement explain
- Add FillStaleness field to OrderByElement AST
- Parse STALENESS clause in ORDER BY WITH FILL
- Simplify explainOrderByElement to always use direct children (no FillModifier)
- Fix explainInterpolateElement to correctly output value OR column identifier
Tests fixed:
- 03266_with_fill_staleness (all statements)
- 03266_with_fill_staleness_cases
- 03266_with_fill_staleness_errors
- 00995_order_by_with_fill
- 02016_order_by_with_fill_monotonic_functions_removal
- 02112_with_fill_interval
- 02366_with_fill_date
- 02560_with_fill_int256_int
- 02561_with_fill_date_datetime_incompatible
- 02861_interpolate_alias_precedence
- 03043_group_array_result_is_expected
- 03093_with_fill_support_constant_expression
* Add MODIFY ORDER BY support in ALTER statements
- Add AlterModifyOrderBy command type to AST
- Add OrderByExpr field to AlterCommand struct
- Parse MODIFY ORDER BY (expr, ...) syntax in ALTER
- Explain output wraps multiple expressions in tuple function
Tests fixed:
- 00754_alter_modify_order_by (all statements)
- 00754_alter_modify_order_by_replicated_zookeeper_long
- 00910_crash_when_distributed_modify_order_by
- 01526_alter_add_and_modify_order_zookeeper
- 01532_primary_key_without_order_by_zookeeper
- 02484_substitute_udf_storage_args
- 02710_allow_suspicious_indices
- 02863_interpolate_subquery
- 03020_order_by_SimpleAggregateFunction
- 03263_forbid_materialize_sort_key
- 03578_ttl_column_in_order_by_validation
* Handle +Inf and -Inf as infinity literals in parser
Previously +Inf was being parsed as a unary plus function applied to
the Inf identifier, causing array literals containing +Inf to be
treated as function calls instead of literal arrays. Now +Inf and -Inf
are recognized as special Float64 infinity literals.
* Add ATTACH TABLE schema parsing and fix multi-column PRIMARY KEY
- Extended AttachQuery AST to support columns, engine, order by, and
primary key clauses
- Added parsing for ATTACH TABLE with column definitions and ENGINE
clause similar to CREATE TABLE
- Fixed PRIMARY KEY with multiple columns in CREATE TABLE to wrap in
Function tuple
- Updated explain output for ATTACH TABLE to include columns and
storage definitions
* Add MOVE PARTITION and fix OPTIMIZE TABLE database name
- Added MOVE PARTITION ... TO TABLE parsing in ALTER statements
- Added ToDatabase and ToTable fields to AlterCommand for destination
- Fixed OPTIMIZE TABLE to output database identifier for qualified names
* Fix nested array literal format for arrays with negative numbers
Updated containsNonLiteralExpressions to accept unary minus of
literals (negative numbers) as literal-like expressions. This allows
nested arrays containing negative numbers to be formatted as
Literal Array_[Array_[...], ...] instead of Function array.
* Add CONSTRAINT ASSUME support in CREATE TABLE parsing
Previously only CONSTRAINT ... CHECK was supported. Now also supports
CONSTRAINT ... ASSUME which is used for query optimization hints.
* Fix SYSTEM distributed commands to output table name twice
SYSTEM STOP/START DISTRIBUTED SENDS and SYSTEM FLUSH DISTRIBUTED
commands now output the table name as both database and table in
EXPLAIN output, matching ClickHouse behavior.
* Simplify SQL standard TRIM with empty string to just the literal
When using SQL standard syntax like trim(LEADING '' FROM 'foo'),
ClickHouse simplifies this to just the literal 'foo' in EXPLAIN output.
Added SQLStandard field to FunctionCall to distinguish SQL standard
TRIM syntax from direct trimLeft/trimRight/trimBoth function calls.
* Fix CAST expression handling for arrays containing CastExpr elements
Add containsCastExpressions function to check if array/tuple literals contain
CastExpr elements. This allows proper formatting of arrays like [1::UInt32, 2::UInt32]
as Function array nodes while keeping arrays with just negative numbers (like [-1, -2, -3])
formatted as string literals.
Fixes 01852_cast_operator_2 (6 statements) and related tests.
* Add ON CLUSTER support and duplicate output for SYSTEM distributed commands
- Add OnCluster and DuplicateTableOutput fields to SystemQuery AST
- Parse ON CLUSTER clause for SYSTEM commands (FLUSH DISTRIBUTED, etc.)
- For qualified table names (database.table), output identifiers twice
in EXPLAIN to match ClickHouse's expected format
Fixes 01294_system_distributed_on_cluster (6 statements).
---------
Co-authored-by: Claude <[email protected]>1 parent 797b449 commit b355de2
File tree
225 files changed
+1265
-1439
lines changed- ast
- internal/explain
- lexer
- parser
- testdata
- 00101_materialized_views_and_insert_without_explicit_database
- 00116_storage_set
- 00392_enum_nested_alter
- 00502_custom_partitioning_local
- 00502_custom_partitioning_replicated_zookeeper_long
- 00502_sum_map
- 00510_materizlized_view_and_deduplication_zookeeper
- 00529_orantius
- 00548_slice_of_nested
- 00556_array_intersect
- 00597_push_down_predicate_long
- 00620_optimize_on_nonleader_replica_zookeeper
- 00634_rename_view
- 00700_decimal_complex_types
- 00716_allow_ddl
- 00753_alter_attach
- 00753_distributed_system_columns_and_system_tables
- 00754_alter_modify_order_by_replicated_zookeeper_long
- 00754_alter_modify_order_by
- 00829_bitmap_function
- 00843_optimize_predicate_and_rename_table
- 00909_arrayEnumerateUniq
- 00910_crash_when_distributed_modify_order_by
- 00942_mv_rename_table
- 00943_mv_rename_without_inner_table
- 00952_insert_into_distributed_with_materialized_column
- 00995_order_by_with_fill
- 01015_attach_part
- 01040_distributed_background_insert_batch_inserts
- 01048_exists_query
- 01055_compact_parts
- 01070_materialize_ttl
- 01070_mutations_with_dependencies
- 01073_attach_if_not_exists
- 01099_parallel_distributed_insert_select
- 01109_exchange_tables
- 01148_zookeeper_path_macros_unfolding
- 01152_cross_replication
- 01155_rename_move_materialized_view
- 01157_replace_table
- 01166_truncate_multiple_partitions
- 01172_transaction_counters
- 01191_rename_dictionary
- 01201_drop_column_compact_part_replicated_zookeeper_long
- 01213_alter_rename_nested
- 01213_alter_table_rename_nested
- 01244_optimize_distributed_group_by_sharding_key
- 01293_system_distribution_queue
- 01294_system_distributed_on_cluster
- 01346_array_join_mrxotey
- 01378_alter_rename_with_ttl_zookeeper
- 01451_replicated_detach_drop_and_quorum_long
- 01470_columns_transformers
- 01516_create_table_primary_key
- 01526_alter_add_and_modify_order_zookeeper
- 01532_primary_key_without_order_by_zookeeper
- 01552_dict_fixedstring
- 01555_system_distribution_queue_mask
- 01584_distributed_buffer_cannot_find_column
- 01601_detach_permanently
- 01622_constraints_simple_optimization
- 01622_constraints_where_optimization
- 01623_constraints_column_swap
- 01625_constraints_index_append
- 01644_distributed_async_insert_fsync_smoke
- 01670_distributed_bytes_to_throw_insert
- 01683_dist_INSERT_block_structure_mismatch
- 01747_join_view_filter_dictionary
- 01765_move_to_table_overlapping_block_number
- 01790_dist_INSERT_block_structure_mismatch_types_and_names
- 01818_move_partition_simple
- 01852_cast_operator_2
- 01910_view_dictionary_check_refresh
- 01913_replace_dictionary
- 01914_exchange_dictionaries
- 01925_broken_partition_id_zookeeper
- 01948_heredoc
- 01952_optimize_distributed_group_by_sharding_key
- 02012_changed_enum_type_non_replicated
- 02012_zookeeper_changed_enum_type_incompatible
- 02012_zookeeper_changed_enum_type
- 02016_order_by_with_fill_monotonic_functions_removal
- 02028_add_default_database_for_alterquery_on_cluster
- 02041_test_fuzzy_alter
- 02112_with_fill_interval
- 02124_clickhouse_dictionary_with_predefined_configuration
- 02343_analyzer_column_transformers_strict
- 02346_text_index_array_support
- 02346_text_index_dictionary_cache
- 02346_text_index_header_cache
- 02346_text_index_map_support
- 02346_text_index_postings_cache
- 02354_vector_search_binary_quantization
- 02366_with_fill_date
- 02391_hashed_dictionary_shards
- 02400_create_table_on_cluster_normalization
- 02423_json_quote_float64
- 02477_single_value_data_string_regression
- 02482_insert_into_dist_race
- 02484_substitute_udf_storage_args
- 02486_truncate_and_unexpected_parts
- 02494_parser_string_binary_literal
- 02500_prevent_drop_nested_if_empty_part
- 02523_array_shuffle
- 02524_fuzz_and_fuss
- 02536_distributed_detach_table
- 02560_with_fill_int256_int
- 02561_with_fill_date_datetime_incompatible
- 02581_width_bucket
- 02685_decimal256_various
- 02688_aggregate_states
- 02689_meaningless_data_types
- 02699_polygons_sym_difference_rollup
- 02699_polygons_sym_difference_total_analyzer
- 02708_dotProduct
- 02710_aggregation_nested_map_ip_uuid
- 02710_allow_suspicious_indices
- 02731_nothing_deserialization
- 02740_hashed_dictionary_load_factor_smoke
- 02813_optimize_lazy_materialization
- 02828_create_as_table_function_rename
- 02832_integer_type_inference
- 02842_mutations_replace_non_deterministic
- 02860_distributed_flush_on_detach
- 02861_interpolate_alias_precedence
- 02863_interpolate_subquery
- 02868_operator_is_not_distinct_from_priority
- 02885_arg_min_max_combinator
- 02888_integer_type_inference_in_if_function
- 02915_move_partition_inactive_replica
- 02916_analyzer_set_in_join
- 02916_another_move_partition_inactive_replica
- 02983_const_sharding_key
- 03008_deduplication_remote_insert_select
- 03011_definitive_guide_to_cast
- 03020_order_by_SimpleAggregateFunction
- 03030_system_flush_distributed_settings
- 03033_analyzer_parametrized_view_alias
- 03033_recursive_cte_basic
- 03034_recursive_cte_tree_fuzz_crash_fix
- 03034_recursive_cte_tree_merge_tree
- 03034_recursive_cte_tree
- 03035_argMinMax_numeric_non_extreme_bug
- 03038_move_partition_to_oneself_deadlock
- 03040_dynamic_type_alters_2_compact_merge_tree
- 03040_dynamic_type_alters_2_wide_merge_tree
- 03043_group_array_result_is_expected
- 03047_on_fly_mutations_non_deterministic_replace
- 03093_with_fill_support_constant_expression
- 03100_lwu_01_basics
- 03100_lwu_06_apply_patches
- 03100_lwu_22_detach_attach_patches
- 03100_lwu_23_apply_patches
- 03100_lwu_39_after_replace_partition
- 03142_alter_comment_parameterized_view
- 03143_join_filter_push_down_filled_join_fix
- 03146_parameterized_view_with_date
- 03154_recursive_cte_distributed
- 03156_tuple_map_low_cardinality
- 03165_round_scale_as_column
- 03173_check_cyclic_dependencies_on_create_and_rename
- 03209_parameterized_view_with_non_literal_params
- 03210_variant_with_aggregate_function_type
- 03214_join_on_tuple_comparison_elimination_bug
- 03215_view_with_recursive
- 03221_merge_profile_events
- 03224_invalid_alter
- 03224_trim_empty_string
- 03229_query_condition_cache_recursive_cte
- 03237_create_table_select_as_with_recursive
- 03248_max_parts_to_move
- 03254_normalize_aggregate_states_with_named_tuple_args
- 03263_forbid_materialize_sort_key
- 03266_with_fill_staleness_cases
- 03266_with_fill_staleness_errors
- 03266_with_fill_staleness
- 03274_philipzucker
- 03279_join_choose_build_table_auto_statistics
- 03279_join_choose_build_table_statistics
- 03279_join_choose_build_table
- 03286_reverse_sorting_key_final
- 03305_parallel_with
- 03321_system_tables_parametrized_view_params
- 03322_view_over_parameterized_view
- 03357_recursive_cte_no_logical_error
- 03362_join_on_filterpushdown
- 03362_optimize_using_constraints_type_mismatch
- 03363_hive_style_partition
- 03402_cyclic_alter_dependencies
- 03408_cte_self_reference
- 03411_iceberg_bucket
- 03444_flip_coordinates
- 03450_parameterized_view_forward
- 03451_parameterized_views_without_alias
- 03453_parameterized_view_array_of_points
- 03454_parameterized_view_constant_identifier
- 03454_parameterized_views_null
- 03513_simple_aggregate_function_any_respect_nulls_in_aggregating_merge_tree
- 03513_simple_aggregate_function_any_respect_nulls_in_summing_merge_tree
- 03521_long_statistics_name
- 03578_ttl_column_in_order_by_validation
- 03599_lightweight_delete_vertical_merge
- 03601_histogram_quantile
- 03604_parallel_with_query_lock
- 03628_subcolumns_of_columns_with_dot_in_name
- 03636_storage_alias_basic
- 03663_parameterized_views_formatting_of_substitutions_excessive_backticks
- 03664_parameterized_view_restart
- 03672_nested_array_nested_tuple
- 03722_function_trim_ltrim_rtrim_alias
- 03727_concat_with_separator_subquery
- 03733_summing_merge_tree_nested_low_cardinality
- 03755_nested_recursive_cte
- token
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
225 files changed
+1265
-1439
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
57 | 57 | | |
58 | 58 | | |
59 | 59 | | |
| 60 | + | |
60 | 61 | | |
61 | 62 | | |
62 | 63 | | |
| |||
199 | 200 | | |
200 | 201 | | |
201 | 202 | | |
202 | | - | |
203 | | - | |
204 | | - | |
205 | | - | |
206 | | - | |
207 | | - | |
208 | | - | |
209 | | - | |
210 | | - | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
211 | 213 | | |
212 | 214 | | |
213 | 215 | | |
| |||
574 | 576 | | |
575 | 577 | | |
576 | 578 | | |
| 579 | + | |
577 | 580 | | |
578 | | - | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
579 | 584 | | |
580 | 585 | | |
581 | 586 | | |
| |||
585 | 590 | | |
586 | 591 | | |
587 | 592 | | |
| 593 | + | |
588 | 594 | | |
589 | 595 | | |
590 | 596 | | |
| |||
635 | 641 | | |
636 | 642 | | |
637 | 643 | | |
| 644 | + | |
638 | 645 | | |
639 | 646 | | |
640 | 647 | | |
| |||
653 | 660 | | |
654 | 661 | | |
655 | 662 | | |
656 | | - | |
657 | | - | |
| 663 | + | |
| 664 | + | |
658 | 665 | | |
659 | 666 | | |
| 667 | + | |
660 | 668 | | |
661 | 669 | | |
662 | 670 | | |
| |||
707 | 715 | | |
708 | 716 | | |
709 | 717 | | |
710 | | - | |
711 | | - | |
712 | | - | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
713 | 726 | | |
714 | 727 | | |
715 | 728 | | |
| |||
840 | 853 | | |
841 | 854 | | |
842 | 855 | | |
843 | | - | |
844 | | - | |
845 | | - | |
846 | | - | |
| 856 | + | |
| 857 | + | |
| 858 | + | |
| 859 | + | |
| 860 | + | |
| 861 | + | |
847 | 862 | | |
848 | 863 | | |
849 | 864 | | |
| |||
1290 | 1305 | | |
1291 | 1306 | | |
1292 | 1307 | | |
1293 | | - | |
1294 | | - | |
1295 | | - | |
1296 | | - | |
1297 | | - | |
1298 | | - | |
1299 | | - | |
1300 | | - | |
| 1308 | + | |
| 1309 | + | |
| 1310 | + | |
| 1311 | + | |
| 1312 | + | |
| 1313 | + | |
| 1314 | + | |
| 1315 | + | |
| 1316 | + | |
1301 | 1317 | | |
1302 | 1318 | | |
1303 | 1319 | | |
| |||
1594 | 1610 | | |
1595 | 1611 | | |
1596 | 1612 | | |
| 1613 | + | |
| 1614 | + | |
| 1615 | + | |
| 1616 | + | |
| 1617 | + | |
| 1618 | + | |
| 1619 | + | |
| 1620 | + | |
| 1621 | + | |
| 1622 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
231 | 231 | | |
232 | 232 | | |
233 | 233 | | |
234 | | - | |
| 234 | + | |
235 | 235 | | |
236 | 236 | | |
237 | 237 | | |
| |||
246 | 246 | | |
247 | 247 | | |
248 | 248 | | |
| 249 | + | |
| 250 | + | |
249 | 251 | | |
250 | 252 | | |
251 | 253 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
228 | 228 | | |
229 | 229 | | |
230 | 230 | | |
231 | | - | |
232 | | - | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
233 | 239 | | |
| 240 | + | |
234 | 241 | | |
235 | 242 | | |
236 | 243 | | |
| |||
498 | 505 | | |
499 | 506 | | |
500 | 507 | | |
| 508 | + | |
501 | 509 | | |
502 | 510 | | |
503 | 511 | | |
| |||
508 | 516 | | |
509 | 517 | | |
510 | 518 | | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
511 | 530 | | |
512 | 531 | | |
513 | 532 | | |
| |||
518 | 537 | | |
519 | 538 | | |
520 | 539 | | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
| 567 | + | |
| 568 | + | |
| 569 | + | |
| 570 | + | |
| 571 | + | |
| 572 | + | |
| 573 | + | |
| 574 | + | |
521 | 575 | | |
522 | 576 | | |
523 | 577 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
286 | 286 | | |
287 | 287 | | |
288 | 288 | | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
289 | 292 | | |
290 | 293 | | |
291 | 294 | | |
| |||
0 commit comments