Skip to content

Commit 521fd85

Browse files
Added GetValues function and required to_tstring functions
1 parent 17e5ca4 commit 521fd85

File tree

2 files changed

+288
-40
lines changed

2 files changed

+288
-40
lines changed

sqlite3pp_ez.cpp

Lines changed: 243 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <vector>
1616
#include <string>
1717
#include <fstream>
18+
#include <iostream>
1819
#include <direct.h>
1920
#include <cassert>
2021
#include <sys/types.h>
@@ -72,41 +73,191 @@ namespace sqlite3pp
7273
return src;
7374
}
7475

75-
#ifdef _UNICODE
76-
std::wstring to_tstring(const std::string &src)
76+
// Convertion types
77+
std::string to_string(const Clob& src)
7778
{
78-
return to_wstring(src);
79+
return std::string(src->data(), src->data() + src->size());
7980
}
80-
std::wstring to_tstring(const std::wstring &src)
81+
82+
std::wstring to_wstring(const Clob& src)
8183
{
82-
return src;
84+
return to_wstring(to_string(src));
8385
}
84-
std::wstring to_tstring(const wchar_t* src)
86+
87+
std::string to_string(const Blob& src)
8588
{
86-
return to_wstring(src);
89+
return std::string(src->data(), src->data() + src->size());
8790
}
88-
std::wstring to_tstring(const char* src)
91+
92+
std::wstring to_wstring(const Blob& src)
8993
{
90-
return to_wstring(src);
94+
return to_wstring(std::string(src->data(), src->data() + src->size()));
9195
}
92-
#else
93-
std::string to_tstring(const std::wstring &src)
96+
97+
std::string to_string(int src)
9498
{
95-
return to_string(src);
99+
return std::to_string(src);
96100
}
97-
std::string to_tstring(const std::string &src)
101+
102+
std::wstring to_wstring(int src)
98103
{
99-
return src;
100-
std::string to_tstring(const wchar_t* src)
104+
return to_wstring(std::to_string(src));
105+
}
106+
107+
std::string to_string(long long int src)
108+
{
109+
return std::to_string(src);
110+
}
111+
112+
std::wstring to_wstring(long long int src)
113+
{
114+
return to_wstring(std::to_string(src));
115+
}
116+
117+
std::string to_string(unsigned long long int src)
118+
{
119+
return std::to_string(src);
120+
}
121+
122+
std::wstring to_wstring(unsigned long long int src)
123+
{
124+
return to_wstring(sqlite3pp::to_string(src));
125+
}
126+
127+
std::string to_string(short int src)
101128
{
102-
return to_string(src);
129+
return std::to_string(src);
103130
}
104-
std::string to_tstring(const char* src)
131+
132+
std::wstring to_wstring(short int src)
105133
{
106-
return to_string(src);
134+
return to_wstring(sqlite3pp::to_string(src));
107135
}
136+
137+
std::string to_string(bool src)
138+
{
139+
return std::to_string((int)src);
108140
}
109-
#endif // _UNICODE
141+
142+
std::wstring to_wstring(bool src)
143+
{
144+
return to_wstring(sqlite3pp::to_string(src));
145+
}
146+
147+
std::string to_string(double src)
148+
{
149+
return std::to_string(src);
150+
}
151+
152+
std::wstring to_wstring(double src)
153+
{
154+
return to_wstring(sqlite3pp::to_string(src));
155+
}
156+
157+
std::string to_string(unsigned char src)
158+
{
159+
return std::to_string((int)src);
160+
}
161+
162+
std::wstring to_wstring(unsigned char src)
163+
{
164+
return to_wstring(sqlite3pp::to_string(src));
165+
}
166+
167+
std::string to_string(const Date& t)
168+
{
169+
if (t.t > 0)
170+
{
171+
char buf[256] = { 0 };
172+
std::tm tm_struct = { 0 };
173+
gmtime_s(&tm_struct, &t.t);
174+
strftime(buf, sizeof(buf), "%Y-%m-%db", &tm_struct);
175+
return buf;
176+
}
177+
return "0000-00-00";
178+
}
179+
180+
std::wstring to_wstring(const Date& src)
181+
{
182+
return to_wstring(sqlite3pp::to_string(src));
183+
}
184+
185+
std::string to_string(const Datetime& t)
186+
{
187+
if (t.tm_struct.tm_mday)
188+
{
189+
char buf[256] = { 0 };
190+
strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", &t.tm_struct);
191+
return buf;
192+
}
193+
return "0000-00-00 00:00:00";
194+
}
195+
196+
std::wstring to_wstring(const Datetime& src)
197+
{
198+
return to_wstring(sqlite3pp::to_string(src));
199+
}
200+
201+
202+
//#ifdef _UNICODE
203+
// std::wstring to_tstring(const std::string &src)
204+
// {
205+
// return to_wstring(src);
206+
// }
207+
// std::wstring to_tstring(const std::wstring &src)
208+
// {
209+
// return src;
210+
// }
211+
// std::wstring to_tstring(const wchar_t* src)
212+
// {
213+
// return to_wstring(src);
214+
// }
215+
// std::wstring to_tstring(const char* src)
216+
// {
217+
// return to_wstring(src);
218+
// }
219+
// std::wstring to_tstring(const Clob& src)
220+
// {
221+
// return to_wstring(to_string(src));
222+
// }
223+
// std::wstring to_tstring(const Blob& src)
224+
// {
225+
// return to_wstring(std::string(src->data(), src->data() + src->size()));
226+
// }
227+
// std::wstring to_tstring(int src)
228+
// {
229+
// return to_wstring(std::to_string(src));
230+
// }
231+
//#else
232+
// std::string to_tstring(const std::wstring &src)
233+
// {
234+
// return to_string(src);
235+
// }
236+
// std::string to_tstring(const std::string &src)
237+
// {
238+
// return src;
239+
// std::string to_tstring(const wchar_t* src)
240+
// {
241+
// return to_string(src);
242+
// }
243+
// std::string to_tstring(const char* src)
244+
// {
245+
// return to_string(src);
246+
// }
247+
// }
248+
// std::string to_tstring(const Clob& src)
249+
// {
250+
// return std::string(src->data(), src->data() + src->size());
251+
// }
252+
// std::string to_tstring(const Blob& src)
253+
// {
254+
// return std::string(src->data(), src->data() + src->size());
255+
// }
256+
// std::string to_tstring(int src)
257+
// {
258+
// return std::to_string(src);
259+
// }
260+
//#endif // _UNICODE
110261

