added alter table command to fluent query builder

This commit is contained in:
Sascha Kühl
2025-11-05 11:05:03 +01:00
parent c87a4c29b4
commit 4b51ad21da
27 changed files with 343 additions and 282 deletions
+44 -45
View File
@@ -136,58 +136,57 @@ private:
escape_identifier_t identifier_escape_type_ = escape_identifier_t::ESCAPE_BOTH_SAME;
std::string default_schema_name_;
// std::unique_ptr<query_compiler> compiler_;
token_to_string_map tokens_ {
{dialect_token::Create, "CREATE"},
{dialect_token::Drop, "DROP"},
{dialect_token::Remove, "DELETE"},
{dialect_token::Insert, "INSERT"},
{dialect_token::Alter, "ALTER"},
{dialect_token::Table, "TABLE"},
{dialect_token::Into, "INTO"},
{dialect_token::Values, "VALUES"},
{dialect_token::Update, "UPDATE"},
{dialect_token::Select, "SELECT"},
{dialect_token::Columns, "COLUMNS"},
{dialect_token::Column, "COLUMN"},
{dialect_token::From, "FROM"},
{dialect_token::Join, "LEFT JOIN"},
{dialect_token::On, "ON"},
{dialect_token::Where, "WHERE"},
{dialect_token::And, "AND"},
{dialect_token::Or, "OR"},
{dialect_token::Not, "NOT"},
{dialect_token::Like, "LIKE"},
{dialect_token::Between, "BETWEEN"},
{dialect_token::In, "IN"},
{dialect_token::OrderBy, "ORDER BY"},
{dialect_token::GroupBy, "GROUP BY"},
{dialect_token::Asc, "ASC"},
{dialect_token::Desc, "DESC"},
{dialect_token::Offset, "OFFSET"},
{dialect_token::Limit, "LIMIT"},
{dialect_token::As, "AS"},
{dialect_token::Offset, "OFFSET"},
{dialect_token::Distinct, "DISTINCT"},
{dialect_token::Set, "SET"},
{dialect_token::NotNull, "NOT NULL"},
{dialect_token::PrimaryKey, "PRIMARY KEY"},
{dialect_token::ForeignKey, "FOREIGN KEY"},
{dialect_token::References, "REFERENCES"},
{dialect_token::AddConstraint, "ADD CONSTRAINT"},
{dialect_token::DropConstraint, "DROP CONSTRAINT"},
{dialect_token::Alter, "ALTER"},
{dialect_token::And, "AND"},
{dialect_token::As, "AS"},
{dialect_token::Asc, "ASC"},
{dialect_token::Asterisk, "*"},
{dialect_token::Begin, "BEGIN TRANSACTION"},
{dialect_token::Commit, "COMMIT TRANSACTION"},
{dialect_token::Rollback, "ROLLBACK TRANSACTION"},
{dialect_token::StartQuote, "\""},
{dialect_token::EndQuote, "\""},
{dialect_token::StringQuote, "'"},
{dialect_token::BeginBinaryData, "X'"},
{dialect_token::EndBinaryData, "'"},
{dialect_token::BeginStringData, "'"},
{dialect_token::Between, "BETWEEN"},
{dialect_token::Column, "COLUMN"},
{dialect_token::Columns, "COLUMNS"},
{dialect_token::Commit, "COMMIT TRANSACTION"},
{dialect_token::Create, "CREATE"},
{dialect_token::Desc, "DESC"},
{dialect_token::Distinct, "DISTINCT"},
{dialect_token::Drop, "DROP"},
{dialect_token::DropConstraint, "DROP CONSTRAINT"},
{dialect_token::EndBinaryData, "'"},
{dialect_token::EndQuote, "\""},
{dialect_token::EndStringData, "'"},
{dialect_token::None, ""}
{dialect_token::ForeignKey, "FOREIGN KEY"},
{dialect_token::From, "FROM"},
{dialect_token::GroupBy, "GROUP BY"},
{dialect_token::In, "IN"},
{dialect_token::Insert, "INSERT"},
{dialect_token::Into, "INTO"},
{dialect_token::Join, "LEFT JOIN"},
{dialect_token::Like, "LIKE"},
{dialect_token::Limit, "LIMIT"},
{dialect_token::None, ""},
{dialect_token::Not, "NOT"},
{dialect_token::NotNull, "NOT NULL"},
{dialect_token::Offset, "OFFSET"},
{dialect_token::On, "ON"},
{dialect_token::Or, "OR"},
{dialect_token::OrderBy, "ORDER BY"},
{dialect_token::PrimaryKey, "PRIMARY KEY"},
{dialect_token::References, "REFERENCES"},
{dialect_token::Remove, "DELETE"},
{dialect_token::Rollback, "ROLLBACK TRANSACTION"},
{dialect_token::Select, "SELECT"},
{dialect_token::Set, "SET"},
{dialect_token::StartQuote, "\""},
{dialect_token::StringQuote, "'"},
{dialect_token::Table, "TABLE"},
{dialect_token::Update, "UPDATE"},
{dialect_token::Values, "VALUES"},
{dialect_token::Where, "WHERE"}
};
data_type_to_string_map data_types_ {
+44 -46
View File
@@ -6,59 +6,57 @@
namespace matador::sql {
enum class dialect_token : uint8_t {
Create = 0,
Drop,
Remove,
Insert,
Update,
Select,
AddConstraint = 0,
Alter,
ForeignKey,
PrimaryKey,
AddConstraint,
DropConstraint,
References,
Schema,
Database,
Table,
Values,
InsertValues,
Columns,
Column,
From,
Join,
On,
Into,
Where,
WhereClause,
And,
Or,
Not,
Like,
Between,
In,
OrderBy,
GroupBy,
Asc,
Desc,
Limit,
As,
Offset,
Distinct,
Set,
UpdateValues,
NotNull,
Asc,
Asterisk,
Begin,
Commit,
Rollback,
StartQuote,
EndQuote,
StringQuote,
BeginBinaryData,
EndBinaryData,
BeginStringData,
Between,
Column,
Columns,
Commit,
Create,
Database,
Desc,
Distinct,
Drop,
DropConstraint,
EndBinaryData,
EndQuote,
EndStringData,
None
ForeignKey,
From,
GroupBy,
In,
Insert,
Into,
Join,
Like,
Limit,
None,
Not,
NotNull,
Offset,
On,
Or,
OrderBy,
PrimaryKey,
References,
Remove,
Rollback,
Schema,
Select,
Set,
StartQuote,
StringQuote,
Table,
Update,
Values,
Where
};
}
+2
View File
@@ -10,6 +10,7 @@ namespace matador::sql {
enum class sql_command {
SQL_UNKNOWN,
SQL_CREATE,
SQL_CREATE_TABLE,
SQL_CREATE_SCHEMA,
SQL_CREATE_DATABASE,
@@ -17,6 +18,7 @@ enum class sql_command {
SQL_INSERT,
SQL_DELETE,
SQL_SELECT,
SQL_DROP,
SQL_DROP_TABLE,
SQL_DROP_SCHEMA,
SQL_DROP_DATABASE,
+3 -10
View File
@@ -10,8 +10,7 @@ namespace matador::sql {
struct column;
class record
{
class record final {
private:
using field_ref = std::reference_wrapper<field>;
using field_by_index = std::vector<field_ref>;
@@ -45,13 +44,11 @@ public:
[[nodiscard]] const field& at(const column &col) const;
[[nodiscard]] const field& at(size_t index) const;
template<class Type>
std::optional<Type> at(const column &col) const
{
std::optional<Type> at(const column &col) const {
return at(col).as<Type>();
}
template<class Type>
std::optional<Type> at(size_t index) const
{
std::optional<Type> at(const size_t index) const {
return at(index).as<Type>();
}
@@ -70,8 +67,6 @@ public:
[[nodiscard]] bool empty() const;
void clear();
// [[nodiscard]] bool unknown() const;
private:
void init();
void add_to_map(field &col, size_t index);
@@ -79,8 +74,6 @@ private:
private:
field_by_index fields_;
field_by_name_map fields_by_name_;
// int pk_index_{-1};
};
}
+1 -1
View File
@@ -68,7 +68,7 @@ public:
return bus_.subscribe<EventType>(handler);
}
connection_pool& pool() const;
[[nodiscard]] connection_pool& pool() const;
private:
size_t max_size_{};