5#include <Lightweight/DataMapper/Field.hpp>
6#include <Lightweight/SqlSchema.hpp>
7#include <Lightweight/Utils.hpp>
13#include <unordered_set>
15namespace Lightweight::Tools
18using ColumnNameOverrides = std::map<SqlSchema::FullyQualifiedTableColumn, std::string>;
23 using UnicodeTextColumnOverrides = std::unordered_map<std::string , std::unordered_set<std::string >>;
27 std::vector<std::string> stripSuffixes = {
"_id",
"_nr" };
28 bool makeAliases =
false;
29 FormatType formatType = FormatType::camelCase;
30 PrimaryKey primaryKeyAssignment = PrimaryKey::ServerSideAutoIncrement;
31 ColumnNameOverrides columnNameOverrides;
32 bool forceUnicodeTextColumns =
false;
33 UnicodeTextColumnOverrides unicodeTextColumnOverrides;
34 bool suppressWarnings =
false;
35 size_t sqlFixedStringMaxSize = SqlOptimalMaxColumnSize;
38 explicit CxxModelPrinter(Config config)
noexcept;
40 std::string ToString(std::string_view modelNamespace);
42 std::string TableIncludes()
const;
44 std::string AliasTableName(std::string_view name)
const;
46 [[nodiscard]] std::expected<void, std::string> PrintCumulativeHeaderFile(
47 std::filesystem::path
const& outputDirectory, std::filesystem::path
const& cumulativeHeaderFile);
49 void PrintToFiles(std::string_view modelNamespace, std::string_view outputDirectory);
51 std::string HeaderFileForTheTable(std::string_view modelNamespace, std::string
const& tableName);
53 std::string Example(SqlSchema::Table
const& table)
const;
55 auto StripSuffix(std::string name) -> std::string;
57 static auto SanitizeName(std::string name) -> std::string;
59 static auto FormatTableName(std::string_view name) -> std::string;
61 static SqlSchema::ForeignKeyConstraint
const& GetForeignKey(
62 SqlSchema::Column
const& column, std::vector<SqlSchema::ForeignKeyConstraint>
const& foreignKeys);
64 static std::string MakeType(SqlSchema::Column
const& column,
65 std::string
const& tableName,
66 bool forceUnicodeTextColumn,
67 UnicodeTextColumnOverrides
const& unicodeTextColumnOverrides,
68 size_t sqlFixedStringMaxSize);
70 std::optional<std::string> MapColumnNameOverride(SqlSchema::FullyQualifiedTableName
const& tableName,
71 std::string
const& columnName)
const;
73 void ResolveOrderAndPrintTable(std::vector<SqlSchema::Table>
const& tables);
75 void PrintTable(SqlSchema::Table
const& table);
82 std::stringstream text;
83 std::vector<std::string> requiredTables;
86 std::map<std::string, TableInfo> _definitions;
88 std::map<SqlSchema::FullyQualifiedTableName, SqlSchema::ForeignKeyConstraint> _warningOnUnsupportedMultiKeyForeignKey;
89 size_t _numberOfColumnsListed = 0;
90 size_t _numberOfForeignKeysListed = 0;