Skip to content

Commit 6e8521f

Browse files
Moved Table Arg types out side of the class
1 parent 093d4c0 commit 6e8521f

File tree

4 files changed

+75
-59
lines changed

4 files changed

+75
-59
lines changed

sqlite3pp.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,7 @@ namespace sqlite3pp
546546
return *this;
547547
}
548548

549-
query::query_iterator::value_type query::query_iterator::operator*() const
549+
query::rows query::query_iterator::operator*() const
550550
{
551551
return rows(cmd_->stmt_);
552552
}

sqlite3pp.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ namespace sqlite3pp
363363
query_iterator& operator++();
364364

365365
//#pragma warning(disable : 4996)
366-
sqlite3pp::query::rows operator*() const;
366+
query::rows operator*() const;
367367

368368
private:
369369
query* cmd_;

sqlite3pp_ez.cpp

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,6 @@ namespace sqlite3pp
141141
bool sql_base::bIsGlblDbOpen = false;
142142
const char sql_base::TableArg_PreExecuteArg[] = "PreExecuteArg";
143143
const char sql_base::TableArg_WhereClauseArg[] = "WhereClauseArg";
144-
const char sql_base::TableArg_InsertArg[] = "InsertArg";
145144
const char sql_base::TableArg_DbFileNameArg[] = "DbFileNameArg";
146145
const char sql_base::TableArg_ValueArg[] = "ValueArg";
147146

@@ -353,7 +352,7 @@ namespace sqlite3pp
353352
{
354353
if (strcmp("INTEGER", str) == 0 || strcmp("INT", str) == 0 || strcmp("TINYINT", str) == 0 || strcmp("SMALLINT", str) == 0 || strcmp("MEDIUMINTSMALLINT", str) == 0 || strcmp("BIGINT", str) == 0 || strcmp("UNSIGNED BIG INT", str) == 0 || strcmp("INT2", str) == 0 || strcmp("INT8", str) == 0)
355354
return "int";
356-
if (strcmp("REAL", str) == 0 || strcmp("DOUBLE", str) == 0 || strcmp("DOUBLE PRECISION", str) == 0 || strcmp("FLOAT", str) == 0 || strncmp("DECIMAL", str, 7) == 0 || strcmp("BOOLEAN", str) == 0 || strcmp("DATE", str) == 0 || strcmp("DATETIME", str) == 0 || strcmp("NUMERIC", str) == 0)
355+
if (strcmp("REAL", str) == 0 || strcmp("DOUBLE", str) == 0 || strcmp("DOUBLE PRECISION", str) == 0 || strcmp("FLOAT", str) == 0 || strncmp("DECIMAL", str, 7) == 0 || strcmp("BOOLEANL", str) == 0 || strcmp("BOOLEAN", str) == 0 || strcmp("DATE", str) == 0 || strcmp("DATETIME", str) == 0 || strcmp("NUMERIC", str) == 0)
357356
return "double";
358357

359358
if (m_options.m.use_basic_types_only)
@@ -381,7 +380,7 @@ namespace sqlite3pp
381380
return "Smallint";
382381
if (strcmp("MEDIUMINTSMALLINT", str) == 0)
383382
return "Mediumint";
384-
if (strcmp("BOOLEAN", str) == 0)
383+
if (strcmp("BOOLEAN", str) == 0 || strcmp("BOOLEANL", str) == 0)
385384
return "Boolean";
386385
if (strcmp("BIGINT", str) == 0)
387386
return "Bigint";
@@ -436,10 +435,10 @@ namespace sqlite3pp
436435
return option;
437436
}
438437

439-
void SQLiteClassBuilder::Init(const std::string & TableOrView_name, const std::string & WhereClause)
438+
void SQLiteClassBuilder::Init(const std::string & TableOrView_name, const std::string & AndWhereClause)
440439
{
441440
if (TableOrView_name == CreateHeaderForAllTables)
442-
CreateAllHeaders(m_options, WhereClause);
441+
CreateAllHeaders(m_options, AndWhereClause);
443442
else if (!TableOrView_name.empty() && TableOrView_name != Nill)
444443
CreateHeader(TableOrView_name);
445444
}
@@ -449,9 +448,9 @@ namespace sqlite3pp
449448
m_db.disconnect();
450449
}
451450

