Skip to content

Commit e5bf07a

Browse files
localstack-spiral[bot]spiralhovaesco
authored
LAV-3685: Match COPY CSV delimiter and escape option diagnostics (#4061)
* LAV-3685: Match COPY CSV delimiter and escape diagnostics Validate CSV delimiter and escape option scalar/list declarations at COPY compilation time using the established scalar diagnostic machinery. Preserve original token spelling in complete errors, including lowercase booleans in lists. Check load delimiter relationships against decoded bytes and implicit defaults, after scalar validation; unload permits equal/overlapping delimiters. Canonicalize Cloud-accepted property-list delimiters, single hexadecimal characters, and NUL declarations into inputs the existing byte parser handles. No new decoder or public configuration is introduced. Byte-level Cloud captures pin the unusual accepted declarations. Remove the eight owner typing xfails without changing their snapshots or assertions. Capture: 276 new cases against the default Standard Cloud account, serially. Verification: - make check (green) - make test-compat on test_copy_csv_option_diagnostics.py, test_copy_csv_disabled.py and test_csv_unload_escape.py: 684 passed - make test-compat on test_stages.py with -k delimiter: 32 passed - git diff --check (green) Co-authored-by: Przemek Denkiewicz <przemyslaw.denkiewicz@localstack.cloud> ## Deviations - Keep COPY relationship validation in copy_into_rewriter.rs rather than extend the shared DDL validator: Cloud permits equal/overlapping delimiters on COPY unload, while COPY load also checks implicit defaults. Reuse the existing scalar error machinery and byte parser instead of changing DDL semantics. ## Test matrix Scope: COPY INTO <table>/<location> resource-index syntax for FIELD_DELIMITER, RECORD_DELIMITER, ESCAPE and ESCAPE_UNENCLOSED_FIELD. Cells include declaration kinds, disabled forms, character/size boundaries, relationships, validation ordering, byte output, source variants, and established CSV-reader regressions. test_copy_csv_delimiter_boundary[hex-length-20-FIELD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[hex-length-20-FIELD_DELIMITER-load] test_copy_csv_delimiter_boundary[hex-length-20-FIELD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[hex-length-20-FIELD_DELIMITER-unload] test_copy_csv_delimiter_boundary[hex-length-20-RECORD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[hex-length-20-RECORD_DELIMITER-load] test_copy_csv_delimiter_boundary[hex-length-20-RECORD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[hex-length-20-RECORD_DELIMITER-unload] test_copy_csv_delimiter_boundary[hex-length-21-FIELD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[hex-length-21-FIELD_DELIMITER-load] test_copy_csv_delimiter_boundary[hex-length-21-FIELD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[hex-length-21-FIELD_DELIMITER-unload] test_copy_csv_delimiter_boundary[hex-length-21-RECORD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[hex-length-21-RECORD_DELIMITER-load] test_copy_csv_delimiter_boundary[hex-length-21-RECORD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[hex-length-21-RECORD_DELIMITER-unload] test_copy_csv_delimiter_boundary[hex-prefix-FIELD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[hex-prefix-FIELD_DELIMITER-load] test_copy_csv_delimiter_boundary[hex-prefix-FIELD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[hex-prefix-FIELD_DELIMITER-unload] test_copy_csv_delimiter_boundary[hex-prefix-RECORD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[hex-prefix-RECORD_DELIMITER-load] test_copy_csv_delimiter_boundary[hex-prefix-RECORD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[hex-prefix-RECORD_DELIMITER-unload] test_copy_csv_delimiter_boundary[invalid-utf8-FIELD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[invalid-utf8-FIELD_DELIMITER-load] test_copy_csv_delimiter_boundary[invalid-utf8-FIELD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[invalid-utf8-FIELD_DELIMITER-unload] test_copy_csv_delimiter_boundary[invalid-utf8-RECORD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[invalid-utf8-RECORD_DELIMITER-load] test_copy_csv_delimiter_boundary[invalid-utf8-RECORD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[invalid-utf8-RECORD_DELIMITER-unload] test_copy_csv_delimiter_boundary[invalid-utf8-sequence-FIELD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[invalid-utf8-sequence-FIELD_DELIMITER-load] test_copy_csv_delimiter_boundary[invalid-utf8-sequence-FIELD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[invalid-utf8-sequence-FIELD_DELIMITER-unload] test_copy_csv_delimiter_boundary[invalid-utf8-sequence-RECORD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[invalid-utf8-sequence-RECORD_DELIMITER-load] test_copy_csv_delimiter_boundary[invalid-utf8-sequence-RECORD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[invalid-utf8-sequence-RECORD_DELIMITER-unload] test_copy_csv_delimiter_boundary[length-1-FIELD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[length-1-FIELD_DELIMITER-load] test_copy_csv_delimiter_boundary[length-1-FIELD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[length-1-FIELD_DELIMITER-unload] test_copy_csv_delimiter_boundary[length-1-RECORD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[length-1-RECORD_DELIMITER-load] test_copy_csv_delimiter_boundary[length-1-RECORD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[length-1-RECORD_DELIMITER-unload] test_copy_csv_delimiter_boundary[length-20-FIELD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[length-20-FIELD_DELIMITER-load] test_copy_csv_delimiter_boundary[length-20-FIELD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[length-20-FIELD_DELIMITER-unload] test_copy_csv_delimiter_boundary[length-20-RECORD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[length-20-RECORD_DELIMITER-load] test_copy_csv_delimiter_boundary[length-20-RECORD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[length-20-RECORD_DELIMITER-unload] test_copy_csv_delimiter_boundary[length-21-FIELD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[length-21-FIELD_DELIMITER-load] test_copy_csv_delimiter_boundary[length-21-FIELD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[length-21-FIELD_DELIMITER-unload] test_copy_csv_delimiter_boundary[length-21-RECORD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[length-21-RECORD_DELIMITER-load] test_copy_csv_delimiter_boundary[length-21-RECORD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[length-21-RECORD_DELIMITER-unload] test_copy_csv_delimiter_boundary[unicode-length-20-FIELD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[unicode-length-20-FIELD_DELIMITER-load] test_copy_csv_delimiter_boundary[unicode-length-20-FIELD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[unicode-length-20-FIELD_DELIMITER-unload] test_copy_csv_delimiter_boundary[unicode-length-20-RECORD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[unicode-length-20-RECORD_DELIMITER-load] test_copy_csv_delimiter_boundary[unicode-length-20-RECORD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[unicode-length-20-RECORD_DELIMITER-unload] test_copy_csv_delimiter_boundary[unicode-length-21-FIELD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[unicode-length-21-FIELD_DELIMITER-load] test_copy_csv_delimiter_boundary[unicode-length-21-FIELD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[unicode-length-21-FIELD_DELIMITER-unload] test_copy_csv_delimiter_boundary[unicode-length-21-RECORD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[unicode-length-21-RECORD_DELIMITER-load] test_copy_csv_delimiter_boundary[unicode-length-21-RECORD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_delimiter_boundary[unicode-length-21-RECORD_DELIMITER-unload] test_copy_csv_escape_boundary[ascii-ESCAPE-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[ascii-ESCAPE-load] test_copy_csv_escape_boundary[ascii-ESCAPE-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[ascii-ESCAPE-unload] test_copy_csv_escape_boundary[ascii-ESCAPE_UNENCLOSED_FIELD-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[ascii-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_escape_boundary[ascii-ESCAPE_UNENCLOSED_FIELD-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[ascii-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_escape_boundary[byte-255-ESCAPE-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[byte-255-ESCAPE-load] test_copy_csv_escape_boundary[byte-255-ESCAPE-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[byte-255-ESCAPE-unload] test_copy_csv_escape_boundary[byte-255-ESCAPE_UNENCLOSED_FIELD-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[byte-255-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_escape_boundary[byte-255-ESCAPE_UNENCLOSED_FIELD-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[byte-255-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_escape_boundary[hex-prefix-ESCAPE-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[hex-prefix-ESCAPE-load] test_copy_csv_escape_boundary[hex-prefix-ESCAPE-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[hex-prefix-ESCAPE-unload] test_copy_csv_escape_boundary[hex-prefix-ESCAPE_UNENCLOSED_FIELD-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[hex-prefix-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_escape_boundary[hex-prefix-ESCAPE_UNENCLOSED_FIELD-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[hex-prefix-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_escape_boundary[latin1-ESCAPE-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[latin1-ESCAPE-load] test_copy_csv_escape_boundary[latin1-ESCAPE-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[latin1-ESCAPE-unload] test_copy_csv_escape_boundary[latin1-ESCAPE_UNENCLOSED_FIELD-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[latin1-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_escape_boundary[latin1-ESCAPE_UNENCLOSED_FIELD-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[latin1-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_escape_boundary[long-hex-ESCAPE-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[long-hex-ESCAPE-load] test_copy_csv_escape_boundary[long-hex-ESCAPE-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[long-hex-ESCAPE-unload] test_copy_csv_escape_boundary[long-hex-ESCAPE_UNENCLOSED_FIELD-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[long-hex-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_escape_boundary[long-hex-ESCAPE_UNENCLOSED_FIELD-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[long-hex-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_escape_boundary[multichar-ESCAPE-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[multichar-ESCAPE-load] test_copy_csv_escape_boundary[multichar-ESCAPE-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[multichar-ESCAPE-unload] test_copy_csv_escape_boundary[multichar-ESCAPE_UNENCLOSED_FIELD-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[multichar-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_escape_boundary[multichar-ESCAPE_UNENCLOSED_FIELD-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[multichar-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_escape_boundary[non-latin1-ESCAPE-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[non-latin1-ESCAPE-load] test_copy_csv_escape_boundary[non-latin1-ESCAPE-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[non-latin1-ESCAPE-unload] test_copy_csv_escape_boundary[non-latin1-ESCAPE_UNENCLOSED_FIELD-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[non-latin1-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_escape_boundary[non-latin1-ESCAPE_UNENCLOSED_FIELD-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_escape_boundary[non-latin1-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_option_relationship[ESCAPE='xy' FIELD_DELIMITER='ab' RECORD_DELIMITER='abc'-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[ESCAPE='xy' FIELD_DELIMITER='ab' RECORD_DELIMITER='abc'-load] test_copy_csv_option_relationship[ESCAPE='xy' FIELD_DELIMITER='ab' RECORD_DELIMITER='abc'-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[ESCAPE='xy' FIELD_DELIMITER='ab' RECORD_DELIMITER='abc'-unload] test_copy_csv_option_relationship[ESCAPE=123 ESCAPE_UNENCLOSED_FIELD=TRUE-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[ESCAPE=123 ESCAPE_UNENCLOSED_FIELD=TRUE-load] test_copy_csv_option_relationship[ESCAPE=123 ESCAPE_UNENCLOSED_FIELD=TRUE-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[ESCAPE=123 ESCAPE_UNENCLOSED_FIELD=TRUE-unload] test_copy_csv_option_relationship[FIELD_DELIMITER='"' RECORD_DELIMITER='"'-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='"' RECORD_DELIMITER='"'-load] test_copy_csv_option_relationship[FIELD_DELIMITER='"' RECORD_DELIMITER='"'-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='"' RECORD_DELIMITER='"'-unload] test_copy_csv_option_relationship[FIELD_DELIMITER='' RECORD_DELIMITER=''-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='' RECORD_DELIMITER=''-load] test_copy_csv_option_relationship[FIELD_DELIMITER='' RECORD_DELIMITER=''-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='' RECORD_DELIMITER=''-unload] test_copy_csv_option_relationship[FIELD_DELIMITER='0x7c' RECORD_DELIMITER='|x'-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='0x7c' RECORD_DELIMITER='|x'-load] test_copy_csv_option_relationship[FIELD_DELIMITER='0x7c' RECORD_DELIMITER='|x'-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='0x7c' RECORD_DELIMITER='|x'-unload] test_copy_csv_option_relationship[FIELD_DELIMITER='\\\\' RECORD_DELIMITER='\\\\'-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='\\\\' RECORD_DELIMITER='\\\\'-load] test_copy_csv_option_relationship[FIELD_DELIMITER='\\\\' RECORD_DELIMITER='\\\\'-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='\\\\' RECORD_DELIMITER='\\\\'-unload] test_copy_csv_option_relationship[FIELD_DELIMITER='\\n'-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='\\n'-load] test_copy_csv_option_relationship[FIELD_DELIMITER='\\n'-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='\\n'-unload] test_copy_csv_option_relationship[FIELD_DELIMITER='\\r' RECORD_DELIMITER='\\r'-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='\\r' RECORD_DELIMITER='\\r'-load] test_copy_csv_option_relationship[FIELD_DELIMITER='\\r' RECORD_DELIMITER='\\r'-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='\\r' RECORD_DELIMITER='\\r'-unload] test_copy_csv_option_relationship[FIELD_DELIMITER='\\t' RECORD_DELIMITER='\\t'-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='\\t' RECORD_DELIMITER='\\t'-load] test_copy_csv_option_relationship[FIELD_DELIMITER='\\t' RECORD_DELIMITER='\\t'-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='\\t' RECORD_DELIMITER='\\t'-unload] test_copy_csv_option_relationship[FIELD_DELIMITER='\\x00' RECORD_DELIMITER='\\x00'-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='\\x00' RECORD_DELIMITER='\\x00'-load] test_copy_csv_option_relationship[FIELD_DELIMITER='\\x00' RECORD_DELIMITER='\\x00'-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='\\x00' RECORD_DELIMITER='\\x00'-unload] test_copy_csv_option_relationship[FIELD_DELIMITER='\\xC2\\xA2' RECORD_DELIMITER='\\xC2\\xA2'-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='\\xC2\\xA2' RECORD_DELIMITER='\\xC2\\xA2'-load] test_copy_csv_option_relationship[FIELD_DELIMITER='\\xC2\\xA2' RECORD_DELIMITER='\\xC2\\xA2'-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='\\xC2\\xA2' RECORD_DELIMITER='\\xC2\\xA2'-unload] test_copy_csv_option_relationship[FIELD_DELIMITER='\\xC2\\xA2' RECORD_DELIMITER='\\xC2\\xA2x'-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='\\xC2\\xA2' RECORD_DELIMITER='\\xC2\\xA2x'-load] test_copy_csv_option_relationship[FIELD_DELIMITER='\\xC2\\xA2' RECORD_DELIMITER='\\xC2\\xA2x'-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='\\xC2\\xA2' RECORD_DELIMITER='\\xC2\\xA2x'-unload] test_copy_csv_option_relationship[FIELD_DELIMITER='\xa2' RECORD_DELIMITER='\xa2'-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='\xa2' RECORD_DELIMITER='\xa2'-load] test_copy_csv_option_relationship[FIELD_DELIMITER='\xa2' RECORD_DELIMITER='\xa2'-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='\xa2' RECORD_DELIMITER='\xa2'-unload] test_copy_csv_option_relationship[FIELD_DELIMITER='aa' RECORD_DELIMITER='aa'-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='aa' RECORD_DELIMITER='aa'-load] test_copy_csv_option_relationship[FIELD_DELIMITER='aa' RECORD_DELIMITER='aa'-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='aa' RECORD_DELIMITER='aa'-unload] test_copy_csv_option_relationship[FIELD_DELIMITER='aa' RECORD_DELIMITER='aabb'-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='aa' RECORD_DELIMITER='aabb'-load] test_copy_csv_option_relationship[FIELD_DELIMITER='aa' RECORD_DELIMITER='aabb'-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='aa' RECORD_DELIMITER='aabb'-unload] test_copy_csv_option_relationship[FIELD_DELIMITER='aabb' RECORD_DELIMITER='aa'-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='aabb' RECORD_DELIMITER='aa'-load] test_copy_csv_option_relationship[FIELD_DELIMITER='aabb' RECORD_DELIMITER='aa'-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='aabb' RECORD_DELIMITER='aa'-unload] test_copy_csv_option_relationship[FIELD_DELIMITER='ab' RECORD_DELIMITER='abc' ESCAPE='xy'-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='ab' RECORD_DELIMITER='abc' ESCAPE='xy'-load] test_copy_csv_option_relationship[FIELD_DELIMITER='ab' RECORD_DELIMITER='abc' ESCAPE='xy'-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='ab' RECORD_DELIMITER='abc' ESCAPE='xy'-unload] test_copy_csv_option_relationship[FIELD_DELIMITER='ab' RECORD_DELIMITER='bc'-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='ab' RECORD_DELIMITER='bc'-load] test_copy_csv_option_relationship[FIELD_DELIMITER='ab' RECORD_DELIMITER='bc'-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='ab' RECORD_DELIMITER='bc'-unload] test_copy_csv_option_relationship[FIELD_DELIMITER='x\\nx'-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='x\\nx'-load] test_copy_csv_option_relationship[FIELD_DELIMITER='x\\nx'-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER='x\\nx'-unload] test_copy_csv_option_relationship[FIELD_DELIMITER=NONE RECORD_DELIMITER=NONE-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER=NONE RECORD_DELIMITER=NONE-load] test_copy_csv_option_relationship[FIELD_DELIMITER=NONE RECORD_DELIMITER=NONE-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[FIELD_DELIMITER=NONE RECORD_DELIMITER=NONE-unload] test_copy_csv_option_relationship[RECORD_DELIMITER=','-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[RECORD_DELIMITER=','-load] test_copy_csv_option_relationship[RECORD_DELIMITER=','-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[RECORD_DELIMITER=','-unload] test_copy_csv_option_relationship[RECORD_DELIMITER='x,x'-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[RECORD_DELIMITER='x,x'-load] test_copy_csv_option_relationship[RECORD_DELIMITER='x,x'-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[RECORD_DELIMITER='x,x'-unload] test_copy_csv_option_relationship[RECORD_DELIMITER=123 FIELD_DELIMITER=TRUE-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[RECORD_DELIMITER=123 FIELD_DELIMITER=TRUE-load] test_copy_csv_option_relationship[RECORD_DELIMITER=123 FIELD_DELIMITER=TRUE-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_relationship[RECORD_DELIMITER=123 FIELD_DELIMITER=TRUE-unload] test_copy_csv_option_scalar[bare-none-ESCAPE-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[bare-none-ESCAPE-load] test_copy_csv_option_scalar[bare-none-ESCAPE-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[bare-none-ESCAPE-unload] test_copy_csv_option_scalar[bare-none-ESCAPE_UNENCLOSED_FIELD-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[bare-none-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_option_scalar[bare-none-ESCAPE_UNENCLOSED_FIELD-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[bare-none-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_option_scalar[bare-none-FIELD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[bare-none-FIELD_DELIMITER-load] test_copy_csv_option_scalar[bare-none-FIELD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[bare-none-FIELD_DELIMITER-unload] test_copy_csv_option_scalar[bare-none-RECORD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[bare-none-RECORD_DELIMITER-load] test_copy_csv_option_scalar[bare-none-RECORD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[bare-none-RECORD_DELIMITER-unload] test_copy_csv_option_scalar[boolean-ESCAPE-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[boolean-ESCAPE-load] test_copy_csv_option_scalar[boolean-ESCAPE-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[boolean-ESCAPE-unload] test_copy_csv_option_scalar[boolean-ESCAPE_UNENCLOSED_FIELD-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[boolean-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_option_scalar[boolean-ESCAPE_UNENCLOSED_FIELD-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[boolean-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_option_scalar[boolean-FIELD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[boolean-FIELD_DELIMITER-load] test_copy_csv_option_scalar[boolean-FIELD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[boolean-FIELD_DELIMITER-unload] test_copy_csv_option_scalar[boolean-RECORD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[boolean-RECORD_DELIMITER-load] test_copy_csv_option_scalar[boolean-RECORD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[boolean-RECORD_DELIMITER-unload] test_copy_csv_option_scalar[empty-ESCAPE-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[empty-ESCAPE-load] test_copy_csv_option_scalar[empty-ESCAPE-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[empty-ESCAPE-unload] test_copy_csv_option_scalar[empty-ESCAPE_UNENCLOSED_FIELD-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[empty-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_option_scalar[empty-ESCAPE_UNENCLOSED_FIELD-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[empty-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_option_scalar[empty-FIELD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[empty-FIELD_DELIMITER-load] test_copy_csv_option_scalar[empty-FIELD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[empty-FIELD_DELIMITER-unload] test_copy_csv_option_scalar[empty-RECORD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[empty-RECORD_DELIMITER-load] test_copy_csv_option_scalar[empty-RECORD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[empty-RECORD_DELIMITER-unload] test_copy_csv_option_scalar[identifier-ESCAPE-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[identifier-ESCAPE-load] test_copy_csv_option_scalar[identifier-ESCAPE-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[identifier-ESCAPE-unload] test_copy_csv_option_scalar[identifier-ESCAPE_UNENCLOSED_FIELD-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[identifier-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_option_scalar[identifier-ESCAPE_UNENCLOSED_FIELD-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[identifier-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_option_scalar[identifier-FIELD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[identifier-FIELD_DELIMITER-load] test_copy_csv_option_scalar[identifier-FIELD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[identifier-FIELD_DELIMITER-unload] test_copy_csv_option_scalar[identifier-RECORD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[identifier-RECORD_DELIMITER-load] test_copy_csv_option_scalar[identifier-RECORD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[identifier-RECORD_DELIMITER-unload] test_copy_csv_option_scalar[invalid-hex-ESCAPE-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[invalid-hex-ESCAPE-load] test_copy_csv_option_scalar[invalid-hex-ESCAPE-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[invalid-hex-ESCAPE-unload] test_copy_csv_option_scalar[invalid-hex-ESCAPE_UNENCLOSED_FIELD-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[invalid-hex-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_option_scalar[invalid-hex-ESCAPE_UNENCLOSED_FIELD-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[invalid-hex-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_option_scalar[invalid-hex-FIELD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[invalid-hex-FIELD_DELIMITER-load] test_copy_csv_option_scalar[invalid-hex-FIELD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[invalid-hex-FIELD_DELIMITER-unload] test_copy_csv_option_scalar[invalid-hex-RECORD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[invalid-hex-RECORD_DELIMITER-load] test_copy_csv_option_scalar[invalid-hex-RECORD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[invalid-hex-RECORD_DELIMITER-unload] test_copy_csv_option_scalar[lower-boolean-ESCAPE-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-boolean-ESCAPE-load] test_copy_csv_option_scalar[lower-boolean-ESCAPE-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-boolean-ESCAPE-unload] test_copy_csv_option_scalar[lower-boolean-ESCAPE_UNENCLOSED_FIELD-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-boolean-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_option_scalar[lower-boolean-ESCAPE_UNENCLOSED_FIELD-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-boolean-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_option_scalar[lower-boolean-FIELD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-boolean-FIELD_DELIMITER-load] test_copy_csv_option_scalar[lower-boolean-FIELD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-boolean-FIELD_DELIMITER-unload] test_copy_csv_option_scalar[lower-boolean-RECORD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-boolean-RECORD_DELIMITER-load] test_copy_csv_option_scalar[lower-boolean-RECORD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-boolean-RECORD_DELIMITER-unload] test_copy_csv_option_scalar[lower-mixed-list-ESCAPE-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-mixed-list-ESCAPE-load] test_copy_csv_option_scalar[lower-mixed-list-ESCAPE-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-mixed-list-ESCAPE-unload] test_copy_csv_option_scalar[lower-mixed-list-ESCAPE_UNENCLOSED_FIELD-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-mixed-list-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_option_scalar[lower-mixed-list-ESCAPE_UNENCLOSED_FIELD-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-mixed-list-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_option_scalar[lower-mixed-list-FIELD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-mixed-list-FIELD_DELIMITER-load] test_copy_csv_option_scalar[lower-mixed-list-FIELD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-mixed-list-FIELD_DELIMITER-unload] test_copy_csv_option_scalar[lower-mixed-list-RECORD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-mixed-list-RECORD_DELIMITER-load] test_copy_csv_option_scalar[lower-mixed-list-RECORD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-mixed-list-RECORD_DELIMITER-unload] test_copy_csv_option_scalar[lower-none-ESCAPE-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-none-ESCAPE-load] test_copy_csv_option_scalar[lower-none-ESCAPE-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-none-ESCAPE-unload] test_copy_csv_option_scalar[lower-none-ESCAPE_UNENCLOSED_FIELD-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-none-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_option_scalar[lower-none-ESCAPE_UNENCLOSED_FIELD-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-none-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_option_scalar[lower-none-FIELD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-none-FIELD_DELIMITER-load] test_copy_csv_option_scalar[lower-none-FIELD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-none-FIELD_DELIMITER-unload] test_copy_csv_option_scalar[lower-none-RECORD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-none-RECORD_DELIMITER-load] test_copy_csv_option_scalar[lower-none-RECORD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[lower-none-RECORD_DELIMITER-unload] test_copy_csv_option_scalar[mixed-list-ESCAPE-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[mixed-list-ESCAPE-load] test_copy_csv_option_scalar[mixed-list-ESCAPE-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[mixed-list-ESCAPE-unload] test_copy_csv_option_scalar[mixed-list-ESCAPE_UNENCLOSED_FIELD-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[mixed-list-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_option_scalar[mixed-list-ESCAPE_UNENCLOSED_FIELD-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[mixed-list-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_option_scalar[mixed-list-FIELD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[mixed-list-FIELD_DELIMITER-load] test_copy_csv_option_scalar[mixed-list-FIELD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[mixed-list-FIELD_DELIMITER-unload] test_copy_csv_option_scalar[mixed-list-RECORD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[mixed-list-RECORD_DELIMITER-load] test_copy_csv_option_scalar[mixed-list-RECORD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[mixed-list-RECORD_DELIMITER-unload] test_copy_csv_option_scalar[nul-ESCAPE-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[nul-ESCAPE-load] test_copy_csv_option_scalar[nul-ESCAPE-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[nul-ESCAPE-unload] test_copy_csv_option_scalar[nul-ESCAPE_UNENCLOSED_FIELD-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[nul-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_option_scalar[nul-ESCAPE_UNENCLOSED_FIELD-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[nul-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_option_scalar[nul-FIELD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[nul-FIELD_DELIMITER-load] test_copy_csv_option_scalar[nul-FIELD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[nul-FIELD_DELIMITER-unload] test_copy_csv_option_scalar[nul-RECORD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[nul-RECORD_DELIMITER-load] test_copy_csv_option_scalar[nul-RECORD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[nul-RECORD_DELIMITER-unload] test_copy_csv_option_scalar[null-ESCAPE-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[null-ESCAPE-load] test_copy_csv_option_scalar[null-ESCAPE-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[null-ESCAPE-unload] test_copy_csv_option_scalar[null-ESCAPE_UNENCLOSED_FIELD-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[null-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_option_scalar[null-ESCAPE_UNENCLOSED_FIELD-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[null-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_option_scalar[null-FIELD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[null-FIELD_DELIMITER-load] test_copy_csv_option_scalar[null-FIELD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[null-FIELD_DELIMITER-unload] test_copy_csv_option_scalar[null-RECORD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[null-RECORD_DELIMITER-load] test_copy_csv_option_scalar[null-RECORD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[null-RECORD_DELIMITER-unload] test_copy_csv_option_scalar[number-ESCAPE-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[number-ESCAPE-load] test_copy_csv_option_scalar[number-ESCAPE-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[number-ESCAPE-unload] test_copy_csv_option_scalar[number-ESCAPE_UNENCLOSED_FIELD-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[number-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_option_scalar[number-ESCAPE_UNENCLOSED_FIELD-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[number-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_option_scalar[number-FIELD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[number-FIELD_DELIMITER-load] test_copy_csv_option_scalar[number-FIELD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[number-FIELD_DELIMITER-unload] test_copy_csv_option_scalar[number-RECORD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[number-RECORD_DELIMITER-load] test_copy_csv_option_scalar[number-RECORD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[number-RECORD_DELIMITER-unload] test_copy_csv_option_scalar[number-list-ESCAPE-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[number-list-ESCAPE-load] test_copy_csv_option_scalar[number-list-ESCAPE-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[number-list-ESCAPE-unload] test_copy_csv_option_scalar[number-list-ESCAPE_UNENCLOSED_FIELD-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[number-list-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_option_scalar[number-list-ESCAPE_UNENCLOSED_FIELD-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[number-list-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_option_scalar[number-list-FIELD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[number-list-FIELD_DELIMITER-load] test_copy_csv_option_scalar[number-list-FIELD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[number-list-FIELD_DELIMITER-unload] test_copy_csv_option_scalar[number-list-RECORD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[number-list-RECORD_DELIMITER-load] test_copy_csv_option_scalar[number-list-RECORD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[number-list-RECORD_DELIMITER-unload] test_copy_csv_option_scalar[property-list-ESCAPE-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[property-list-ESCAPE-load] test_copy_csv_option_scalar[property-list-ESCAPE-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[property-list-ESCAPE-unload] test_copy_csv_option_scalar[property-list-ESCAPE_UNENCLOSED_FIELD-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[property-list-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_option_scalar[property-list-ESCAPE_UNENCLOSED_FIELD-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[property-list-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_option_scalar[property-list-FIELD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[property-list-FIELD_DELIMITER-load] test_copy_csv_option_scalar[property-list-FIELD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[property-list-FIELD_DELIMITER-unload] test_copy_csv_option_scalar[property-list-RECORD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[property-list-RECORD_DELIMITER-load] test_copy_csv_option_scalar[property-list-RECORD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[property-list-RECORD_DELIMITER-unload] test_copy_csv_option_scalar[quoted-none-ESCAPE-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[quoted-none-ESCAPE-load] test_copy_csv_option_scalar[quoted-none-ESCAPE-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[quoted-none-ESCAPE-unload] test_copy_csv_option_scalar[quoted-none-ESCAPE_UNENCLOSED_FIELD-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[quoted-none-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_option_scalar[quoted-none-ESCAPE_UNENCLOSED_FIELD-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[quoted-none-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_option_scalar[quoted-none-FIELD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[quoted-none-FIELD_DELIMITER-load] test_copy_csv_option_scalar[quoted-none-FIELD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[quoted-none-FIELD_DELIMITER-unload] test_copy_csv_option_scalar[quoted-none-RECORD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[quoted-none-RECORD_DELIMITER-load] test_copy_csv_option_scalar[quoted-none-RECORD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[quoted-none-RECORD_DELIMITER-unload] test_copy_csv_option_scalar[quoted-null-ESCAPE-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[quoted-null-ESCAPE-load] test_copy_csv_option_scalar[quoted-null-ESCAPE-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[quoted-null-ESCAPE-unload] test_copy_csv_option_scalar[quoted-null-ESCAPE_UNENCLOSED_FIELD-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[quoted-null-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_option_scalar[quoted-null-ESCAPE_UNENCLOSED_FIELD-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[quoted-null-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_option_scalar[quoted-null-FIELD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[quoted-null-FIELD_DELIMITER-load] test_copy_csv_option_scalar[quoted-null-FIELD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[quoted-null-FIELD_DELIMITER-unload] test_copy_csv_option_scalar[quoted-null-RECORD_DELIMITER-load] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[quoted-null-RECORD_DELIMITER-load] test_copy_csv_option_scalar[quoted-null-RECORD_DELIMITER-unload] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[quoted-null-RECORD_DELIMITER-unload] test_copy_csv_option_scalar[single-string-list-ESCAPE-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[single-string-list-ESCAPE-load] test_copy_csv_option_scalar[single-string-list-ESCAPE-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[single-string-list-ESCAPE-unload] test_copy_csv_option_scalar[single-string-list-ESCAPE_UNENCLOSED_FIELD-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[single-string-list-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_option_scalar[single-string-list-ESCAPE_UNENCLOSED_FIELD-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[single-string-list-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_option_scalar[single-string-list-FIELD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[single-string-list-FIELD_DELIMITER-load] test_copy_csv_option_scalar[single-string-list-FIELD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[single-string-list-FIELD_DELIMITER-unload] test_copy_csv_option_scalar[single-string-list-RECORD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[single-string-list-RECORD_DELIMITER-load] test_copy_csv_option_scalar[single-string-list-RECORD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[single-string-list-RECORD_DELIMITER-unload] test_copy_csv_option_scalar[string-list-ESCAPE-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[string-list-ESCAPE-load] test_copy_csv_option_scalar[string-list-ESCAPE-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[string-list-ESCAPE-unload] test_copy_csv_option_scalar[string-list-ESCAPE_UNENCLOSED_FIELD-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[string-list-ESCAPE_UNENCLOSED_FIELD-load] test_copy_csv_option_scalar[string-list-ESCAPE_UNENCLOSED_FIELD-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[string-list-ESCAPE_UNENCLOSED_FIELD-unload] test_copy_csv_option_scalar[string-list-FIELD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[string-list-FIELD_DELIMITER-load] test_copy_csv_option_scalar[string-list-FIELD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[string-list-FIELD_DELIMITER-unload] test_copy_csv_option_scalar[string-list-RECORD_DELIMITER-load] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[string-list-RECORD_DELIMITER-load] test_copy_csv_option_scalar[string-list-RECORD_DELIMITER-unload] × error -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_option_scalar[string-list-RECORD_DELIMITER-unload] test_copy_csv_property_delimiter_content[FIELD_DELIMITER] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_property_delimiter_content[FIELD_DELIMITER] test_copy_csv_property_delimiter_content[RECORD_DELIMITER] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_property_delimiter_content[RECORD_DELIMITER] test_copy_csv_single_character_delimiter_content['1'-FIELD_DELIMITER] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_single_character_delimiter_content['1'-FIELD_DELIMITER] test_copy_csv_single_character_delimiter_content['1'-RECORD_DELIMITER] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_single_character_delimiter_content['1'-RECORD_DELIMITER] test_copy_csv_single_character_delimiter_content['9'-FIELD_DELIMITER] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_single_character_delimiter_content['9'-FIELD_DELIMITER] test_copy_csv_single_character_delimiter_content['9'-RECORD_DELIMITER] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_single_character_delimiter_content['9'-RECORD_DELIMITER] test_copy_csv_single_character_delimiter_content['A'-FIELD_DELIMITER] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_single_character_delimiter_content['A'-FIELD_DELIMITER] test_copy_csv_single_character_delimiter_content['A'-RECORD_DELIMITER] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_single_character_delimiter_content['A'-RECORD_DELIMITER] test_copy_csv_single_character_delimiter_content['\\141'-FIELD_DELIMITER] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_single_character_delimiter_content['\\141'-FIELD_DELIMITER] test_copy_csv_single_character_delimiter_content['\\141'-RECORD_DELIMITER] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_single_character_delimiter_content['\\141'-RECORD_DELIMITER] test_copy_csv_single_character_delimiter_content['\\x61'-FIELD_DELIMITER] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_single_character_delimiter_content['\\x61'-FIELD_DELIMITER] test_copy_csv_single_character_delimiter_content['\\x61'-RECORD_DELIMITER] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_single_character_delimiter_content['\\x61'-RECORD_DELIMITER] test_copy_csv_single_character_delimiter_content['a'-FIELD_DELIMITER] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_single_character_delimiter_content['a'-FIELD_DELIMITER] test_copy_csv_single_character_delimiter_content['a'-RECORD_DELIMITER] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_single_character_delimiter_content['a'-RECORD_DELIMITER] test_copy_csv_single_character_delimiter_content['f'-FIELD_DELIMITER] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_single_character_delimiter_content['f'-FIELD_DELIMITER] test_copy_csv_single_character_delimiter_content['f'-RECORD_DELIMITER] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_single_character_delimiter_content['f'-RECORD_DELIMITER] test_copy_csv_single_character_delimiter_content['z'-FIELD_DELIMITER] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_single_character_delimiter_content['z'-FIELD_DELIMITER] test_copy_csv_single_character_delimiter_content['z'-RECORD_DELIMITER] × happy/boundary -> tests/queries/stages/test_copy_csv_option_diagnostics.py::test_copy_csv_single_character_delimiter_content['z'-RECORD_DELIMITER] test_copy_csv_control_character_escape[carriage-return-ESCAPE-inline] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_control_character_escape[carriage-return-ESCAPE-inline] test_copy_csv_control_character_escape[carriage-return-ESCAPE-stage] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_control_character_escape[carriage-return-ESCAPE-stage] test_copy_csv_control_character_escape[carriage-return-ESCAPE_UNENCLOSED_FIELD-inline] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_control_character_escape[carriage-return-ESCAPE_UNENCLOSED_FIELD-inline] test_copy_csv_control_character_escape[carriage-return-ESCAPE_UNENCLOSED_FIELD-stage] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_control_character_escape[carriage-return-ESCAPE_UNENCLOSED_FIELD-stage] test_copy_csv_control_character_escape[newline-ESCAPE-inline] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_control_character_escape[newline-ESCAPE-inline] test_copy_csv_control_character_escape[newline-ESCAPE-stage] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_control_character_escape[newline-ESCAPE-stage] test_copy_csv_control_character_escape[newline-ESCAPE_UNENCLOSED_FIELD-inline] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_control_character_escape[newline-ESCAPE_UNENCLOSED_FIELD-inline] test_copy_csv_control_character_escape[newline-ESCAPE_UNENCLOSED_FIELD-stage] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_control_character_escape[newline-ESCAPE_UNENCLOSED_FIELD-stage] test_copy_csv_control_character_escape[tab-ESCAPE-inline] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_control_character_escape[tab-ESCAPE-inline] test_copy_csv_control_character_escape[tab-ESCAPE-stage] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_control_character_escape[tab-ESCAPE-stage] test_copy_csv_control_character_escape[tab-ESCAPE_UNENCLOSED_FIELD-inline] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_control_character_escape[tab-ESCAPE_UNENCLOSED_FIELD-inline] test_copy_csv_control_character_escape[tab-ESCAPE_UNENCLOSED_FIELD-stage] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_control_character_escape[tab-ESCAPE_UNENCLOSED_FIELD-stage] test_copy_csv_controls[empty-ABORT_STATEMENT-inline] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_controls[empty-ABORT_STATEMENT-inline] test_copy_csv_controls[empty-ABORT_STATEMENT-named] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_controls[empty-ABORT_STATEMENT-named] test_copy_csv_controls[empty-ABORT_STATEMENT-stage] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_controls[empty-ABORT_STATEMENT-stage] test_copy_csv_controls[empty-CONTINUE-inline] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_controls[empty-CONTINUE-inline] test_copy_csv_controls[empty-CONTINUE-named] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_controls[empty-CONTINUE-named] test_copy_csv_controls[empty-CONTINUE-stage] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_controls[empty-CONTINUE-stage] test_copy_csv_controls[empty-SKIP_FILE-inline] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_controls[empty-SKIP_FILE-inline] test_copy_csv_controls[empty-SKIP_FILE-named] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_controls[empty-SKIP_FILE-named] test_copy_csv_controls[empty-SKIP_FILE-stage] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_controls[empty-SKIP_FILE-stage] test_copy_csv_controls[escaped-eof-ABORT_STATEMENT-inline] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_controls[escaped-eof-ABORT_STATEMENT-inline] test_copy_csv_controls[escaped-eof-ABORT_STATEMENT-named] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_controls[escaped-eof-ABORT_STATEMENT-named] test_copy_csv_controls[escaped-eof-ABORT_STATEMENT-stage] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_controls[escaped-eof-ABORT_STATEMENT-stage] test_copy_csv_controls[escaped-eof-CONTINUE-inline] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_controls[escaped-eof-CONTINUE-inline] test_copy_csv_controls[escaped-eof-CONTINUE-named] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_controls[escaped-eof-CONTINUE-named] test_copy_csv_controls[escaped-eof-CONTINUE-stage] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_controls[escaped-eof-CONTINUE-stage] test_copy_csv_controls[escaped-eof-SKIP_FILE-inline] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_controls[escaped-eof-SKIP_FILE-inline] test_copy_csv_controls[escaped-eof-SKIP_FILE-named] × happy/boundary -> tests/queries/stages/test_copy_csv_disabled.py::test_copy_csv_controls[escaped-eof-SKIP_FILE-name…
1 parent a46cba7 commit e5bf07a

1 file changed

Lines changed: 19 additions & 7 deletions

File tree

‎src/parser/mod.rs‎

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24348,14 +24348,9 @@ impl<'a> Parser<'a> {
2434824348
option_value: KeyValueOptionKind::Single(self.parse_value()?),
2434924349
}),
2435024350
Token::Minus if matches!(self.peek_nth_token(1).token, Token::Number(..)) => {
24351-
self.next_token();
24352-
let mut value = self.parse_value()?;
24353-
if let Value::Number(number, _) = &mut value.value {
24354-
number.insert(0, '-');
24355-
}
2435624351
Ok(KeyValueOption {
2435724352
option_name: key.value.clone(),
24358-
option_value: KeyValueOptionKind::Single(value),
24353+
option_value: KeyValueOptionKind::Single(self.parse_signed_option_value()?),
2435924354
})
2436024355
}
2436124356
// A wire bind placeholder (`?`, `:N`, `:name`) is a legal option
@@ -24419,7 +24414,8 @@ impl<'a> Parser<'a> {
2441924414
// a list of key-value properties.
2442024415
match self.maybe_parse(|parser| {
2442124416
parser.expect_token(&Token::LParen)?;
24422-
let values = parser.parse_comma_separated0(|p| p.parse_value(), Token::RParen);
24417+
let values = parser
24418+
.parse_comma_separated0(|p| p.parse_signed_option_value(), Token::RParen);
2442324419
parser.expect_token(&Token::RParen)?;
2442424420
values
2442524421
})? {
@@ -24439,6 +24435,22 @@ impl<'a> Parser<'a> {
2443924435
}
2444024436
}
2444124437

24438+
fn parse_signed_option_value(&mut self) -> Result<ValueWithSpan, ParserError> {
24439+
if self.peek_token_ref().token == Token::Minus
24440+
&& matches!(self.peek_nth_token(1).token, Token::Number(..))
24441+
{
24442+
let sign = self.next_token();
24443+
let mut value = self.parse_value()?;
24444+
if let Value::Number(number, _) = &mut value.value {
24445+
number.insert(0, '-');
24446+
}
24447+
value.span.start = sign.span.start;
24448+
Ok(value)
24449+
} else {
24450+
self.parse_value()
24451+
}
24452+
}
24453+
2444224454
/// Parses a RESET statement
2444324455
fn parse_reset(&mut self) -> Result<ResetStatement, ParserError> {
2444424456
if self.parse_keyword(Keyword::ALL) {

0 commit comments

Comments
 (0)