111262
VerbosityLevels sql_base::m_VerbosityLevels = VBLV_ERROR;
112263
void sql_base::SetVerbosityLevel(VerbosityLevels v)
@@ -373,32 +524,86 @@ namespace sqlite3pp
373524
return sql_base::global_db.extended_error_code();
374525
}
375526

376-
bool dir_exists(const std::string& foldername)
527+
bool dir_exists(std::string foldername, bool RepaceEnvVar)
377528
{
529+
if (RepaceEnvVar)
530+
foldername = Get_UpdatedPathCopy(foldername);
378531
struct stat st = { 0 };
379532
stat(foldername.c_str(), &st);
380533
return st.st_mode & S_IFDIR;
381534
}
382535

383-
bool dir_exists(const std::wstring& foldername)
536+
bool dir_exists(std::wstring foldername, bool RepaceEnvVar)
384537
{
538+
if (RepaceEnvVar)
539+
foldername = Get_UpdatedPathCopy(foldername);
385540
struct _stat st = { 0 };
386541
_wstat(foldername.c_str(), &st);
387542
return st.st_mode & S_IFDIR;
388543
}
389544

390-
bool file_exists(const std::string &filename)
545+
bool file_exists(std::string filename, bool RepaceEnvVar)
391546
{
547+
if (RepaceEnvVar)
548+
filename = Get_UpdatedPathCopy(filename);
392549
struct stat st = { 0 };
393550
return (stat(filename.c_str(), &st) == 0);
394551
}
395552

396-
bool file_exists(const std::wstring &filename)
553+
bool file_exists(std::wstring filename, bool RepaceEnvVar)
397554
{
555+
if (RepaceEnvVar)
556+
filename = Get_UpdatedPathCopy(filename);
398557
struct _stat st = { 0 };
399558
return (_wstat(filename.c_str(), &st) == 0);
400559
}
401560

