some work for SELECT statement

git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1077 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
2018-03-30 19:34:45 +00:00
parent d84ca900c3
commit fceec43d07
16 changed files with 605 additions and 105 deletions

View File

@@ -87,7 +87,8 @@ void DbExpression::field_before()
if( !is_first_field )
{
if( output_type == MORM_OUTPUT_TYPE_DB_INSERT ||
output_type == MORM_OUTPUT_TYPE_DB_UPDATE )
output_type == MORM_OUTPUT_TYPE_DB_UPDATE ||
output_type == MORM_OUTPUT_TYPE_SELECT_COLUMNS )
{
(*out_stream) << ",";
}
@@ -96,15 +97,70 @@ void DbExpression::field_before()
{
(*out_stream) << " AND ";
}
else
if( output_type == MORM_OUTPUT_TYPE_WHERE_EQ ||
output_type == MORM_OUTPUT_TYPE_WHERE_GE ||
output_type == MORM_OUTPUT_TYPE_WHERE_GT ||
output_type == MORM_OUTPUT_TYPE_WHERE_LE ||
output_type == MORM_OUTPUT_TYPE_WHERE_LT )
{
int conjunction = MORM_CONJUNCTION_AND;
if( !conjunctions.empty() )
{
conjunction = conjunctions.back();
}
if( conjunction == MORM_CONJUNCTION_AND )
{
(*out_stream) << " AND ";
}
else
if( conjunction == MORM_CONJUNCTION_OR )
{
(*out_stream) << " OR ";
}
}
}
}
void DbExpression::put_name_value_separator()
{
if( output_type == MORM_OUTPUT_TYPE_DB_PRIMARY_KEY ||
output_type == MORM_OUTPUT_TYPE_WHERE_EQ )
{
(*out_stream) << " = ";
}
else
if( output_type == MORM_OUTPUT_TYPE_WHERE_LT )
{
(*out_stream) << " < ";
}
else
if( output_type == MORM_OUTPUT_TYPE_WHERE_GT )
{
(*out_stream) << " > ";
}
else
if( output_type == MORM_OUTPUT_TYPE_WHERE_LE )
{
(*out_stream) << " <= ";
}
else
if( output_type == MORM_OUTPUT_TYPE_WHERE_GE )
{
(*out_stream) << " >= ";
}
}
void DbExpression::before_field_value_string()
{
if( output_type == MORM_OUTPUT_TYPE_DB_INSERT ||
output_type == MORM_OUTPUT_TYPE_DB_UPDATE ||
output_type == MORM_OUTPUT_TYPE_DB_PRIMARY_KEY )
// if( output_type == MORM_OUTPUT_TYPE_SELECT_COLUMNS ||
// output_type == MORM_OUTPUT_TYPE_DB_INSERT ||
// output_type == MORM_OUTPUT_TYPE_DB_UPDATE ||
// output_type == MORM_OUTPUT_TYPE_DB_PRIMARY_KEY )
{
(*out_stream) << "'";
}
@@ -112,9 +168,10 @@ void DbExpression::before_field_value_string()
void DbExpression::after_field_value_string()
{
if( output_type == MORM_OUTPUT_TYPE_DB_INSERT ||
output_type == MORM_OUTPUT_TYPE_DB_UPDATE ||
output_type == MORM_OUTPUT_TYPE_DB_PRIMARY_KEY )
// if( output_type == MORM_OUTPUT_TYPE_SELECT_COLUMNS ||
// output_type == MORM_OUTPUT_TYPE_DB_INSERT ||
// output_type == MORM_OUTPUT_TYPE_DB_UPDATE ||
// output_type == MORM_OUTPUT_TYPE_DB_PRIMARY_KEY )
{
(*out_stream) << "'";
}
@@ -126,22 +183,81 @@ void DbExpression::before_field_value(const std::wstring &)
before_field_value_string();
}
void DbExpression::before_field_value(const std::string &)
{
before_field_value_string();
}
void DbExpression::after_field_value(const std::wstring &)
{
after_field_value_string();
}
void DbExpression::before_field_value(const std::string &)
{
before_field_value_string();
}
void DbExpression::after_field_value(const std::string &)
{
after_field_value_string();
}
void DbExpression::before_field_value(const wchar_t *)
{
before_field_value_string();
}
void DbExpression::after_field_value(const wchar_t *)
{
after_field_value_string();
}
void DbExpression::before_field_value(const char *)
{
before_field_value_string();
}
void DbExpression::after_field_value(const char *)
{
after_field_value_string();
}
void DbExpression::prepare_to_where_clause()
{
work_mode = MORM_WORK_MODE_MODEL_FIELDS_VALUES;
conjunctions.clear();
is_first_field = true;
}
DbExpression & DbExpression::group_or()
{
field_before();
(*out_stream) << "(";
is_first_field = true;
conjunctions.push_back(MORM_CONJUNCTION_OR);
return *this;
}
DbExpression & DbExpression::group_and()
{
field_before();
(*out_stream) << "(";
is_first_field = true;
conjunctions.push_back(MORM_CONJUNCTION_AND);
return *this;
}
DbExpression & DbExpression::group_end()
{
if( !conjunctions.empty() )
{
conjunctions.pop_back();
(*out_stream) << ")";
field_after();
}
return *this;
}
}