Skip to content

Commit fe684bf

Browse files
committed
Add format argument to write_file and add file format types to DuckDB library (#14427)
- Fix for `Table.format` on `Char` and `Mixed` columns. - Fix for `Postgres_Connection` table viz to only show chosen schema. - Added `DuckDB_Format` for setting parameters on CSV, JSON, Parquet. - Updated `read_file` and `write_file` to use the `DuckDB_Format`. - Added `DuckDB_FIle_Format` to allow connection to DuckDB via `Data.read` (like SQLite). - Added `Parquet_Format` to read and write data to parquet files via DuckDB. - Added `DuckDB_Table_Format` to allow reading a format using DuckDB in as a table either in memory or in duckdb. - Alter case of `Snowflake.File_Format` to be less capitalised. (cherry picked from commit 64c3d05)
1 parent 837515d commit fe684bf

File tree

22 files changed

+690
-75
lines changed

22 files changed

+690
-75
lines changed

CHANGELOG.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,11 @@
7474
- [Initial Spatial support within DuckDB][14331]
7575
- [Add email SMTP support][14350]
7676
- [Read files into DuckDB both spatial and not.][14367]
77-
- [Implement Text_Column to_case for DB backends][14386]
78-
- [Implement bulk loading to DuckDB][14402]
77+
- [Implement Text_Column to_case for DB backends.][14386]
78+
- [Implement bulk loading to DuckDB.][14402]
7979
- [Implement `Text_Column.text_mid` for in-memory and database backends.][14420]
80-
- [Initial file writing from DuckDB][14421]
80+
- [Initial file writing from DuckDB.][14421]
81+
- [Parquet file reading and writing, DuckDB formats.][14427]
8182

8283
[13769]: https://github.com/enso-org/enso/pull/13769
8384
[14026]: https://github.com/enso-org/enso/pull/14026
@@ -104,6 +105,7 @@
104105
[14402]: https://github.com/enso-org/enso/pull/14402
105106
[14420]: https://github.com/enso-org/enso/pull/14420
106107
[14421]: https://github.com/enso-org/enso/pull/14421
108+
[14427]: https://github.com/enso-org/enso/pull/14427
107109

108110
#### Enso Language & Runtime
109111

distribution/lib/Standard/Database/0.0.0-dev/src/Connection/Postgres_Connection.enso

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -430,5 +430,7 @@ type Postgres_Connection
430430
## ---
431431
private: true
432432
---
433-
Table_Viz_Data.from (that:Postgres_Connection) =
434-
Connections_Helpers.get_table_viz_data (that.connection.tables.at "Name" . to_vector)
433+
Table_Viz_Data.from (that:Postgres_Connection) =
434+
tables = that.tables . read . filter "Schema" (..Equal that.schema)
435+
names = tables.at "Name" . to_vector
436+
Connections_Helpers.get_table_viz_data (names)

distribution/lib/Standard/DuckDB/0.0.0-dev/docs/api/DuckDB.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
- type DuckDB
44
- From_File location:Standard.Base.System.File.File= schema:Standard.Base.Data.Text.Text= read_only:Standard.Base.Data.Boolean.Boolean=
55
- In_Memory schema:Standard.Base.Data.Text.Text= read_only:Standard.Base.Data.Boolean.Boolean=
6-
- connect self options:Standard.Base.Any.Any -> Standard.Base.Any.Any
6+
- connect self options:Standard.Base.Any.Any= -> Standard.Base.Any.Any
77
- jdbc_properties self -> Standard.Base.Any.Any
88
- jdbc_url self -> Standard.Base.Any.Any
99
- resolve constructor:Standard.Base.Any.Any -> Standard.Base.Any.Any

distribution/lib/Standard/DuckDB/0.0.0-dev/docs/api/DuckDB_Connection.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
- jdbc_connection self -> Standard.Base.Any.Any
2222
- query self query:(Standard.Database.SQL_Query.SQL_Query_With_Schema|Standard.Database.SQL_Query.SQL_Query) alias:Standard.Base.Any.Any= -> Standard.Base.Any.Any
2323
- read self query:(Standard.Database.SQL_Query.SQL_Query_With_Schema|Standard.Database.SQL_Query.SQL_Query) limit:Standard.Table.Rows_To_Read.Rows_To_Read= -> Standard.Base.Any.Any
24-
- read_file self path:Standard.Base.Any.Any= as:Standard.Base.Data.Text.Text= key_columns:Standard.Base.Data.Vector.Vector= replace_if_present:Standard.Base.Data.Boolean.Boolean= -> Standard.Base.Any.Any
24+
- read_file self path:Standard.Base.Any.Any= as:Standard.Base.Data.Text.Text= format:Standard.DuckDB.DuckDB_Format.DuckDB_Format= key_columns:Standard.Base.Data.Vector.Vector= replace_if_present:Standard.Base.Data.Boolean.Boolean= -> Standard.Base.Any.Any
2525
- read_spatial_file self path:Standard.Base.Any.Any= as:Standard.Base.Data.Text.Text= key_columns:Standard.Base.Data.Vector.Vector= replace_if_present:Standard.Base.Data.Boolean.Boolean= -> Standard.Base.Any.Any
2626
- schema self -> Standard.Base.Any.Any
2727
- schemas self -> Standard.Base.Any.Any
@@ -35,6 +35,6 @@
3535
- type_mapping self -> Standard.Base.Any.Any
3636
- version self -> Standard.Base.Data.Text.Text
3737
- write_database self path:Standard.Base.System.File.Generic.Writable_File.Writable_File= schema_only:Standard.Base.Data.Boolean.Boolean= on_existing_file:Standard.Base.System.File.Existing_File_Behavior.Existing_File_Behavior= -> Standard.Base.Any.Any
38-
- write_file self query:(Standard.Database.SQL_Query.SQL_Query_With_Schema|Standard.Database.SQL_Query.SQL_Query|Standard.Table.Table.Table)= path:Standard.Base.System.File.Generic.Writable_File.Writable_File= on_existing_file:Standard.Base.System.File.Existing_File_Behavior.Existing_File_Behavior= -> Standard.Base.Any.Any
38+
- write_file self query:(Standard.Database.SQL_Query.SQL_Query_With_Schema|Standard.Database.SQL_Query.SQL_Query|Standard.Table.Table.Table)= path:Standard.Base.System.File.Generic.Writable_File.Writable_File= format:Standard.DuckDB.DuckDB_Format.DuckDB_Format= on_existing_file:Standard.Base.System.File.Existing_File_Behavior.Existing_File_Behavior= -> Standard.Base.Any.Any
3939
- schema_black_list -> Standard.Base.Any.Any
4040
- Standard.Base.Visualization.Table_Viz_Data.Table_Viz_Data.from that:Standard.DuckDB.DuckDB_Connection.DuckDB_Connection -> Standard.Base.Visualization.Table_Viz_Data.Table_Viz_Data
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
## Enso Signatures 1.0
2+
## module Standard.DuckDB.DuckDB_Format
3+
- type DuckDB_Compression
4+
- Auto
5+
- GZip
6+
- None
7+
- Zstandard
8+
- type DuckDB_Format
9+
- Auto
10+
- CSV delimiter:Standard.Base.Data.Text.Text= header:Standard.Base.Data.Boolean.Boolean= date_format:Standard.Base.Data.Text.Text= timestamp_format:Standard.Base.Data.Text.Text= quote_char:Standard.Base.Data.Text.Text= escape_char:Standard.Base.Data.Text.Text= compression:Standard.DuckDB.DuckDB_Format.DuckDB_Compression=
11+
- JSON date_format:Standard.Base.Data.Text.Text= timestamp_format:Standard.Base.Data.Text.Text= compression:Standard.DuckDB.DuckDB_Format.DuckDB_Compression=
12+
- JSON_Lines date_format:Standard.Base.Data.Text.Text= timestamp_format:Standard.Base.Data.Text.Text= compression:Standard.DuckDB.DuckDB_Format.DuckDB_Compression=
13+
- Parquet compression:Standard.DuckDB.DuckDB_Format.DuckDB_Parquet_Compression= field_ids:Standard.Base.Data.Text.Text= version:Standard.DuckDB.DuckDB_Format.DuckDB_Parquet_Version=
14+
- type DuckDB_Parquet_Compression
15+
- Brotli
16+
- GZip
17+
- LZ4
18+
- LZ4_Raw
19+
- None
20+
- Snappy
21+
- Zstandard compression_level:Standard.Base.Data.Numbers.Integer=
22+
- type DuckDB_Parquet_Version
23+
- V1
24+
- V2
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
## Enso Signatures 1.0
2+
## module Standard.DuckDB.File_Formats.DuckDB_File_Format
3+
- type DuckDB_File_Format
4+
- DuckDB
5+
- for_file_write file:Standard.Base.System.File.Generic.Writable_File.Writable_File -> Standard.Base.Any.Any
6+
- for_read file:Standard.Base.System.File_Format_Metadata.File_Format_Metadata -> Standard.Base.Any.Any
7+
- get_dropdown_options -> Standard.Base.Any.Any
8+
- get_name_patterns -> (Standard.Base.Data.Vector.Vector Standard.Base.System.File_Format.File_Name_Pattern)
9+
- read self file:Standard.Base.Any.Any on_problems:Standard.Base.Errors.Problem_Behavior.Problem_Behavior -> Standard.Base.Any.Any
10+
- read_stream self stream:Standard.Base.Any.Any metadata:Standard.Base.Any.Any -> Standard.Base.Any.Any
11+
- resolve constructor:Standard.Base.Any.Any -> Standard.Base.Any.Any
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
## Enso Signatures 1.0
2+
## module Standard.DuckDB.File_Formats.DuckDB_Table_Format
3+
- type DuckDB_Table_Format
4+
- DuckDB_Table format:Standard.DuckDB.DuckDB_Format.DuckDB_Format= in_memory:Standard.Base.Data.Boolean.Boolean=
5+
- for_file_write file:Standard.Base.Any.Any -> Standard.Base.Any.Any
6+
- for_read file:Standard.Base.System.File_Format_Metadata.File_Format_Metadata -> Standard.Base.Any.Any
7+
- get_dropdown_options -> Standard.Base.Any.Any
8+
- get_name_patterns -> (Standard.Base.Data.Vector.Vector Standard.Base.System.File_Format.File_Name_Pattern)
9+
- read self file:Standard.Base.Any.Any on_problems:Standard.Base.Errors.Problem_Behavior.Problem_Behavior -> Standard.Base.Any.Any
10+
- read_stream self stream:Standard.Base.System.Input_Stream.Input_Stream metadata:Standard.Base.System.File_Format_Metadata.File_Format_Metadata= -> Standard.Base.Any.Any
11+
- resolve constructor:Standard.Base.Any.Any -> Standard.Base.Any.Any
12+
- write_table self file:Standard.Base.Any.Any table:Standard.Base.Any.Any on_existing_file:Standard.Base.Any.Any match_columns:Standard.Base.Any.Any on_problems:Standard.Base.Errors.Problem_Behavior.Problem_Behavior -> Standard.Base.Any.Any
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
## Enso Signatures 1.0
2+
## module Standard.DuckDB.File_Formats.Parquet_Format
3+
- type Parquet_Format
4+
- Parquet compression:Standard.DuckDB.DuckDB_Format.DuckDB_Parquet_Compression= field_ids:Standard.Base.Data.Text.Text= version:Standard.DuckDB.DuckDB_Format.DuckDB_Parquet_Version=
5+
- for_file_write file:Standard.Base.Any.Any -> Standard.Base.Any.Any
6+
- for_read file:Standard.Base.System.File_Format_Metadata.File_Format_Metadata -> Standard.Base.Any.Any
7+
- get_dropdown_options -> Standard.Base.Any.Any
8+
- get_name_patterns -> (Standard.Base.Data.Vector.Vector Standard.Base.System.File_Format.File_Name_Pattern)
9+
- read self file:Standard.Base.Any.Any on_problems:Standard.Base.Errors.Problem_Behavior.Problem_Behavior -> Standard.Base.Any.Any
10+
- read_stream self stream:Standard.Base.System.Input_Stream.Input_Stream metadata:Standard.Base.System.File_Format_Metadata.File_Format_Metadata= -> Standard.Base.Any.Any
11+
- resolve constructor:Standard.Base.Any.Any -> Standard.Base.Any.Any
12+
- write_table self file:Standard.Base.Any.Any table:Standard.Base.Any.Any on_existing_file:Standard.Base.Any.Any match_columns:Standard.Base.Any.Any on_problems:Standard.Base.Errors.Problem_Behavior.Problem_Behavior -> Standard.Base.Any.Any

distribution/lib/Standard/DuckDB/0.0.0-dev/package.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,6 @@ maintainers:
1212
services:
1313
- provides: Standard.Database.Connection.Database.Database_Connection_Details_SPI
1414
with: Standard.DuckDB.Internal.DuckDB_Services.Impl
15+
16+
- provides: Standard.Base.System.File_Format.File_Format_SPI
17+
with: Standard.DuckDB.Internal.DuckDB_Services.Impl

distribution/lib/Standard/DuckDB/0.0.0-dev/src/DuckDB.enso

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ type DuckDB
3939
## Arguments
4040
- `options`: Overrides for the connection properties.
4141
connect : Connection_Options -> DuckDB_Connection
42-
connect self options =
42+
connect self options=Connection_Options.Value =
4343
properties = options.merge self.jdbc_properties
4444

4545
make_new schema =

0 commit comments

Comments
 (0)