452-
bool SQLiteClassBuilder::CreateAllHeaders(const std::string &WhereClause)
451+
bool SQLiteClassBuilder::CreateAllHeaders(const std::string &AndWhereClause)
453452
{
454-
return CreateAllHeaders(m_options, WhereClause);
453+
return CreateAllHeaders(m_options, AndWhereClause);
455454
}
456455
static const char TopHeaderCommnetsPrt1[] = "/* This file was automatically generated using [Sqlite3pp_EZ].\nSqlite3pp_EZ Copyright (C) 2021 David Maisonave (http::\\www.axter.com)";
457456
static const char TopHeaderCommnetsPrt2[] = "For more details see https://github.com/David-Maisonave/sqlite3pp_EZ\n*/";
@@ -494,14 +493,14 @@ namespace sqlite3pp
494493
return true;
495494
}
496495

497-
bool SQLiteClassBuilder::CreateAllHeaders(const TblClassOptions &strtype, const std::string &WhereClause)
496+
bool SQLiteClassBuilder::CreateAllHeaders(const TblClassOptions &strtype, const std::string &AndWhereClause)
498497
{
499498
m_HeadersCreated.clear();
500499
m_ClassNames.clear();
501500
m_options = strtype;
502501
const std::string OrgPrefix = m_options.h.header_prefix;
503502
using SQLiteMaster = Table<sqlite_master>;
504-
SQLiteMaster tbl(m_db, SQLiteMaster::WhereClauseArg("where (type = 'table' or type = 'view') " + WhereClause));
503+
SQLiteMaster tbl(m_db, WhereClauseArg(T_("where (type = 'table' or type = 'view') ") + sql_base::to_tstring(AndWhereClause)) );
505504
for (auto t : tbl)
506505
{
507506
m_options.h.header_prefix = OrgPrefix + t.type + "_";
@@ -741,26 +740,41 @@ namespace sqlite3pp
741740

742741
std::wstring query::rows::get(int idx, const std::wstring&) const
743742
{
743+
#ifdef SQLITE3PP_ALLOW_NULL_STRING_RETURN
744+
bool AllowNullStringReturn = true;
745+
#else
746+
bool AllowNullStringReturn = false;
747+
#endif // !SQLITE3PP_ALLOW_NULL_STRING_RETURN
744748
std::wstring value;
745749
const char * strtype = sqlite3_column_decltype(stmt_, idx);
746-
wchar_t const* Val = get(idx, (wchar_t const*)0);
747-
#ifndef SQLITE3PP_ALLOW_NULL_STRING_RETURN
748-
if (!Val)
749-
return value;
750-
#endif // !SQLITE3PP_ALLOW_NULL_STRING_RETURN
750+
bool GetUnicodeString = false;
751+
if (!strtype || strcmp(strtype, "TEXT") == 0 || strncmp("CHARACTER", strtype, 9) == 0 || strncmp("VARYING CHARACTER", strtype, 17) == 0 || strncmp("VARCHAR", strtype, 7) == 0)
752+
GetUnicodeString = false;
753+
else if ( strncmp("NCHAR", strtype, 5) == 0 || strncmp("NVARCHAR", strtype, 8) == 0 || strncmp("NATIVE CHARACTER", strtype, 16) == 0)
754+
GetUnicodeString = true;
755+
else
756+
{
757+
assert(0);// Code should NOT get here. If it does something went wrong.
758+
GetUnicodeString = false;
759+
}
751760

752-
if (!strtype)
761+
union
762+
{ // This union is here for debugging purposes.
763+
wchar_t const* Val_w;
764+
char const* Val_a;
765+
const void* Val;
766+
};
767+
if (GetUnicodeString)
753768
{
754-
value = sql_base::to_wstring((char*)(Val));
769+
Val_w = get(idx, (wchar_t const*)0);
770+
if (Val_w || AllowNullStringReturn)
771+
value = Val_w;
755772
}
756-
else if (strcmp(strtype, "TEXT") == 0 || strncmp("CHARACTER", strtype, 9) == 0 || strncmp("VARYING CHARACTER", strtype, 17) == 0 || strncmp("VARCHAR", strtype, 7) == 0)
757-
value = sql_base::to_wstring((char*)(Val));
758-
else if ( strncmp("NCHAR", strtype, 5) == 0 || strncmp("NVARCHAR", strtype, 8) == 0 || strncmp("NATIVE CHARACTER", strtype, 16) == 0)
759-
value = Val;
760773
else
761774
{
762-
assert(0);// Code should NOT get here. If it does something went wrong.
763-
value = sql_base::to_wstring((char*)(Val)); // Handle it gracefully in release mode.
775+
Val_a = get(idx, (char const*)0);
776+
if (Val_a || AllowNullStringReturn)
777+
value = sql_base::to_wstring(Val_a);
764778
}
765779

766780
return value;

0 commit comments

Comments
 (0)