added alter table command to fluent query builder (progress)

This commit is contained in:
Sascha Kühl
2025-11-04 16:24:43 +01:00
parent c3c7ea57a2
commit c87a4c29b4
5 changed files with 62 additions and 29 deletions
@@ -29,21 +29,13 @@ query_add_foreign_key_constraint_intermediate query_add_key_constraint_intermedi
return {context_};
}
void query_drop_key_constraint_intermediate::constraint( const std::string& name ) {}
void query_drop_key_constraint_intermediate::primary_key() {}
void query_drop_key_constraint_intermediate::foreign_key( const std::string& name ) {}
void query_drop_key_constraint_intermediate::foreign_keys( const std::vector<std::string>& names ) {}
query_add_key_constraint_intermediate query_alter_table_intermediate::add_constraint( const std::string& name ) {
context_->parts.push_back(std::make_unique<internal::query_add_key_constraint_part>(name));
return {context_};
}
query_drop_key_constraint_intermediate query_alter_table_intermediate::drop_constraint( const std::string& name ) {
executable_query query_alter_table_intermediate::drop_constraint( const std::string& name ) {
context_->parts.push_back(std::make_unique<internal::query_drop_key_constraint_part>(name));
return {context_};
}
+39 -6
View File
@@ -52,26 +52,59 @@ std::string handle_column(sql::query_context &ctx, const sql::dialect *d, const
}
void query_compiler::visit(internal::query_alter_part& part) {
query_.sql = dialect_->token_at(sql::dialect_token::Create);
query_.sql = dialect_->token_at(part.token());
}
void query_compiler::visit(internal::query_alter_table_part& part) {
query_.command = sql::sql_command::SQL_ALTER_TABLE;
query_.sql += " " + dialect_->token_at(sql::dialect_token::Table) + " " +
query_.sql += " " + dialect_->token_at(part.token()) + " " +
dialect_->prepare_identifier_string(part.table().name);
}
void query_compiler::visit(internal::query_add_key_constraint_part& part) {
query_.sql += " " + dialect_->token_at(sql::dialect_token::AddConstraint) + " " + part.name();
query_.sql += " " + dialect_->token_at(sql::dialect_token::AddConstraint) + " " + part.name();
}
void query_compiler::visit( internal::query_add_foreign_key_constraint_part& part ) {}
void query_compiler::visit( internal::query_add_foreign_key_constraint_part& part ) {
query_.sql += " " + dialect_->token_at(part.token()) + " (";
if (part.columns().size() < 2) {
for (const auto &col: part.columns()) {
query_.sql += dialect_->prepare_identifier_string(col.name);
}
} else {
auto it = part.columns().begin();
query_.sql += dialect_->prepare_identifier_string(it->name);
for (; it != part.columns().end(); ++it) {
query_.sql += ", " + dialect_->prepare_identifier_string(it->name);
}
}
query_.sql += ")";
}
void query_compiler::visit( internal::query_add_primary_key_constraint_part& part ) {}
void query_compiler::visit( internal::query_add_foreign_key_reference_part& part ) {}
void query_compiler::visit( internal::query_add_foreign_key_reference_part& part ) {
query_.sql += " " + dialect_->token_at(part.token()) + " " +
part.table().name + " (";
void query_compiler::visit(internal::query_drop_key_constraint_part& part) {}
if (part.columns().size() < 2) {
for (const auto &col: part.columns()) {
query_.sql += dialect_->prepare_identifier_string(col.name);
}
} else {
auto it = part.columns().begin();
query_.sql += dialect_->prepare_identifier_string(it->name);
for (; it != part.columns().end(); ++it) {
query_.sql += ", " + dialect_->prepare_identifier_string(it->name);
}
}
query_.sql += ")";
}
void query_compiler::visit(internal::query_drop_key_constraint_part& part) {
query_.sql += " " + dialect_->token_at(part.token()) + " " + part.name();
}
void query_compiler::visit(internal::query_select_part &select_part)
{