std::string ivalue;
DECLARE_COLUMN(Name, "name", &PolicyDefinition::name);
- DECLARE_COLUMN(Ivalue, "policy", &PolicyDefinition::ivalue);
+ DECLARE_COLUMN(Ivalue, "ivalue", &PolicyDefinition::ivalue);
};
DECLARE_TABLE(AdminTable, "ADMIN", Admin::Name, Admin::Activated);
std::string processWhere(Or<L,R>& expr);
template<typename Expr>
- std::string processWhere(Expr expr);
+ std::string processWhere(const Expr& expr);
};
template<typename T>
template<typename T>
template<typename Expr>
-std::string Crud<T>::processWhere(Expr expr)
+std::string Crud<T>::processWhere(const Expr& expr)
{
std::stringstream ss;
- ss << static_cast<T*>(this)->getColumnName(expr.l);
- ss << " " << std::string(expr) << " ?";
+ ss << static_cast<T*>(this)->getColumnName(expr.l) << " ";
+ ss << static_cast<std::string>(expr) << " ";
+ ss << expr.r;
return ss.str();
}
#include "column.hpp"
#include "type.hpp"
+#include "util.hpp"
#include <string>
#include <type_traits>
/// L is Column and R is Value
Binary(L l, R r) : l(l), r(r)
{
- /// preventing logical expressions like &&, || and ==
+ /// Prevent logical expressions like &&, || and ==
if constexpr(!is_expression<L>::value) {
using FieldType = typename L::FieldType;
type::assert_compare(FieldType(), r);
L l;
std::string r;
- Binary(L l, const char* r) : l(l), r(r)
+ /// Make r to 'r'
+ Binary(L l, const char* r) : l(l), r("'" + std::string(r) + "'")
{
using FieldType = typename L::FieldType;
type::assert_compare(FieldType(), std::string());
{
std::string dump = (Table1::Column1 == 3);
EXPECT_EQ(dump, "=");
+
+ dump = (Table1::Column2 == "string");
+ EXPECT_EQ(dump, "=");
}
TEST(QueryBuilderExpressionTests, greater)
std::string dump = (Table1::Column1 < 3);
EXPECT_EQ(dump, "<");
}
+
+TEST(QueryBuilderExpressionTests, and_)
+{
+ std::string dump = (Table1::Column1 < 3) && (Table1::Column1 == 3);
+ EXPECT_EQ(dump, "AND");
+}
+
+TEST(QueryBuilderExpressionTests, or_)
+{
+ std::string dump = (Table1::Column1 < 3) || (Table1::Column2 == "text");
+ EXPECT_EQ(dump, "OR");
+}
std::string select4 = admin.selectAll().where(Admin::Uid > 3 ||
Admin::Pkg == "dpm");
- EXPECT_EQ(select1, "SELECT uid, key FROM admin WHERE id > ?");
- EXPECT_EQ(select2, "SELECT * FROM admin WHERE uid > ?");
- EXPECT_EQ(select3, "SELECT * FROM admin WHERE uid > ? AND pkg = ?");
- EXPECT_EQ(select4, "SELECT * FROM admin WHERE uid > ? OR pkg = ?");
+ EXPECT_EQ(select1, "SELECT uid, key FROM admin WHERE id > 3");
+ EXPECT_EQ(select2, "SELECT * FROM admin WHERE uid > 3");
+ EXPECT_EQ(select3, "SELECT * FROM admin WHERE uid > 3 AND pkg = 'dpm'");
+ EXPECT_EQ(select4, "SELECT * FROM admin WHERE uid > 3 OR pkg = 'dpm'");
}
TEST(QueryBuilderTsqbTests, UPDATE)
.where((Admin::Uid == 0) && (Admin::Id == 1));
EXPECT_EQ(update1, "UPDATE admin SET id = ?, pkg = ?, uid = ?, key = ?");
- EXPECT_EQ(update2, "UPDATE admin SET key = ? WHERE uid = ? AND id = ?");
- EXPECT_EQ(update3, "UPDATE admin SET key = ?, pkg = ? WHERE uid = ? AND id = ?");
+ EXPECT_EQ(update2, "UPDATE admin SET key = ? WHERE uid = 0 AND id = 1");
+ EXPECT_EQ(update3, "UPDATE admin SET key = ?, pkg = ? WHERE uid = 0 AND id = 1");
}
TEST(QueryBuilderTsqbTests, DELETE)
(Admin::Uid == 3));
EXPECT_EQ(delete1, "DELETE FROM admin");
- EXPECT_EQ(delete2, "DELETE FROM admin WHERE pkg = ? AND uid = ?");
+ EXPECT_EQ(delete2, "DELETE FROM admin WHERE pkg = 'dpm' AND uid = 3");
}
TEST(QueryBuilderTsqbTests, INSERT)
"managed_policy.value FROM admin, managed_policy");
EXPECT_EQ(multiSelect2, "SELECT admin.uid, admin.key, managed_policy.id, "
"managed_policy.value FROM admin, managed_policy "
- "WHERE admin.uid > ? AND managed_policy.id = ?");
+ "WHERE admin.uid > 0 AND managed_policy.id = 3");
}
/*
#include <string>
#include <algorithm>
#include <cctype>
+#include <sstream>
namespace vist {
namespace tsqb {
return s;
}
+template <typename V>
+std::string concat(const std::string& column, const std::string& op, const V& value)
+{
+ std::stringstream ss;
+ ss << column << " " << op << " " << value;
+ return ss.str();
+}
+
} // namespace util
} // namespace tsqb
} // namespace vist