561+
bool copy_file(std::wstring Src, std::wstring Dest, bool OverWriteIfExist)
562+
{
563+
Src = Get_UpdatedPathCopy(Src);
564+
Dest = Get_UpdatedPathCopy(Dest);
565+
if (file_exists(Dest))
566+
{
567+
if (OverWriteIfExist)
568+
{
569+
if (!DeleteFileW(Dest.c_str()))
570+
return false;
571+
}
572+
else
573+
return false;
574+
}
575+
576+
bool RetrnVal = false;
577+
std::ofstream outfile(Dest.c_str(), std::ios::out | std::ios::binary);
578+
if (outfile.is_open())
579+
{
580+
std::ifstream is(Src.c_str(), std::ios::in | std::ios::binary);
581+
if (is.is_open())
582+
{
583+
is.seekg(0, is.end);
584+
const std::streamoff length = is.tellg();
585+
is.seekg(0, is.beg);
586+
char *buffer = new char[static_cast<size_t>(length) + 1]();
587+
if (buffer)
588+
{
589+
is.read(buffer, length);
590+
outfile.write(buffer, length);
591+
delete[] buffer;
592+
RetrnVal = true;
593+
}
594+
is.close();
595+
}
596+
outfile.close();
597+
}
598+
599+
return RetrnVal;
600+
}
601+
602+
bool copy_file(std::string Src, std::string Dest, bool OverWriteIfExist)
603+
{
604+
return copy_file(to_wstring(Src), to_wstring(Dest), OverWriteIfExist);
605+
}
606+
402607
void replace_all(std::wstring & data, const std::wstring &toSearch, const std::wstring &replaceStr)
403608
{
404609
// Get the first occurrence
@@ -773,10 +978,10 @@ namespace sqlite3pp
773978
////////////////////////////////////////////////////////////////////////////////////////////
774979
// SQLiteClassBuilder Predefines.
775980
// Predefined string options
776-
const StrOptions SQLiteClassBuilder::strOpt_std_string = { "std::string", "", "", "#include <string>" };
777-
const StrOptions SQLiteClassBuilder::strOpt_std_wstring = { "std::wstring", "L", "", "#include <string>" };
778-
const StrOptions SQLiteClassBuilder::strOpt_sql_tstring = { "sqlite3pp::tstring", "T_(", ")", "#include \"sqlite3pp_ez.h\"" };
779-
const StrOptions SQLiteClassBuilder::strOpt_sql_tstring_T = { "sqlite3pp::tstring", "_T(", ")", "#include \"sqlite3pp_ez.h\"" };
981+
const StrOptions SQLiteClassBuilder::strOpt_std_string = { "std::string", "sqlite3pp::to_string", "", "", "#include <string>" };
982+
const StrOptions SQLiteClassBuilder::strOpt_std_wstring = { "std::wstring", "sqlite3pp::to_wstring", "L", "", "#include <string>" };
983+
const StrOptions SQLiteClassBuilder::strOpt_sql_tstring = { "sqlite3pp::tstring", "sqlite3pp::to_tstring", "T_(", ")", "#include \"sqlite3pp_ez.h\"" };
984+
const StrOptions SQLiteClassBuilder::strOpt_sql_tstring_T = { "sqlite3pp::tstring", "sqlite3pp::to_tstring", "_T(", ")", "#include \"sqlite3pp_ez.h\"" };
780985
// Predefined MiscOptions for common settings
781986
const MiscOptions SQLiteClassBuilder::MiscOpt_max = { ",", false, false, false, false, false, false, false, false, false };
782987
const MiscOptions SQLiteClassBuilder::MiscOpt_min = { ",", true, true, true, true, true, false, false, true, true };
@@ -1165,6 +1370,17 @@ namespace sqlite3pp
11651370
myfile << c.second << "\\\"" << c.first << "\\\"";
11661371
myfile << "\"" << m_options.s.str_post << "; }" << std::endl;
11671372

1373+
// Create GetValues member function. Needed for sqlite3pp::Table template class
1374+
myfile << "\tStrType GetValues() const\n\t{\n\t\tStrType strtype;";
1375+
std::string commaDel;
1376+
for (auto c : columns)
1377+
{
1378+
myfile << "\n\t\tstrtype += " << m_options.s.str_pre << "\"" << commaDel << "'\"" << m_options.s.str_post
1379+
<< " + " << m_options.s.str_tostr << "( " << c.first << ") + " << m_options.s.str_pre << "\"'\"" << m_options.s.str_post << ";";
1380+
commaDel = ",";
1381+
}
1382+
myfile << "\n\t\treturn strtype;\n\t}" << std::endl;
1383+
11681384
// Create getStreamData member function. Needed for sqlite3pp::Table template class
11691385
myfile << "\ttemplate<class T> void getStreamData( T q ) { q.getter() ";
11701386
for (auto c : columns)

0 commit comments

Comments
 (0)