@@ -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].\n Sqlite3pp_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