blob: a679dc6a2db95e3a7283edc7a24b034faf33f9c7 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#pragma once
/// \file iceberg/catalog/sql/sql_catalog_tables_internal.h
/// sqlpp23 table models for the SQL catalog's backing tables.
///
/// These mirror the hand-written shape that sqlpp23's `ddl2cpp` generator would
/// produce. The schema is compatible with the Apache Iceberg Java
/// `JdbcCatalog`: `iceberg_tables` and `iceberg_namespace_properties`, both
/// scoped by a `catalog_name` column.
///
/// This is an internal header: it pulls in sqlpp23 and is only included by the
/// built-in store implementations, never by public catalog headers.
#include <optional>
#include <sqlpp23/core/basic/table.h>
#include <sqlpp23/core/basic/table_columns.h>
#include <sqlpp23/core/name/create_name_tag.h>
#include <sqlpp23/core/type_traits.h>
namespace iceberg::sql {
// sqlpp23 name tags require a static `const char name[]` member; the
// `SQLPP_CREATE_NAME_TAG_FOR_SQL_AND_CPP` macro provides that required shape.
// NOLINTBEGIN(modernize-avoid-c-arrays)
struct IcebergTables_ {
struct CatalogName {
SQLPP_CREATE_NAME_TAG_FOR_SQL_AND_CPP(catalog_name, catalogName);
using data_type = ::sqlpp::text;
using has_default = std::false_type;
};
struct TableNamespace {
SQLPP_CREATE_NAME_TAG_FOR_SQL_AND_CPP(table_namespace, tableNamespace);
using data_type = ::sqlpp::text;
using has_default = std::false_type;
};
struct TableName {
SQLPP_CREATE_NAME_TAG_FOR_SQL_AND_CPP(table_name, tableName);
using data_type = ::sqlpp::text;
using has_default = std::false_type;
};
struct MetadataLocation {
SQLPP_CREATE_NAME_TAG_FOR_SQL_AND_CPP(metadata_location, metadataLocation);
using data_type = std::optional<::sqlpp::text>;
using has_default = std::true_type;
};
struct PreviousMetadataLocation {
SQLPP_CREATE_NAME_TAG_FOR_SQL_AND_CPP(previous_metadata_location,
previousMetadataLocation);
using data_type = std::optional<::sqlpp::text>;
using has_default = std::true_type;
};
struct RecordType {
SQLPP_CREATE_NAME_TAG_FOR_SQL_AND_CPP(iceberg_type, recordType);
using data_type = std::optional<::sqlpp::text>;
using has_default = std::true_type;
};
SQLPP_CREATE_NAME_TAG_FOR_SQL_AND_CPP(iceberg_tables, icebergTables);
template <typename T>
using _table_columns = sqlpp::table_columns<T, //
CatalogName, //
TableNamespace, //
TableName, //
MetadataLocation, //
PreviousMetadataLocation, //
RecordType>;
using _required_insert_columns = sqlpp::detail::type_set<
sqlpp::column_t<sqlpp::table_t<IcebergTables_>, CatalogName>,
sqlpp::column_t<sqlpp::table_t<IcebergTables_>, TableNamespace>,
sqlpp::column_t<sqlpp::table_t<IcebergTables_>, TableName>>;
};
using IcebergTables = ::sqlpp::table_t<IcebergTables_>;
struct IcebergNamespaceProperties_ {
struct CatalogName {
SQLPP_CREATE_NAME_TAG_FOR_SQL_AND_CPP(catalog_name, catalogName);
using data_type = ::sqlpp::text;
using has_default = std::false_type;
};
struct Namespace {
// SQL column name is `namespace`; the C++ member cannot be a keyword.
SQLPP_CREATE_NAME_TAG_FOR_SQL_AND_CPP(namespace, ns);
using data_type = ::sqlpp::text;
using has_default = std::false_type;
};
struct PropertyKey {
SQLPP_CREATE_NAME_TAG_FOR_SQL_AND_CPP(property_key, propertyKey);
using data_type = ::sqlpp::text;
using has_default = std::false_type;
};
struct PropertyValue {
SQLPP_CREATE_NAME_TAG_FOR_SQL_AND_CPP(property_value, propertyValue);
using data_type = std::optional<::sqlpp::text>;
using has_default = std::true_type;
};
SQLPP_CREATE_NAME_TAG_FOR_SQL_AND_CPP(iceberg_namespace_properties,
icebergNamespaceProperties);
template <typename T>
using _table_columns = sqlpp::table_columns<T, //
CatalogName, //
Namespace, //
PropertyKey, //
PropertyValue>;
using _required_insert_columns = sqlpp::detail::type_set<
sqlpp::column_t<sqlpp::table_t<IcebergNamespaceProperties_>, CatalogName>,
sqlpp::column_t<sqlpp::table_t<IcebergNamespaceProperties_>, Namespace>,
sqlpp::column_t<sqlpp::table_t<IcebergNamespaceProperties_>, PropertyKey>>;
};
using IcebergNamespaceProperties = ::sqlpp::table_t<IcebergNamespaceProperties_>;
// NOLINTEND(modernize-avoid-c-arrays)
} // namespace iceberg::sql