This is an automated email from the ASF dual-hosted git repository.
lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git
The following commit(s) were added to refs/heads/main by this push:
new 223664fee feat(c/driver/postgresql): add `POSTGRESQL:type` metadata
(#4687)
223664fee is described below
commit 223664fee10b702591378f6b3316452e8ed22a3b
Author: David Li <[email protected]>
AuthorDate: Fri Aug 21 09:56:24 2026 +0900
feat(c/driver/postgresql): add `POSTGRESQL:type` metadata (#4687)
Closes #4461.
Assisted-by: GPT-5.6 Sol <[email protected]>
---
c/driver/postgresql/postgres_type.h | 18 ++++++++++++++++++
c/driver/postgresql/postgres_type_test.cc | 15 +++++++++++++++
c/driver/postgresql/result_reader.cc | 3 +--
.../queries-cockroachdb/type/bind/int32.txtcase | 15 ++++-----------
.../queries-cockroachdb/type/literal/int32.txtcase | 13 ++-----------
.../queries-cockroachdb/type/select/int32.txtcase | 22 +++++++++++-----------
.../type/select/json.txtcase} | 4 ++--
.../type/bind/large_string.txtcase} | 4 ++--
.../type/bind/string.txtcase} | 4 ++--
.../type/bind/string_view.txtcase} | 4 ++--
.../queries-cratedb/type/bind/timestamp_ms.txtcase | 1 +
.../queries-cratedb/type/bind/timestamp_ns.txtcase | 1 +
.../queries-cratedb/type/bind/timestamp_s.txtcase | 1 +
.../queries-cratedb/type/bind/timestamp_us.txtcase | 1 +
.../type/literal/string.txtcase} | 4 ++--
.../type/select/string.txtcase} | 4 ++--
.../ingest/{time_s.txtcase => binary.txtcase} | 4 ++--
.../ingest/{time_s.txtcase => binary_view.txtcase} | 4 ++--
.../ingest/{time_s.txtcase => boolean.txtcase} | 4 ++--
.../ingest/{time_s.txtcase => date.txtcase} | 4 ++--
.../validation/queries/ingest/decimal.txtcase | 5 +++++
.../ingest/decimal_scale_equals_precision.txtcase | 5 +++++
.../queries/ingest/decimal_scale_negative.txtcase | 5 +++++
.../queries/ingest/decimal_scale_zero.txtcase | 5 +++++
.../{time_s.txtcase => fixed_size_binary.txtcase} | 4 ++--
.../ingest/{time_s.txtcase => float32.txtcase} | 4 ++--
.../ingest/{time_s.txtcase => float64.txtcase} | 4 ++--
.../ingest/{time_s.txtcase => int16.txtcase} | 4 ++--
.../ingest/{time_s.txtcase => int32.txtcase} | 4 ++--
.../ingest/{time_s.txtcase => int64.txtcase} | 4 ++--
.../{time_s.txtcase => large_binary.txtcase} | 4 ++--
.../{time_s.txtcase => large_string.txtcase} | 4 ++--
.../ingest/{time_s.txtcase => string.txtcase} | 4 ++--
.../ingest/{time_s.txtcase => string_view.txtcase} | 4 ++--
.../validation/queries/ingest/time_ms.txtcase | 3 +++
.../validation/queries/ingest/time_ns.txtcase | 3 +++
.../validation/queries/ingest/time_s.txtcase | 3 +++
.../ingest/{time_s.txtcase => time_us.txtcase} | 4 ++--
.../validation/queries/ingest/timestamp_ms.txtcase | 5 +++++
.../validation/queries/ingest/timestamp_ns.txtcase | 5 +++++
.../validation/queries/ingest/timestamp_s.txtcase | 5 +++++
.../{time_s.txtcase => timestamp_us.txtcase} | 4 ++--
.../queries/ingest/timestamptz_ms.txtcase | 5 +++++
.../queries/ingest/timestamptz_ns.txtcase | 5 +++++
.../queries/ingest/timestamptz_s.txtcase | 5 +++++
.../{time_s.txtcase => timestamptz_us.txtcase} | 4 ++--
.../validation/queries/ingest/uuid.txtcase | 1 +
.../validation/queries/type/bind/binary.bind.sql | 1 -
.../validation/queries/type/bind/binary.setup.sql | 3 ---
.../type/bind/binary.txtcase} | 11 +++++++----
.../queries/type/bind/binary_view.setup.sql | 3 ---
.../type/bind/binary_view.txtcase} | 7 +++----
.../time_s.txtcase => type/bind/boolean.txtcase} | 4 ++--
.../time_s.txtcase => type/bind/date.txtcase} | 4 ++--
.../validation/queries/type/bind/decimal.txtcase | 5 +++++
.../queries/type/bind/fixed_size_binary.setup.sql | 3 ---
.../type/bind/fixed_size_binary.txtcase} | 7 +++----
.../time_s.txtcase => type/bind/float16.txtcase} | 5 +++--
.../time_s.txtcase => type/bind/float32.txtcase} | 5 +++--
.../time_s.txtcase => type/bind/float64.txtcase} | 5 +++--
.../time_s.txtcase => type/bind/int16.txtcase} | 5 +++--
.../time_s.txtcase => type/bind/int32.txtcase} | 5 +++--
.../time_s.txtcase => type/bind/int64.txtcase} | 5 +++--
.../queries/type/bind/large_binary.setup.sql | 3 ---
.../type/bind/large_binary.txtcase} | 7 +++----
.../queries/type/bind/large_string.setup.sql | 3 ---
.../type/bind/large_string.txtcase} | 7 +++----
.../validation/queries/type/bind/string.setup.sql | 3 ---
.../type/bind/string.txtcase} | 7 +++----
.../queries/type/bind/string_view.setup.sql | 3 ---
.../type/bind/string_view.txtcase} | 7 +++----
.../time_s.txtcase => type/bind/time_us.txtcase} | 4 ++--
.../queries/type/bind/timestamp_ms.txtcase | 4 ++++
.../queries/type/bind/timestamp_ns.txtcase | 4 ++++
.../queries/type/bind/timestamp_s.txtcase | 4 ++++
.../bind/timestamp_us.txtcase} | 4 ++--
.../queries/type/bind/timestamptz_ms.txtcase | 4 ++++
.../queries/type/bind/timestamptz_ns.txtcase | 4 ++++
.../queries/type/bind/timestamptz_s.txtcase | 4 ++++
.../bind/timestamptz_us.txtcase} | 4 ++--
.../validation/queries/type/bind/uuid.txtcase | 2 +-
.../validation/queries/type/literal/binary.sql | 1 -
.../type/literal/binary.txtcase} | 9 +++------
.../literal/boolean.txtcase} | 4 ++--
.../time_s.txtcase => type/literal/date.txtcase} | 4 ++--
.../queries/type/literal/decimal.schema.json | 14 --------------
.../queries/type/{bind => literal}/decimal.txtcase | 6 ++++++
.../literal/float32.txtcase} | 5 +++--
.../literal/float64.txtcase} | 5 +++--
.../time_s.txtcase => type/literal/int16.txtcase} | 5 +++--
.../time_s.txtcase => type/literal/int32.txtcase} | 5 +++--
.../time_s.txtcase => type/literal/int64.txtcase} | 5 +++--
.../time_s.txtcase => type/literal/string.txtcase} | 4 ++--
.../time_s.txtcase => type/literal/time.txtcase} | 4 ++--
.../literal/timestamp.txtcase} | 4 ++--
.../literal/timestamptz.txtcase} | 4 ++--
.../validation/queries/type/literal/uuid.txtcase | 2 +-
.../queries/type/select/binary.setup.sql | 10 ----------
.../type/select/binary.txtcase} | 20 +++++++++-----------
.../time_s.txtcase => type/select/boolean.txtcase} | 4 ++--
.../time_s.txtcase => type/select/date.txtcase} | 4 ++--
.../queries/type/select/decimal.schema.json | 14 --------------
.../queries/type/{bind => select}/decimal.txtcase | 6 ++++++
.../time_s.txtcase => type/select/float32.txtcase} | 5 +++--
.../time_s.txtcase => type/select/float64.txtcase} | 5 +++--
.../time_s.txtcase => type/select/int16.txtcase} | 5 +++--
.../time_s.txtcase => type/select/int32.txtcase} | 5 +++--
.../time_s.txtcase => type/select/int64.txtcase} | 5 +++--
.../validation/queries/type/select/json.txtcase | 2 +-
.../validation/queries/type/select/jsonb.txtcase | 2 +-
.../queries/type/select/string.setup.sql | 10 ----------
.../type/select/string.txtcase} | 20 +++++++++-----------
.../time_s.txtcase => type/select/time.txtcase} | 4 ++--
.../select/timestamp.txtcase} | 4 ++--
.../select/timestamptz.txtcase} | 4 ++--
.../validation/queries/type/select/uuid.txtcase | 2 +-
c/driver/postgresql/validation/tests/postgresql.py | 1 +
.../python/recipe/postgresql_execute_nocopy.py | 12 ++++++++++++
.../recipe/postgresql_execute_nocopy.py.stdout.txt | 12 ++++++++++++
119 files changed, 358 insertions(+), 277 deletions(-)
diff --git a/c/driver/postgresql/postgres_type.h
b/c/driver/postgresql/postgres_type.h
index ed27f5ba1..178980508 100644
--- a/c/driver/postgresql/postgres_type.h
+++ b/c/driver/postgresql/postgres_type.h
@@ -354,6 +354,11 @@ class PostgresType {
break;
}
+ // Don't add POSTGRESQL:type to top-level field (which is the schema)
+ if (type_id_ != PostgresTypeId::kRecord || !field_name_.empty()) {
+ NANOARROW_RETURN_NOT_OK(AddTypeMetadata(schema));
+ }
+
NANOARROW_RETURN_NOT_OK(ArrowSchemaSetName(schema, field_name_.c_str()));
return NANOARROW_OK;
}
@@ -370,12 +375,25 @@ class PostgresType {
std::vector<PostgresType> children_;
static constexpr const char* kPostgresTypeKey = "ADBC:postgresql:typname";
+ static constexpr const char* kTypeKey = "POSTGRESQL:type";
static constexpr const char* kExtensionName = "ARROW:extension:name";
static constexpr const char* kOpaqueExtensionName = "arrow.opaque";
static constexpr const char* kJsonExtensionName = "arrow.json";
static constexpr const char* kUuidExtensionName = "arrow.uuid";
static constexpr const char* kExtensionMetadata = "ARROW:extension:metadata";
+ ArrowErrorCode AddTypeMetadata(ArrowSchema* schema) const {
+ const char* typname =
+ !typname_.empty() ? typname_.c_str() : PostgresTypname(type_id_);
+ nanoarrow::UniqueBuffer buffer;
+ NANOARROW_RETURN_NOT_OK(ArrowMetadataBuilderInit(buffer.get(),
schema->metadata));
+ NANOARROW_RETURN_NOT_OK(ArrowMetadataBuilderAppend(
+ buffer.get(), ArrowCharView(kTypeKey), ArrowCharView(typname)));
+ NANOARROW_RETURN_NOT_OK(
+ ArrowSchemaSetMetadata(schema, reinterpret_cast<char*>(buffer->data)));
+ return NANOARROW_OK;
+ }
+
ArrowErrorCode AddPostgresTypeMetadata(ArrowSchema* schema,
const std::string& vendor_name) const
{
// the typname_ may not always be set: an instance of this class can be
diff --git a/c/driver/postgresql/postgres_type_test.cc
b/c/driver/postgresql/postgres_type_test.cc
index 9ef74b969..ac80f11df 100644
--- a/c/driver/postgresql/postgres_type_test.cc
+++ b/c/driver/postgresql/postgres_type_test.cc
@@ -221,6 +221,11 @@ TEST(PostgresTypeTest, PostgresTypeSetSchema) {
&typnameMetadataValue);
EXPECT_EQ(std::string(typnameMetadataValue.data,
typnameMetadataValue.size_bytes),
"numeric");
+ typnameMetadataValue = ArrowCharView("<not found>");
+ ArrowMetadataGetValue(schema->metadata, ArrowCharView("POSTGRESQL:type"),
+ &typnameMetadataValue);
+ EXPECT_EQ(std::string(typnameMetadataValue.data,
typnameMetadataValue.size_bytes),
+ "numeric");
ArrowMetadataGetValue(schema->metadata,
ArrowCharView("ARROW:extension:name"),
&typnameMetadataValue);
EXPECT_EQ(std::string(typnameMetadataValue.data,
typnameMetadataValue.size_bytes),
@@ -241,6 +246,11 @@ TEST(PostgresTypeTest, PostgresTypeSetSchema) {
ArrowCharView("ADBC:postgresql:typname"),
&typnameMetadataValue);
EXPECT_EQ(std::string(typnameMetadataValue.data,
typnameMetadataValue.size_bytes),
"numeric");
+ typnameMetadataValue = ArrowCharView("<not found>");
+ ArrowMetadataGetValue(schema->children[0]->metadata,
ArrowCharView("POSTGRESQL:type"),
+ &typnameMetadataValue);
+ EXPECT_EQ(std::string(typnameMetadataValue.data,
typnameMetadataValue.size_bytes),
+ "numeric");
schema.reset();
ArrowSchemaInit(schema.get());
@@ -267,6 +277,11 @@ TEST(PostgresTypeTest, PostgresTypeSetSchema) {
&typnameMetadataValue);
EXPECT_EQ(std::string(typnameMetadataValue.data,
typnameMetadataValue.size_bytes),
"some_name");
+ typnameMetadataValue = ArrowCharView("<not found>");
+ ArrowMetadataGetValue(schema->metadata, ArrowCharView("POSTGRESQL:type"),
+ &typnameMetadataValue);
+ EXPECT_EQ(std::string(typnameMetadataValue.data,
typnameMetadataValue.size_bytes),
+ "some_name");
schema.reset();
}
diff --git a/c/driver/postgresql/result_reader.cc
b/c/driver/postgresql/result_reader.cc
index 6552270c7..b44dba3d8 100644
--- a/c/driver/postgresql/result_reader.cc
+++ b/c/driver/postgresql/result_reader.cc
@@ -203,9 +203,8 @@ Status PqResultArrayReader::Initialize(int64_t*
rows_affected) {
UNWRAP_ERRNO(Internal,
type_resolver_->FindWithDefault(helper_.FieldType(i),
&child_type));
+ child_type = child_type.WithFieldName(helper_.FieldName(i));
UNWRAP_ERRNO(Internal, child_type.SetSchema(schema_->children[i],
vendor_name_));
- UNWRAP_ERRNO(Internal,
- ArrowSchemaSetName(schema_->children[i],
helper_.FieldName(i)));
std::unique_ptr<PostgresCopyFieldReader> child_reader;
UNWRAP_NANOARROW(
diff --git
a/c/driver/postgresql/validation/queries-cockroachdb/type/bind/int32.txtcase
b/c/driver/postgresql/validation/queries-cockroachdb/type/bind/int32.txtcase
index 6087a8309..9c47a2360 100644
--- a/c/driver/postgresql/validation/queries-cockroachdb/type/bind/int32.txtcase
+++ b/c/driver/postgresql/validation/queries-cockroachdb/type/bind/int32.txtcase
@@ -15,15 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
+// part: setup_query
-{
- "format": "+s",
- "children": [
- {
- "name": "res",
- "format": "l",
- "flags": ["nullable"]
- }
- ]
-}
+CREATE TABLE test_int32 (
+ res INT4
+);
diff --git
a/c/driver/postgresql/validation/queries-cockroachdb/type/literal/int32.txtcase
b/c/driver/postgresql/validation/queries-cockroachdb/type/literal/int32.txtcase
index 6087a8309..324276f9d 100644
---
a/c/driver/postgresql/validation/queries-cockroachdb/type/literal/int32.txtcase
+++
b/c/driver/postgresql/validation/queries-cockroachdb/type/literal/int32.txtcase
@@ -15,15 +15,6 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
+// part: query
-{
- "format": "+s",
- "children": [
- {
- "name": "res",
- "format": "l",
- "flags": ["nullable"]
- }
- ]
-}
+SELECT CAST(131072 AS INT4) AS res
diff --git
a/c/driver/postgresql/validation/queries-cockroachdb/type/select/int32.txtcase
b/c/driver/postgresql/validation/queries-cockroachdb/type/select/int32.txtcase
index 6087a8309..71b43b3de 100644
---
a/c/driver/postgresql/validation/queries-cockroachdb/type/select/int32.txtcase
+++
b/c/driver/postgresql/validation/queries-cockroachdb/type/select/int32.txtcase
@@ -15,15 +15,15 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
+// part: setup_query
-{
- "format": "+s",
- "children": [
- {
- "name": "res",
- "format": "l",
- "flags": ["nullable"]
- }
- ]
-}
+CREATE TABLE test_int32 (
+ idx INTEGER,
+ res INT4
+);
+
+INSERT INTO test_int32 (idx, res) VALUES (1, 131072);
+INSERT INTO test_int32 (idx, res) VALUES (2, 2147483647);
+INSERT INTO test_int32 (idx, res) VALUES (3, -2147483648);
+INSERT INTO test_int32 (idx, res) VALUES (4, 0);
+INSERT INTO test_int32 (idx, res) VALUES (5, NULL);
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries-cockroachdb/type/select/json.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to
c/driver/postgresql/validation/queries-cockroachdb/type/select/json.txtcase
index 30dfb7d9b..c5328e7af 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++
b/c/driver/postgresql/validation/queries-cockroachdb/type/select/json.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "jsonb"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/large_string.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to
c/driver/postgresql/validation/queries-cratedb/type/bind/large_string.txtcase
index 30dfb7d9b..c74419479 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++
b/c/driver/postgresql/validation/queries-cratedb/type/bind/large_string.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "varchar"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/string.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries-cratedb/type/bind/string.txtcase
index 30dfb7d9b..c74419479 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/bind/string.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "varchar"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/string_view.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to
c/driver/postgresql/validation/queries-cratedb/type/bind/string_view.txtcase
index 30dfb7d9b..c74419479 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++
b/c/driver/postgresql/validation/queries-cratedb/type/bind/string_view.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "varchar"
diff --git
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ms.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ms.txtcase
index d2943d938..248dbc5c3 100644
---
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ms.txtcase
+++
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ms.txtcase
@@ -19,6 +19,7 @@
[tags]
sql-type-name = "TIMESTAMP"
+field-type-name = "timestamp"
// part: setup_query
diff --git
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase
index 355d169e7..25663c724 100644
---
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase
+++
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase
@@ -19,6 +19,7 @@
[tags]
sql-type-name = "TIMESTAMP"
+field-type-name = "timestamp"
// part: setup_query
diff --git
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
index d2943d938..248dbc5c3 100644
---
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
+++
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
@@ -19,6 +19,7 @@
[tags]
sql-type-name = "TIMESTAMP"
+field-type-name = "timestamp"
// part: setup_query
diff --git
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_us.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_us.txtcase
index c08fab0eb..2a859ef17 100644
---
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_us.txtcase
+++
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_us.txtcase
@@ -19,6 +19,7 @@
[tags]
sql-type-name = "TIMESTAMP"
+field-type-name = "timestamp"
// part: setup_query
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/literal/string.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to
c/driver/postgresql/validation/queries-cratedb/type/literal/string.txtcase
index 30dfb7d9b..c74419479 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/literal/string.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "varchar"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/select/string.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to
c/driver/postgresql/validation/queries-cratedb/type/select/string.txtcase
index 30dfb7d9b..c74419479 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/select/string.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "varchar"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/ingest/binary.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/binary.txtcase
index 30dfb7d9b..e58c36160 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/binary.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "bytea"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/ingest/binary_view.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/binary_view.txtcase
index 30dfb7d9b..e58c36160 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/binary_view.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "bytea"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/ingest/boolean.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/boolean.txtcase
index 30dfb7d9b..c849ef620 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/boolean.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "bool"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/ingest/date.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/date.txtcase
index 30dfb7d9b..0e2a6071f 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/date.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "date"
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
index 7b21a0b79..4312be00c 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
@@ -15,6 +15,11 @@
// specific language governing permissions and limitations
// under the License.
+// part: metadata
+
+[tags]
+field-type-name = "numeric"
+
// part: expected_schema
{
"format": "+s",
diff --git
a/c/driver/postgresql/validation/queries/ingest/decimal_scale_equals_precision.txtcase
b/c/driver/postgresql/validation/queries/ingest/decimal_scale_equals_precision.txtcase
index cf39915ed..12f8632af 100644
---
a/c/driver/postgresql/validation/queries/ingest/decimal_scale_equals_precision.txtcase
+++
b/c/driver/postgresql/validation/queries/ingest/decimal_scale_equals_precision.txtcase
@@ -15,6 +15,11 @@
// specific language governing permissions and limitations
// under the License.
+// part: metadata
+
+[tags]
+field-type-name = "numeric"
+
// part: expected_schema
{
diff --git
a/c/driver/postgresql/validation/queries/ingest/decimal_scale_negative.txtcase
b/c/driver/postgresql/validation/queries/ingest/decimal_scale_negative.txtcase
index a965a58e5..f783bb557 100644
---
a/c/driver/postgresql/validation/queries/ingest/decimal_scale_negative.txtcase
+++
b/c/driver/postgresql/validation/queries/ingest/decimal_scale_negative.txtcase
@@ -15,6 +15,11 @@
// specific language governing permissions and limitations
// under the License.
+// part: metadata
+
+[tags]
+field-type-name = "numeric"
+
// part: expected_schema
{
diff --git
a/c/driver/postgresql/validation/queries/ingest/decimal_scale_zero.txtcase
b/c/driver/postgresql/validation/queries/ingest/decimal_scale_zero.txtcase
index 31621a79c..651ffa85c 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal_scale_zero.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/decimal_scale_zero.txtcase
@@ -15,6 +15,11 @@
// specific language governing permissions and limitations
// under the License.
+// part: metadata
+
+[tags]
+field-type-name = "numeric"
+
// part: expected_schema
{
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/ingest/fixed_size_binary.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/fixed_size_binary.txtcase
index 30dfb7d9b..e58c36160 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/fixed_size_binary.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "bytea"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/ingest/float32.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/float32.txtcase
index 30dfb7d9b..8ccc6a974 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/float32.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "float4"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/ingest/float64.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/float64.txtcase
index 30dfb7d9b..b77655eeb 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/float64.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "float8"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/ingest/int16.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/int16.txtcase
index 30dfb7d9b..bdba91e6d 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/int16.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "int2"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/ingest/int32.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/int32.txtcase
index 30dfb7d9b..a15424c49 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/int32.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "int4"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/ingest/int64.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/int64.txtcase
index 30dfb7d9b..10fd0c302 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/int64.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "int8"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/ingest/large_binary.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/large_binary.txtcase
index 30dfb7d9b..e58c36160 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/large_binary.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "bytea"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/ingest/large_string.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/large_string.txtcase
index 30dfb7d9b..03a7323b3 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/large_string.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "text"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/ingest/string.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/string.txtcase
index 30dfb7d9b..03a7323b3 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/string.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "text"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/ingest/string_view.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/string_view.txtcase
index 30dfb7d9b..03a7323b3 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/string_view.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "text"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_ms.txtcase
b/c/driver/postgresql/validation/queries/ingest/time_ms.txtcase
index 30dfb7d9b..5ee360e82 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_ms.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/time_ms.txtcase
@@ -19,3 +19,6 @@
// part: metadata
skip = "COPY Writer not implemented"
+
+[tags]
+field-type-name = "time"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_ns.txtcase
b/c/driver/postgresql/validation/queries/ingest/time_ns.txtcase
index 30dfb7d9b..5ee360e82 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_ns.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/time_ns.txtcase
@@ -19,3 +19,6 @@
// part: metadata
skip = "COPY Writer not implemented"
+
+[tags]
+field-type-name = "time"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
index 30dfb7d9b..5ee360e82 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
@@ -19,3 +19,6 @@
// part: metadata
skip = "COPY Writer not implemented"
+
+[tags]
+field-type-name = "time"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/ingest/time_us.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/time_us.txtcase
index 30dfb7d9b..eb2400eaf 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/time_us.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "time"
diff --git a/c/driver/postgresql/validation/queries/ingest/timestamp_ms.txtcase
b/c/driver/postgresql/validation/queries/ingest/timestamp_ms.txtcase
index 5ce7f358b..c835b728e 100644
--- a/c/driver/postgresql/validation/queries/ingest/timestamp_ms.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/timestamp_ms.txtcase
@@ -15,6 +15,11 @@
// specific language governing permissions and limitations
// under the License.
+// part: metadata
+
+[tags]
+field-type-name = "timestamp"
+
// part: expected_schema
diff --git a/c/driver/postgresql/validation/queries/ingest/timestamp_ns.txtcase
b/c/driver/postgresql/validation/queries/ingest/timestamp_ns.txtcase
index ae5d1af24..163298f2a 100644
--- a/c/driver/postgresql/validation/queries/ingest/timestamp_ns.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/timestamp_ns.txtcase
@@ -15,6 +15,11 @@
// specific language governing permissions and limitations
// under the License.
+// part: metadata
+
+[tags]
+field-type-name = "timestamp"
+
// part: expected_schema
diff --git a/c/driver/postgresql/validation/queries/ingest/timestamp_s.txtcase
b/c/driver/postgresql/validation/queries/ingest/timestamp_s.txtcase
index 0982b82c3..36f737514 100644
--- a/c/driver/postgresql/validation/queries/ingest/timestamp_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/timestamp_s.txtcase
@@ -15,6 +15,11 @@
// specific language governing permissions and limitations
// under the License.
+// part: metadata
+
+[tags]
+field-type-name = "timestamp"
+
// part: expected_schema
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/ingest/timestamp_us.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/timestamp_us.txtcase
index 30dfb7d9b..fe02100c2 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/timestamp_us.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "timestamp"
diff --git
a/c/driver/postgresql/validation/queries/ingest/timestamptz_ms.txtcase
b/c/driver/postgresql/validation/queries/ingest/timestamptz_ms.txtcase
index 81ce61315..2c1c5dc47 100644
--- a/c/driver/postgresql/validation/queries/ingest/timestamptz_ms.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/timestamptz_ms.txtcase
@@ -15,6 +15,11 @@
// specific language governing permissions and limitations
// under the License.
+// part: metadata
+
+[tags]
+field-type-name = "timestamptz"
+
// part: expected_schema
diff --git
a/c/driver/postgresql/validation/queries/ingest/timestamptz_ns.txtcase
b/c/driver/postgresql/validation/queries/ingest/timestamptz_ns.txtcase
index 12e8ed264..3736a5aa3 100644
--- a/c/driver/postgresql/validation/queries/ingest/timestamptz_ns.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/timestamptz_ns.txtcase
@@ -15,6 +15,11 @@
// specific language governing permissions and limitations
// under the License.
+// part: metadata
+
+[tags]
+field-type-name = "timestamptz"
+
// part: expected_schema
diff --git
a/c/driver/postgresql/validation/queries/ingest/timestamptz_s.txtcase
b/c/driver/postgresql/validation/queries/ingest/timestamptz_s.txtcase
index 9d2580d92..cbc469bb1 100644
--- a/c/driver/postgresql/validation/queries/ingest/timestamptz_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/timestamptz_s.txtcase
@@ -15,6 +15,11 @@
// specific language governing permissions and limitations
// under the License.
+// part: metadata
+
+[tags]
+field-type-name = "timestamptz"
+
// part: expected_schema
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/ingest/timestamptz_us.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/timestamptz_us.txtcase
index 30dfb7d9b..ed7e1a725 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/timestamptz_us.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "timestamptz"
diff --git a/c/driver/postgresql/validation/queries/ingest/uuid.txtcase
b/c/driver/postgresql/validation/queries/ingest/uuid.txtcase
index 5dc1f4bff..32b2fe237 100644
--- a/c/driver/postgresql/validation/queries/ingest/uuid.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/uuid.txtcase
@@ -19,6 +19,7 @@
[tags]
sql-type-name = "UUID"
+field-type-name = "uuid"
// part: input_schema
diff --git a/c/driver/postgresql/validation/queries/type/bind/binary.bind.sql
b/c/driver/postgresql/validation/queries/type/bind/binary.bind.sql
deleted file mode 100644
index 24151ef0e..000000000
--- a/c/driver/postgresql/validation/queries/type/bind/binary.bind.sql
+++ /dev/null
@@ -1 +0,0 @@
-INSERT INTO test_binary (res) VALUES ($1)
diff --git a/c/driver/postgresql/validation/queries/type/bind/binary.setup.sql
b/c/driver/postgresql/validation/queries/type/bind/binary.setup.sql
deleted file mode 100644
index 228cde867..000000000
--- a/c/driver/postgresql/validation/queries/type/bind/binary.setup.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-CREATE TABLE test_binary (
- res BYTEA
-);
diff --git
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
b/c/driver/postgresql/validation/queries/type/bind/binary.txtcase
similarity index 86%
copy from
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/binary.txtcase
index d2943d938..d468b2ce9 100644
---
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/binary.txtcase
@@ -18,11 +18,14 @@
// part: metadata
[tags]
-sql-type-name = "TIMESTAMP"
+sql-type-name = "bytea"
// part: setup_query
-CREATE TABLE test_timestamp (
- idx INT,
- res TIMESTAMP
+CREATE TABLE test_binary (
+ res BYTEA
);
+
+// part: bind_query
+
+INSERT INTO test_binary (res) VALUES ($1)
diff --git
a/c/driver/postgresql/validation/queries/type/bind/binary_view.setup.sql
b/c/driver/postgresql/validation/queries/type/bind/binary_view.setup.sql
deleted file mode 100644
index 0f9cb3f0e..000000000
--- a/c/driver/postgresql/validation/queries/type/bind/binary_view.setup.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-CREATE TABLE test_binary_view (
- res BYTEA
-);
diff --git
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
b/c/driver/postgresql/validation/queries/type/bind/binary_view.txtcase
similarity index 90%
copy from
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/binary_view.txtcase
index d2943d938..ee73b32d1 100644
---
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/binary_view.txtcase
@@ -18,11 +18,10 @@
// part: metadata
[tags]
-sql-type-name = "TIMESTAMP"
+sql-type-name = "bytea"
// part: setup_query
-CREATE TABLE test_timestamp (
- idx INT,
- res TIMESTAMP
+CREATE TABLE test_binary_view (
+ res BYTEA
);
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/bind/boolean.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/boolean.txtcase
index 30dfb7d9b..18cfc74f2 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/boolean.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "bool"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/bind/date.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/date.txtcase
index 30dfb7d9b..3c1f0a5bf 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/date.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "date"
diff --git a/c/driver/postgresql/validation/queries/type/bind/decimal.txtcase
b/c/driver/postgresql/validation/queries/type/bind/decimal.txtcase
index aac33f269..3724e2737 100644
--- a/c/driver/postgresql/validation/queries/type/bind/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/decimal.txtcase
@@ -15,6 +15,11 @@
// specific language governing permissions and limitations
// under the License.
+// part: metadata
+
+[tags]
+sql-type-name = "numeric"
+
// part: expected_schema
{
"format": "+s",
diff --git
a/c/driver/postgresql/validation/queries/type/bind/fixed_size_binary.setup.sql
b/c/driver/postgresql/validation/queries/type/bind/fixed_size_binary.setup.sql
deleted file mode 100644
index 468c8cc65..000000000
---
a/c/driver/postgresql/validation/queries/type/bind/fixed_size_binary.setup.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-CREATE TABLE test_fixed_size_binary (
- res BYTEA
-);
diff --git
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
b/c/driver/postgresql/validation/queries/type/bind/fixed_size_binary.txtcase
similarity index 90%
copy from
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
copy to
c/driver/postgresql/validation/queries/type/bind/fixed_size_binary.txtcase
index d2943d938..8135e53d3 100644
---
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/fixed_size_binary.txtcase
@@ -18,11 +18,10 @@
// part: metadata
[tags]
-sql-type-name = "TIMESTAMP"
+sql-type-name = "bytea"
// part: setup_query
-CREATE TABLE test_timestamp (
- idx INT,
- res TIMESTAMP
+CREATE TABLE test_fixed_size_binary (
+ res BYTEA
);
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/bind/float16.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/float16.txtcase
index 30dfb7d9b..2fffddb1d 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/float16.txtcase
@@ -15,7 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "real"
+field-type-name = "float4"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/bind/float32.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/float32.txtcase
index 30dfb7d9b..2fffddb1d 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/float32.txtcase
@@ -15,7 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "real"
+field-type-name = "float4"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/bind/float64.txtcase
similarity index 92%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/float64.txtcase
index 30dfb7d9b..5470d6a26 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/float64.txtcase
@@ -15,7 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "double precision"
+field-type-name = "float8"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/bind/int16.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/int16.txtcase
index 30dfb7d9b..c2e649874 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/int16.txtcase
@@ -15,7 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "smallint"
+field-type-name = "int2"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/bind/int32.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/int32.txtcase
index 30dfb7d9b..2200c181f 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/int32.txtcase
@@ -15,7 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "integer"
+field-type-name = "int4"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/bind/int64.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/int64.txtcase
index 30dfb7d9b..b04c4e9b1 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/int64.txtcase
@@ -15,7 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "bigint"
+field-type-name = "int8"
diff --git
a/c/driver/postgresql/validation/queries/type/bind/large_binary.setup.sql
b/c/driver/postgresql/validation/queries/type/bind/large_binary.setup.sql
deleted file mode 100644
index bbc3b3385..000000000
--- a/c/driver/postgresql/validation/queries/type/bind/large_binary.setup.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-CREATE TABLE test_large_binary (
- res BYTEA
-);
diff --git
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
b/c/driver/postgresql/validation/queries/type/bind/large_binary.txtcase
similarity index 90%
copy from
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/large_binary.txtcase
index d2943d938..c28131321 100644
---
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/large_binary.txtcase
@@ -18,11 +18,10 @@
// part: metadata
[tags]
-sql-type-name = "TIMESTAMP"
+sql-type-name = "bytea"
// part: setup_query
-CREATE TABLE test_timestamp (
- idx INT,
- res TIMESTAMP
+CREATE TABLE test_large_binary (
+ res BYTEA
);
diff --git
a/c/driver/postgresql/validation/queries/type/bind/large_string.setup.sql
b/c/driver/postgresql/validation/queries/type/bind/large_string.setup.sql
deleted file mode 100644
index d3aaa565e..000000000
--- a/c/driver/postgresql/validation/queries/type/bind/large_string.setup.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-CREATE TABLE test_large_string (
- res TEXT
-);
diff --git
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
b/c/driver/postgresql/validation/queries/type/bind/large_string.txtcase
similarity index 90%
copy from
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/large_string.txtcase
index d2943d938..1d33d24e1 100644
---
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/large_string.txtcase
@@ -18,11 +18,10 @@
// part: metadata
[tags]
-sql-type-name = "TIMESTAMP"
+sql-type-name = "text"
// part: setup_query
-CREATE TABLE test_timestamp (
- idx INT,
- res TIMESTAMP
+CREATE TABLE test_large_string (
+ res TEXT
);
diff --git a/c/driver/postgresql/validation/queries/type/bind/string.setup.sql
b/c/driver/postgresql/validation/queries/type/bind/string.setup.sql
deleted file mode 100644
index d77bdb858..000000000
--- a/c/driver/postgresql/validation/queries/type/bind/string.setup.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-CREATE TABLE test_string (
- res TEXT
-);
diff --git
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
b/c/driver/postgresql/validation/queries/type/bind/string.txtcase
similarity index 90%
copy from
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/string.txtcase
index d2943d938..dc6d769b3 100644
---
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/string.txtcase
@@ -18,11 +18,10 @@
// part: metadata
[tags]
-sql-type-name = "TIMESTAMP"
+sql-type-name = "text"
// part: setup_query
-CREATE TABLE test_timestamp (
- idx INT,
- res TIMESTAMP
+CREATE TABLE test_string (
+ res TEXT
);
diff --git
a/c/driver/postgresql/validation/queries/type/bind/string_view.setup.sql
b/c/driver/postgresql/validation/queries/type/bind/string_view.setup.sql
deleted file mode 100644
index 97c767c1a..000000000
--- a/c/driver/postgresql/validation/queries/type/bind/string_view.setup.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-CREATE TABLE test_string_view (
- res TEXT
-);
diff --git
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
b/c/driver/postgresql/validation/queries/type/bind/string_view.txtcase
similarity index 90%
copy from
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/string_view.txtcase
index d2943d938..86afa2085 100644
---
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/string_view.txtcase
@@ -18,11 +18,10 @@
// part: metadata
[tags]
-sql-type-name = "TIMESTAMP"
+sql-type-name = "text"
// part: setup_query
-CREATE TABLE test_timestamp (
- idx INT,
- res TIMESTAMP
+CREATE TABLE test_string_view (
+ res TEXT
);
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/bind/time_us.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/time_us.txtcase
index 30dfb7d9b..c562b8b94 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/time_us.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "time"
diff --git
a/c/driver/postgresql/validation/queries/type/bind/timestamp_ms.txtcase
b/c/driver/postgresql/validation/queries/type/bind/timestamp_ms.txtcase
index 9c8ea8378..355fa92c0 100644
--- a/c/driver/postgresql/validation/queries/type/bind/timestamp_ms.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/timestamp_ms.txtcase
@@ -15,6 +15,10 @@
// specific language governing permissions and limitations
// under the License.
+// part: metadata
+
+[tags]
+sql-type-name = "timestamp"
// part: expected_schema
diff --git
a/c/driver/postgresql/validation/queries/type/bind/timestamp_ns.txtcase
b/c/driver/postgresql/validation/queries/type/bind/timestamp_ns.txtcase
index 61832e3fa..aa1dd9435 100644
--- a/c/driver/postgresql/validation/queries/type/bind/timestamp_ns.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/timestamp_ns.txtcase
@@ -15,6 +15,10 @@
// specific language governing permissions and limitations
// under the License.
+// part: metadata
+
+[tags]
+sql-type-name = "timestamp"
// part: expected_schema
diff --git
a/c/driver/postgresql/validation/queries/type/bind/timestamp_s.txtcase
b/c/driver/postgresql/validation/queries/type/bind/timestamp_s.txtcase
index d3ef94a03..a5ca5f036 100644
--- a/c/driver/postgresql/validation/queries/type/bind/timestamp_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/timestamp_s.txtcase
@@ -15,6 +15,10 @@
// specific language governing permissions and limitations
// under the License.
+// part: metadata
+
+[tags]
+sql-type-name = "timestamp"
// part: expected_schema
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/bind/timestamp_us.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/timestamp_us.txtcase
index 30dfb7d9b..1e61d7e2f 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/timestamp_us.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "timestamp"
diff --git
a/c/driver/postgresql/validation/queries/type/bind/timestamptz_ms.txtcase
b/c/driver/postgresql/validation/queries/type/bind/timestamptz_ms.txtcase
index 53fee0306..69f09e022 100644
--- a/c/driver/postgresql/validation/queries/type/bind/timestamptz_ms.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/timestamptz_ms.txtcase
@@ -15,6 +15,10 @@
// specific language governing permissions and limitations
// under the License.
+// part: metadata
+
+[tags]
+sql-type-name = "timestamptz"
// part: expected_schema
diff --git
a/c/driver/postgresql/validation/queries/type/bind/timestamptz_ns.txtcase
b/c/driver/postgresql/validation/queries/type/bind/timestamptz_ns.txtcase
index 19129c5e1..f58117b59 100644
--- a/c/driver/postgresql/validation/queries/type/bind/timestamptz_ns.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/timestamptz_ns.txtcase
@@ -15,6 +15,10 @@
// specific language governing permissions and limitations
// under the License.
+// part: metadata
+
+[tags]
+sql-type-name = "timestamptz"
// part: expected_schema
diff --git
a/c/driver/postgresql/validation/queries/type/bind/timestamptz_s.txtcase
b/c/driver/postgresql/validation/queries/type/bind/timestamptz_s.txtcase
index f506ac409..a9b9e50a7 100644
--- a/c/driver/postgresql/validation/queries/type/bind/timestamptz_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/timestamptz_s.txtcase
@@ -15,6 +15,10 @@
// specific language governing permissions and limitations
// under the License.
+// part: metadata
+
+[tags]
+sql-type-name = "timestamptz"
// part: expected_schema
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/bind/timestamptz_us.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/timestamptz_us.txtcase
index 30dfb7d9b..14042aa2d 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/timestamptz_us.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "timestamptz"
diff --git a/c/driver/postgresql/validation/queries/type/bind/uuid.txtcase
b/c/driver/postgresql/validation/queries/type/bind/uuid.txtcase
index a6f7259c8..82151dd53 100644
--- a/c/driver/postgresql/validation/queries/type/bind/uuid.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/uuid.txtcase
@@ -21,7 +21,7 @@
drop = "test_uuid"
[tags]
-sql-type-name = "UUID"
+sql-type-name = "uuid"
// part: setup_query
diff --git a/c/driver/postgresql/validation/queries/type/literal/binary.sql
b/c/driver/postgresql/validation/queries/type/literal/binary.sql
deleted file mode 100644
index c00c25a6c..000000000
--- a/c/driver/postgresql/validation/queries/type/literal/binary.sql
+++ /dev/null
@@ -1 +0,0 @@
-SELECT decode('e38193e38293e381abe381a1e381afe38081e4b896e7958cefbc81', 'hex')
AS res
diff --git
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
b/c/driver/postgresql/validation/queries/type/literal/binary.txtcase
similarity index 86%
copy from
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/binary.txtcase
index d2943d938..35b280e90 100644
---
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/binary.txtcase
@@ -18,11 +18,8 @@
// part: metadata
[tags]
-sql-type-name = "TIMESTAMP"
+sql-type-name = "bytea"
-// part: setup_query
+// part: query
-CREATE TABLE test_timestamp (
- idx INT,
- res TIMESTAMP
-);
+SELECT decode('e38193e38293e381abe381a1e381afe38081e4b896e7958cefbc81', 'hex')
AS res
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/literal/boolean.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/boolean.txtcase
index 30dfb7d9b..18cfc74f2 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/boolean.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "bool"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/literal/date.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/date.txtcase
index 30dfb7d9b..3c1f0a5bf 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/date.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "date"
diff --git
a/c/driver/postgresql/validation/queries/type/literal/decimal.schema.json
b/c/driver/postgresql/validation/queries/type/literal/decimal.schema.json
deleted file mode 100644
index 8cc1d06df..000000000
--- a/c/driver/postgresql/validation/queries/type/literal/decimal.schema.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "format": "+s",
- "children": [
- {
- "name": "res",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
diff --git a/c/driver/postgresql/validation/queries/type/bind/decimal.txtcase
b/c/driver/postgresql/validation/queries/type/literal/decimal.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/type/bind/decimal.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/decimal.txtcase
index aac33f269..87871c746 100644
--- a/c/driver/postgresql/validation/queries/type/bind/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/decimal.txtcase
@@ -15,7 +15,13 @@
// specific language governing permissions and limitations
// under the License.
+// part: metadata
+
+[tags]
+sql-type-name = "numeric"
+
// part: expected_schema
+
{
"format": "+s",
"children": [
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/literal/float32.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/float32.txtcase
index 30dfb7d9b..2fffddb1d 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/float32.txtcase
@@ -15,7 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "real"
+field-type-name = "float4"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/literal/float64.txtcase
similarity index 92%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/float64.txtcase
index 30dfb7d9b..5470d6a26 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/float64.txtcase
@@ -15,7 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "double precision"
+field-type-name = "float8"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/literal/int16.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/int16.txtcase
index 30dfb7d9b..c2e649874 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/int16.txtcase
@@ -15,7 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "smallint"
+field-type-name = "int2"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/literal/int32.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/int32.txtcase
index 30dfb7d9b..2200c181f 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/int32.txtcase
@@ -15,7 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "integer"
+field-type-name = "int4"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/literal/int64.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/int64.txtcase
index 30dfb7d9b..b04c4e9b1 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/int64.txtcase
@@ -15,7 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "bigint"
+field-type-name = "int8"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/literal/string.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/string.txtcase
index 30dfb7d9b..4b4408fd8 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/string.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "text"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/literal/time.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/time.txtcase
index 30dfb7d9b..c562b8b94 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/time.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "time"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/literal/timestamp.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/timestamp.txtcase
index 30dfb7d9b..1e61d7e2f 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/timestamp.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "timestamp"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/literal/timestamptz.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/timestamptz.txtcase
index 30dfb7d9b..14042aa2d 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/timestamptz.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "timestamptz"
diff --git a/c/driver/postgresql/validation/queries/type/literal/uuid.txtcase
b/c/driver/postgresql/validation/queries/type/literal/uuid.txtcase
index b2dfe170f..ca71d8114 100644
--- a/c/driver/postgresql/validation/queries/type/literal/uuid.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/uuid.txtcase
@@ -18,7 +18,7 @@
// part: metadata
[tags]
-sql-type-name = "UUID"
+sql-type-name = "uuid"
// part: query
diff --git
a/c/driver/postgresql/validation/queries/type/select/binary.setup.sql
b/c/driver/postgresql/validation/queries/type/select/binary.setup.sql
deleted file mode 100644
index 070b84a85..000000000
--- a/c/driver/postgresql/validation/queries/type/select/binary.setup.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-CREATE TABLE test_binary (
- idx INTEGER,
- res BYTEA
-);
-
-INSERT INTO test_binary (idx, res) VALUES (1,
E'\\xe38193e38293e381abe381a1e381afe38081e4b896e7958cefbc81'); -- 'こんにちは、世界!'
in UTF-8
-INSERT INTO test_binary (idx, res) VALUES (2, E'\\x00');
-INSERT INTO test_binary (idx, res) VALUES (3, E'\\xdeadbeef');
-INSERT INTO test_binary (idx, res) VALUES (4, E'\\x');
-INSERT INTO test_binary (idx, res) VALUES (5, NULL);
diff --git
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase
b/c/driver/postgresql/validation/queries/type/select/binary.txtcase
similarity index 64%
copy from
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase
copy to c/driver/postgresql/validation/queries/type/select/binary.txtcase
index 355d169e7..5df919389 100644
---
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/binary.txtcase
@@ -18,19 +18,17 @@
// part: metadata
[tags]
-sql-type-name = "TIMESTAMP"
+sql-type-name = "bytea"
// part: setup_query
-CREATE TABLE test_timestamp (
- idx INT,
- res TIMESTAMP
+CREATE TABLE test_binary (
+ idx INTEGER,
+ res BYTEA
);
-// part: expected
-
-{"res": null}
-{"res": -9223372036854000}
-{"res": 946684800000000}
-{"res": 1684158330000000}
-{"res": 9223372036854000}
+INSERT INTO test_binary (idx, res) VALUES (1,
E'\\xe38193e38293e381abe381a1e381afe38081e4b896e7958cefbc81'); -- 'こんにちは、世界!'
in UTF-8
+INSERT INTO test_binary (idx, res) VALUES (2, E'\\x00');
+INSERT INTO test_binary (idx, res) VALUES (3, E'\\xdeadbeef');
+INSERT INTO test_binary (idx, res) VALUES (4, E'\\x');
+INSERT INTO test_binary (idx, res) VALUES (5, NULL);
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/select/boolean.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/select/boolean.txtcase
index 30dfb7d9b..18cfc74f2 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/boolean.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "bool"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/select/date.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/select/date.txtcase
index 30dfb7d9b..3c1f0a5bf 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/date.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "date"
diff --git
a/c/driver/postgresql/validation/queries/type/select/decimal.schema.json
b/c/driver/postgresql/validation/queries/type/select/decimal.schema.json
deleted file mode 100644
index 8cc1d06df..000000000
--- a/c/driver/postgresql/validation/queries/type/select/decimal.schema.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "format": "+s",
- "children": [
- {
- "name": "res",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
diff --git a/c/driver/postgresql/validation/queries/type/bind/decimal.txtcase
b/c/driver/postgresql/validation/queries/type/select/decimal.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/type/bind/decimal.txtcase
copy to c/driver/postgresql/validation/queries/type/select/decimal.txtcase
index aac33f269..87871c746 100644
--- a/c/driver/postgresql/validation/queries/type/bind/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/decimal.txtcase
@@ -15,7 +15,13 @@
// specific language governing permissions and limitations
// under the License.
+// part: metadata
+
+[tags]
+sql-type-name = "numeric"
+
// part: expected_schema
+
{
"format": "+s",
"children": [
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/select/float32.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/select/float32.txtcase
index 30dfb7d9b..2fffddb1d 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/float32.txtcase
@@ -15,7 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "real"
+field-type-name = "float4"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/select/float64.txtcase
similarity index 92%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/select/float64.txtcase
index 30dfb7d9b..5470d6a26 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/float64.txtcase
@@ -15,7 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "double precision"
+field-type-name = "float8"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/select/int16.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/select/int16.txtcase
index 30dfb7d9b..c2e649874 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/int16.txtcase
@@ -15,7 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "smallint"
+field-type-name = "int2"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/select/int32.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/select/int32.txtcase
index 30dfb7d9b..2200c181f 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/int32.txtcase
@@ -15,7 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "integer"
+field-type-name = "int4"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/select/int64.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/select/int64.txtcase
index 30dfb7d9b..b04c4e9b1 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/int64.txtcase
@@ -15,7 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "bigint"
+field-type-name = "int8"
diff --git a/c/driver/postgresql/validation/queries/type/select/json.txtcase
b/c/driver/postgresql/validation/queries/type/select/json.txtcase
index 533652129..ca8723580 100644
--- a/c/driver/postgresql/validation/queries/type/select/json.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/json.txtcase
@@ -21,7 +21,7 @@
drop = "test_json"
[tags]
-sql-type-name = "JSON"
+sql-type-name = "json"
// part: setup_query
diff --git a/c/driver/postgresql/validation/queries/type/select/jsonb.txtcase
b/c/driver/postgresql/validation/queries/type/select/jsonb.txtcase
index 167f00e89..26f3ff882 100644
--- a/c/driver/postgresql/validation/queries/type/select/jsonb.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/jsonb.txtcase
@@ -21,7 +21,7 @@
drop = "test_jsonb"
[tags]
-sql-type-name = "JSONB"
+sql-type-name = "jsonb"
// part: setup_query
diff --git
a/c/driver/postgresql/validation/queries/type/select/string.setup.sql
b/c/driver/postgresql/validation/queries/type/select/string.setup.sql
deleted file mode 100644
index 1a401e65c..000000000
--- a/c/driver/postgresql/validation/queries/type/select/string.setup.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-CREATE TABLE test_string (
- idx INTEGER,
- res TEXT
-);
-
-INSERT INTO test_string (idx, res) VALUES (1, 'hello');
-INSERT INTO test_string (idx, res) VALUES (2, '');
-INSERT INTO test_string (idx, res) VALUES (3, 'Special chars:
!@#$%^&*()_+{}|:"<>?~`-=[]\;'',./');
-INSERT INTO test_string (idx, res) VALUES (4, 'Unicode: 你好, Привет, こんにちは,
สวัสดี');
-INSERT INTO test_string (idx, res) VALUES (5, NULL);
diff --git
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase
b/c/driver/postgresql/validation/queries/type/select/string.txtcase
similarity index 65%
copy from
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase
copy to c/driver/postgresql/validation/queries/type/select/string.txtcase
index 355d169e7..718a999ba 100644
---
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/string.txtcase
@@ -18,19 +18,17 @@
// part: metadata
[tags]
-sql-type-name = "TIMESTAMP"
+sql-type-name = "text"
// part: setup_query
-CREATE TABLE test_timestamp (
- idx INT,
- res TIMESTAMP
+CREATE TABLE test_string (
+ idx INTEGER,
+ res TEXT
);
-// part: expected
-
-{"res": null}
-{"res": -9223372036854000}
-{"res": 946684800000000}
-{"res": 1684158330000000}
-{"res": 9223372036854000}
+INSERT INTO test_string (idx, res) VALUES (1, 'hello');
+INSERT INTO test_string (idx, res) VALUES (2, '');
+INSERT INTO test_string (idx, res) VALUES (3, 'Special chars:
!@#$%^&*()_+{}|:"<>?~`-=[]\;'',./');
+INSERT INTO test_string (idx, res) VALUES (4, 'Unicode: 你好, Привет, こんにちは,
สวัสดี');
+INSERT INTO test_string (idx, res) VALUES (5, NULL);
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/select/time.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/select/time.txtcase
index 30dfb7d9b..c562b8b94 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/time.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "time"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/select/timestamp.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/select/timestamp.txtcase
index 30dfb7d9b..1e61d7e2f 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/timestamp.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "timestamp"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
b/c/driver/postgresql/validation/queries/type/select/timestamptz.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/select/timestamptz.txtcase
index 30dfb7d9b..14042aa2d 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/timestamptz.txtcase
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-
// part: metadata
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "timestamptz"
diff --git a/c/driver/postgresql/validation/queries/type/select/uuid.txtcase
b/c/driver/postgresql/validation/queries/type/select/uuid.txtcase
index c268fbdfe..2872c55d0 100644
--- a/c/driver/postgresql/validation/queries/type/select/uuid.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/uuid.txtcase
@@ -21,7 +21,7 @@
drop = "test_uuid"
[tags]
-sql-type-name = "UUID"
+sql-type-name = "uuid"
// part: setup_query
diff --git a/c/driver/postgresql/validation/tests/postgresql.py
b/c/driver/postgresql/validation/tests/postgresql.py
index 8999c5393..ef16c15eb 100644
--- a/c/driver/postgresql/validation/tests/postgresql.py
+++ b/c/driver/postgresql/validation/tests/postgresql.py
@@ -39,6 +39,7 @@ class PostgreSQLQuirks(model.DriverQuirks):
get_objects_constraints_foreign=False,
get_objects_constraints_primary=False,
get_objects_constraints_unique=False,
+ metadata_type_name=True,
statement_bulk_ingest=True,
statement_bulk_ingest_catalog=False,
statement_bulk_ingest_schema=False,
diff --git a/docs/source/python/recipe/postgresql_execute_nocopy.py
b/docs/source/python/recipe/postgresql_execute_nocopy.py
index b2120cd8c..de392ce15 100644
--- a/docs/source/python/recipe/postgresql_execute_nocopy.py
+++ b/docs/source/python/recipe/postgresql_execute_nocopy.py
@@ -42,8 +42,14 @@ with conn.cursor(
print(cur.fetch_arrow_table().schema)
# Output:
# name: string
+ # -- field metadata --
+ # POSTGRESQL:type: 'text'
# setting: string
+ # -- field metadata --
+ # POSTGRESQL:type: 'text'
# description: string
+ # -- field metadata --
+ # POSTGRESQL:type: 'text'
#: Or it can be set afterwards:
@@ -57,8 +63,14 @@ with conn.cursor() as cur:
print(cur.fetch_arrow_table().schema)
# Output:
# name: string
+ # -- field metadata --
+ # POSTGRESQL:type: 'text'
# setting: string
+ # -- field metadata --
+ # POSTGRESQL:type: 'text'
# description: string
+ # -- field metadata --
+ # POSTGRESQL:type: 'text'
#: Without the option, the query fails as the driver attempts to execute the
#: query with ``COPY``:
diff --git a/docs/source/python/recipe/postgresql_execute_nocopy.py.stdout.txt
b/docs/source/python/recipe/postgresql_execute_nocopy.py.stdout.txt
index 0ac1231ec..e3dea7f7e 100644
--- a/docs/source/python/recipe/postgresql_execute_nocopy.py.stdout.txt
+++ b/docs/source/python/recipe/postgresql_execute_nocopy.py.stdout.txt
@@ -1,6 +1,18 @@
name: string
+ -- field metadata --
+ POSTGRESQL:type: 'text'
setting: string
+ -- field metadata --
+ POSTGRESQL:type: 'text'
description: string
+ -- field metadata --
+ POSTGRESQL:type: 'text'
name: string
+ -- field metadata --
+ POSTGRESQL:type: 'text'
setting: string
+ -- field metadata --
+ POSTGRESQL:type: 'text'
description: string
+ -- field metadata --
+ POSTGRESQL:type: 'text'