query builder create progress

This commit is contained in:
Sascha Kuehl 2023-11-01 22:14:39 +01:00
parent 9e2d1358bb
commit b9d9609c28
4 changed files with 55 additions and 3 deletions

View File

@ -1,6 +1,8 @@
#ifndef QUERY_DIALECT_HPP
#define QUERY_DIALECT_HPP
#include "matador/sql/types.hpp"
#include <cstdint>
#include <string>
#include <unordered_map>
@ -60,6 +62,7 @@ public:
public:
const std::string& token_at(token_t token) const;
const std::string& data_type_at(data_type_t type) const;
/**
* Prepare sql dialect identifier for execution
@ -115,6 +118,7 @@ private:
{token_t::DROP, "DROP"},
{token_t::REMOVE, "DELETE"},
{token_t::INSERT, "INSERT"},
{token_t::TABLE, "TABLE"},
{token_t::INTO, "INTO"},
{token_t::VALUES, "VALUES"},
{token_t::UPDATE, "UPDATE"},
@ -145,6 +149,31 @@ private:
{token_t::STRING_QUOTE, "'"},
{token_t::NONE, ""}
};
using data_type_to_string_map = std::unordered_map<data_type_t, std::string>;
data_type_to_string_map data_types_ {
{data_type_t::type_char, "TINYINT"},
{data_type_t::type_short, "SMALLINT"},
{data_type_t::type_int, "INTEGER"},
{data_type_t::type_long, "BIGINT"},
{data_type_t::type_long_long, "BIGINT"},
{data_type_t::type_unsigned_char, "TINYINT"},
{data_type_t::type_unsigned_short, "INTEGER"},
{data_type_t::type_unsigned_int, "BIGINT"},
{data_type_t::type_unsigned_long, "BIGINT"},
{data_type_t::type_unsigned_long_long, "BIGINT"},
{data_type_t::type_float, "FLOAT"},
{data_type_t::type_double, "DOUBLE"},
{data_type_t::type_bool, "BOOLEAN"},
{data_type_t::type_char_pointer, "VARCHAR"},
{data_type_t::type_varchar, "VARCHAR"},
{data_type_t::type_text, "TEXT"},
{data_type_t::type_date, "DATE"},
{data_type_t::type_time, "DATETIME"},
{data_type_t::type_blob, "BLOB"},
{data_type_t::type_null, "NULL"},
{data_type_t::type_unknown, "UNKNOWN"}
};
};
}

View File

@ -11,7 +11,7 @@ int main() {
sql::query_builder query(d);
query.create().table("person", {
std::cout << query.create().table("person", {
{ "id", sql::data_type_traits<unsigned long>::builtin_type() },
{ "name", sql::data_type_traits<std::string>::builtin_type(255), 255 },
{ "id", sql::data_type_traits<unsigned long>::builtin_type() }

View File

@ -3,10 +3,16 @@
#include "matador/utils/string.hpp"
namespace matador::sql {
const std::string& dialect::token_at(dialect::token_t token) const {
const std::string& dialect::token_at(dialect::token_t token) const
{
return tokens_.at(token);
}
const std::string &dialect::data_type_at(data_type_t type) const
{
return data_types_.at(type);
}
std::string dialect::prepare_identifier(const std::string &str) const
{
std::string result(str);

View File

@ -72,8 +72,25 @@ query_builder &query_builder::table(const std::string &table, std::initializer_l
transition_to(state_t::QUERY_TABLE);
query_parts_.emplace_back(dialect_.token_at(dialect::token_t::TABLE) + " " + dialect_.prepare_identifier(table) + " ");
// auto cols =
std::string result = "(";
for (const auto &col : columns) {
result.append(dialect_.prepare_identifier(col.name()) + " " + dialect_.data_type_at(col.type()));
if (col.attributes().size() > 0) {
result.append("(" + std::to_string(col.attributes().size()) +")");
}
if (is_constraint_set(col.attributes().options(), utils::constraints::NOT_NULL)) {
result.append(" NOT NULL");
}
if (is_constraint_set(col.attributes().options(), utils::constraints::PRIMARY_KEY)) {
result.append(" PRIMARY KEY");
}
result.append(", ");
}
result += ")";
query_parts_.emplace_back(result);
return *this;
}