diff --git a/autotest/BiVector/BiVector.cpp b/autotest/BiVector/BiVector.cpp new file mode 100644 index 000000000..eec670102 --- /dev/null +++ b/autotest/BiVector/BiVector.cpp @@ -0,0 +1,51 @@ +#include + +using namespace Upp; + +#ifdef flagAUTOTEST +#define N 100000000 +#else +#define N 5000000 +#endif + +CONSOLE_APP_MAIN +{ + Vector x; + BiVector y; + for(int i = 0; i < N; i++) { + if(i % 10000 == 0) + Cout() << i << ' ' << x.GetCount() << '\n'; + switch(rand() % 6) { + case 0: + case 1: + x.Add(i); + y.AddTail(i); + break; + case 2: + case 3: + x.Insert(0, i); + y.AddHead(i); + break; + case 4: + if(x.GetCount()) { + x.Drop(); + y.DropTail(); + } + break; + case 5: + if(x.GetCount()) { + x.Remove(0, 1); + y.DropHead(); + } + break; + } + ASSERT(x.GetCount() == y.GetCount()); + for(int i = 0; i < x.GetCount(); i++) + ASSERT(x[i] == y[i]); + if(x.GetCount() > 10000) { + x.Clear(); + y.Clear(); + } + } + LOG("========== OK"); +} diff --git a/autotest/BiVector/BiVector.upp b/autotest/BiVector/BiVector.upp new file mode 100644 index 000000000..0c1b3e76f --- /dev/null +++ b/autotest/BiVector/BiVector.upp @@ -0,0 +1,10 @@ +uses + Core; + +file + BiVector.cpp; + +mainconfig + "" = "", + "" = "AUTOTEST"; + diff --git a/autotest/BiVector/init b/autotest/BiVector/init new file mode 100644 index 000000000..935d6c7ab --- /dev/null +++ b/autotest/BiVector/init @@ -0,0 +1,4 @@ +#ifndef _BiVector_icpp_init_stub +#define _BiVector_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/CParser/CParser.upp b/autotest/CParser/CParser.upp new file mode 100644 index 000000000..ee38c045f --- /dev/null +++ b/autotest/CParser/CParser.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + main.cpp; + +mainconfig + "" = ""; + diff --git a/autotest/CParser/init b/autotest/CParser/init new file mode 100644 index 000000000..e04b875c6 --- /dev/null +++ b/autotest/CParser/init @@ -0,0 +1,4 @@ +#ifndef _CParser_icpp_init_stub +#define _CParser_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/CParser/main.cpp b/autotest/CParser/main.cpp new file mode 100644 index 000000000..77f895f87 --- /dev/null +++ b/autotest/CParser/main.cpp @@ -0,0 +1,60 @@ +#include + +using namespace Upp; + +#define CHECK_OVERFLOW(s, method, overflow) \ +{ \ + DLOG(s << ' ' << #method); \ + bool isoverflow = false; \ + try { \ + CParser p(s); \ + DDUMP(p.method); \ + } \ + catch(CParser::Error e) { \ + DLOG("Overflow: " << e); \ + isoverflow = true; \ + } \ + ASSERT(isoverflow == overflow); \ +} + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_FILE|LOG_COUT); + + CParser p("i if while 12345 alfa"); + ASSERT(p.Id("i")); + ASSERT(p.Id("if")); + ASSERT(p.Id("while")); + ASSERT(p.IsInt()); + ASSERT(p.ReadInt() == 12345); + ASSERT(p.IsId()); + ASSERT(p.ReadId() == "alfa"); + + CHECK_OVERFLOW("2147483647", ReadInt(), false); + CHECK_OVERFLOW("2147483648", ReadInt(), true); + + CHECK_OVERFLOW("-2147483648", ReadInt(), false); + CHECK_OVERFLOW("-2147483649", ReadInt(), true); + + CHECK_OVERFLOW("ffffffff", ReadNumber(16), false); + CHECK_OVERFLOW("100000000", ReadNumber(16), true); + + CHECK_OVERFLOW("9223372036854775807", ReadInt64(), false); + CHECK_OVERFLOW("9223372036854775808", ReadInt64(), true); + + CHECK_OVERFLOW("-9223372036854775808", ReadInt64(), false); + CHECK_OVERFLOW("-9223372036854775809", ReadInt64(), true); + + CHECK_OVERFLOW("ffffffffffffffff", ReadNumber64(16), false); + CHECK_OVERFLOW("10000000000000000", ReadNumber64(16), true); + + DDUMP(1 * pow(10.0, 500)); + + CHECK_OVERFLOW("1e300", ReadDouble(), false); + CHECK_OVERFLOW("1e500", ReadDouble(), true); + CHECK_OVERFLOW("-1e300", ReadDouble(), false); + CHECK_OVERFLOW("-1e500", ReadDouble(), true); + CHECK_OVERFLOW(String('0', 500), ReadDouble(), true); + + LOG("=========== OK"); +} diff --git a/autotest/CParserWspc/CParserWspc.cpp b/autotest/CParserWspc/CParserWspc.cpp new file mode 100644 index 000000000..7aa5fe16c --- /dev/null +++ b/autotest/CParserWspc/CParserWspc.cpp @@ -0,0 +1,22 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + + CParser p(" someid $$ and"); + LOG("GetPtr: " << AsCString(p.GetPtr())); + LOG("GetSpacePtr: " << AsCString(p.GetSpacePtr())); + p.Id("someid"); + LOG("GetPtr: " << AsCString(p.GetPtr())); + LOG("GetSpacePtr: " << AsCString(p.GetSpacePtr())); + p.Char('$'); + LOG("GetPtr: " << AsCString(p.GetPtr())); + LOG("GetSpacePtr: " << AsCString(p.GetSpacePtr())); + p.Char('$'); + LOG("GetPtr: " << AsCString(p.GetPtr())); + LOG("GetSpacePtr: " << AsCString(p.GetSpacePtr())); + LOG("========== OK"); +} diff --git a/autotest/CParserWspc/CParserWspc.upp b/autotest/CParserWspc/CParserWspc.upp new file mode 100644 index 000000000..11d2ba3fb --- /dev/null +++ b/autotest/CParserWspc/CParserWspc.upp @@ -0,0 +1,11 @@ +description "Test of CParser::GetWhitespacePtr\377"; + +uses + Core; + +file + CParserWspc.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/CParserWspc/init b/autotest/CParserWspc/init new file mode 100644 index 000000000..0965dd495 --- /dev/null +++ b/autotest/CParserWspc/init @@ -0,0 +1,4 @@ +#ifndef _CParserWspc_icpp_init_stub +#define _CParserWspc_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/CVariable/CVariable.cpp b/autotest/CVariable/CVariable.cpp new file mode 100644 index 000000000..a5b20d4b4 --- /dev/null +++ b/autotest/CVariable/CVariable.cpp @@ -0,0 +1,43 @@ +#include + +using namespace Upp; + +ConditionVariable cv; +Mutex mtx; +int count; +bool texit; + +void WorkThread() +{ + for(;;) { + Mutex::Lock __(mtx); + LOG("Before wait"); + if(texit) break; + cv.Wait(mtx); + LOG("After wait"); + if(texit) break; + count++; + } + LOG("Exiting work thread"); +} + +CONSOLE_APP_MAIN +{ + Thread t[10]; + for(int i = 0; i < 10; i++) + t[i].Run(callback(WorkThread)); + for(int i = 0; i < 1000; i++) { + Mutex::Lock __(mtx); + cv.Signal(); + } + { + Mutex::Lock __(mtx); + texit = true; + } + texit = true; + cv.Broadcast(); + for(int i = 0; i < 10; i++) + t[i].Wait(); + LOG(count); + LOG("======== OK"); +} diff --git a/autotest/CVariable/CVariable.upp b/autotest/CVariable/CVariable.upp new file mode 100644 index 000000000..31d5c3629 --- /dev/null +++ b/autotest/CVariable/CVariable.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + CVariable.cpp; + +mainconfig + "" = "MT"; + diff --git a/autotest/CVariable/init b/autotest/CVariable/init new file mode 100644 index 000000000..2f4bb85e3 --- /dev/null +++ b/autotest/CVariable/init @@ -0,0 +1,4 @@ +#ifndef _CVariable_icpp_init_stub +#define _CVariable_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/CallbackLambda/CallbackLambda.cpp b/autotest/CallbackLambda/CallbackLambda.cpp new file mode 100644 index 000000000..20a28281c --- /dev/null +++ b/autotest/CallbackLambda/CallbackLambda.cpp @@ -0,0 +1,84 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ +#ifdef CPP_11 + StdLogSetup(LOG_COUT|LOG_FILE); + int a = 0; + + { + Callback cb; + cb = [&] { a = 1; LOG("Callback"); }; + cb(); + ASSERT(a == 1); + } + + { + Callback1 cb; + cb = [&](int b) { a = b; LOG("Callback1"); }; + cb(123); + ASSERT(a == 123); + } + + { + Callback2 cb; + cb = [&](int b, int c) { a = b + c; LOG("Callback2"); }; + cb(1, 20); + ASSERT(a == 21); + } + + { + Callback3 cb; + cb = [&](int b, int c, int d) { a = b + c + d; LOG("Callback3"); }; + cb(1, 20, 300); + ASSERT(a == 321); + } + + { + Callback4 cb; + cb = [&](int b, int c, int d, int e) { a = b + c + d + e; LOG("Callback4"); }; + cb(1, 20, 300, 4000); + ASSERT(a == 4321); + } + + { + Gate cb; + cb = [&] { a = 1; LOG("Gate"); return true; }; + ASSERT(cb()); + ASSERT(a == 1); + } + + { + Gate1 cb; + cb = [&](int b) { a = b; LOG("Gate1"); return false; }; + ASSERT(!cb(123)); + ASSERT(a == 123); + } + + { + Gate2 cb; + cb = [&](int b, int c) { a = b + c; LOG("Gate2"); return true; }; + ASSERT(cb(1, 20)); + ASSERT(a == 21); + } + + { + Gate3 cb; + cb = [&](int b, int c, int d) { a = b + c + d; LOG("Gate3"); return true; }; + ASSERT(cb(1, 20, 300)); + ASSERT(a == 321); + } + + { + Gate4 cb; + cb = [&](int b, int c, int d, int e) { a = b + c + d + e; LOG("Gate4"); return true; }; + ASSERT(cb(1, 20, 300, 4000)); + ASSERT(a == 4321); + } + + LOG("========== OK"); +#endif +} + diff --git a/autotest/CallbackLambda/CallbackLambda.upp b/autotest/CallbackLambda/CallbackLambda.upp new file mode 100644 index 000000000..def6f8e31 --- /dev/null +++ b/autotest/CallbackLambda/CallbackLambda.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + CallbackLambda.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/CallbackLambda/init b/autotest/CallbackLambda/init new file mode 100644 index 000000000..bdc09d51f --- /dev/null +++ b/autotest/CallbackLambda/init @@ -0,0 +1,4 @@ +#ifndef _CallbackLambda_icpp_init_stub +#define _CallbackLambda_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/CompareContainer/CompareContainer.cpp b/autotest/CompareContainer/CompareContainer.cpp new file mode 100644 index 000000000..8ab17929d --- /dev/null +++ b/autotest/CompareContainer/CompareContainer.cpp @@ -0,0 +1,107 @@ +#include + +using namespace Upp; + +template +void CompareArray() +{ + T a; + a.Add(1); + a.Add(2); + T b = clone(a); + ASSERT(a == b); + b.At(1) = 3; + ASSERT(a != b); + ASSERT(b > a); + + b = clone(a); + b.Add(10); + ASSERT(a != b); + ASSERT(b > a); +} + +template +void CompareBiArray() +{ + T a; + a.AddTail(1); + a.AddTail(2); + T b = clone(a); + ASSERT(a == b); + b[1] = 3; + ASSERT(a != b); + ASSERT(b > a); + + b = clone(a); + b.AddTail(10); + ASSERT(a != b); + ASSERT(b > a); +} + +template +void CompareIndex() +{ + T a; + a.Add(1); + a.Add(2); + T b = clone(a); + ASSERT(a == b); + b.Add(3); + ASSERT(a != b); + ASSERT(b > a); + b.Clear(); + b.Add(1); + b.Add(3); + ASSERT(a != b); + ASSERT(b > a); +} + +template +void CompareMap() +{ + T a; + a.Add(1, 2); + a.Add(3, 4); + + T b = clone(a); + + ASSERT(a == b); + b.Add(4, 4); + ASSERT(a != b); + ASSERT(b > a); + + b.Clear(); + b.Add(2, 2); + b.Add(3, 4); + ASSERT(b > a); + + b.Clear(); + b.Add(1, 2); + b.Add(3, 5); + ASSERT(b > a); +} + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + + CompareArray< Vector >(); + CompareArray< Array >(); + CompareArray< InVector >(); + CompareArray< InArray >(); + + CompareBiArray< BiVector >(); + CompareBiArray< BiArray >(); + + CompareIndex< Index >(); + CompareIndex< ArrayIndex >(); + CompareIndex< SortedIndex >(); + + CompareMap >(); + CompareMap >(); + + CompareMap >(); + CompareMap >(); + + LOG("===== OK"); +} diff --git a/autotest/CompareContainer/CompareContainer.upp b/autotest/CompareContainer/CompareContainer.upp new file mode 100644 index 000000000..acc0f5b68 --- /dev/null +++ b/autotest/CompareContainer/CompareContainer.upp @@ -0,0 +1,11 @@ +description "Comparison for containers\377"; + +uses + Core; + +file + CompareContainer.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/CompareContainer/init b/autotest/CompareContainer/init new file mode 100644 index 000000000..99fce0aed --- /dev/null +++ b/autotest/CompareContainer/init @@ -0,0 +1,4 @@ +#ifndef _CompareContainer_icpp_init_stub +#define _CompareContainer_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/ConsoleExit/ConsoleExit.cpp b/autotest/ConsoleExit/ConsoleExit.cpp new file mode 100644 index 000000000..ea1cc8fea --- /dev/null +++ b/autotest/ConsoleExit/ConsoleExit.cpp @@ -0,0 +1,12 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + LOG("Hello!"); + Buffer x(200); + Exit(0); + LOG("Control should never reach here..."); + NEVER(); +} diff --git a/autotest/fail_assert/fail_assert.upp b/autotest/ConsoleExit/ConsoleExit.upp similarity index 71% rename from autotest/fail_assert/fail_assert.upp rename to autotest/ConsoleExit/ConsoleExit.upp index ab48fb094..e163aa22b 100644 --- a/autotest/fail_assert/fail_assert.upp +++ b/autotest/ConsoleExit/ConsoleExit.upp @@ -2,7 +2,7 @@ uses Core; file - fail_assert.cpp; + ConsoleExit.cpp; mainconfig "" = "SSE2"; diff --git a/autotest/ConsoleExit/init b/autotest/ConsoleExit/init new file mode 100644 index 000000000..180186e10 --- /dev/null +++ b/autotest/ConsoleExit/init @@ -0,0 +1,4 @@ +#ifndef _ConsoleExit_icpp_init_stub +#define _ConsoleExit_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/Convert/Convert.cpp b/autotest/Convert/Convert.cpp new file mode 100644 index 000000000..2f135c5ac --- /dev/null +++ b/autotest/Convert/Convert.cpp @@ -0,0 +1,37 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_FILE|LOG_COUT); + + SetLanguage(LNG_('C','S','C','Z')); + + ConvertTime cv; + + DUMP(cv.Format(Date(2013, 1, 2))); + ASSERT(cv.Format(Date(2013, 1, 2)) == "02.01.2013"); + + DUMP(cv.Format(Time(2013, 1, 2))); + ASSERT(cv.Format(Time(2013, 1, 2)) == "02.01.2013"); + + DUMP(cv.Format(Time(2013, 1, 2, 11, 12, 13))); + ASSERT(cv.Format(Time(2013, 1, 2, 11, 12, 13)) == "02.01.2013 11:12:13"); + + cv.TimeAlways(); + + DUMP(cv.Format(Date(2013, 1, 2))); + ASSERT(cv.Format(Date(2013, 1, 2)) == "02.01.2013 00:00:00"); + + DUMP(cv.Format(Time(2013, 1, 2, 11, 12, 13))); + ASSERT(cv.Format(Time(2013, 1, 2, 11, 12, 13)) == "02.01.2013 11:12:13"); + + DUMP(cv.Scan("15.6.2010")); + ASSERT(cv.Scan("15.6.2010") == Time(2010, 6, 15, 0, 0, 0)); + + cv.DayEnd(); + + DUMP(cv.Scan("15.6.2010")); + ASSERT(cv.Scan("15.6.2010") == Time(2010, 6, 15, 23, 59, 59)); +} diff --git a/autotest/timeout/timeout.upp b/autotest/Convert/Convert.upp similarity index 76% rename from autotest/timeout/timeout.upp rename to autotest/Convert/Convert.upp index 8b9803122..b13841e55 100644 --- a/autotest/timeout/timeout.upp +++ b/autotest/Convert/Convert.upp @@ -2,7 +2,7 @@ uses Core; file - timeout.cpp; + Convert.cpp; mainconfig "" = "SSE2"; diff --git a/autotest/Convert/init b/autotest/Convert/init new file mode 100644 index 000000000..f1027a1ef --- /dev/null +++ b/autotest/Convert/init @@ -0,0 +1,4 @@ +#ifndef _Convert_icpp_init_stub +#define _Convert_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/ConvertOverflow/ConvertOverflow.cpp b/autotest/ConvertOverflow/ConvertOverflow.cpp new file mode 100644 index 000000000..4b3ce60de --- /dev/null +++ b/autotest/ConvertOverflow/ConvertOverflow.cpp @@ -0,0 +1,16 @@ +#include + +using namespace Upp; + +#define CHECK_OVERFLOW(s, cls, overflow) { cls x; Value v = x.Scan(s); LOG(s << " -> " << v); ASSERT(v.IsError() == overflow); } + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_FILE|LOG_COUT); + + CHECK_OVERFLOW("2147483647", ConvertInt, false); + CHECK_OVERFLOW("2147483648", ConvertInt, true); + + CHECK_OVERFLOW("-2147483647", ConvertInt, false); + CHECK_OVERFLOW("-2147483648", ConvertInt, true); +} diff --git a/autotest/ConvertOverflow/ConvertOverflow.upp b/autotest/ConvertOverflow/ConvertOverflow.upp new file mode 100644 index 000000000..df590d9cb --- /dev/null +++ b/autotest/ConvertOverflow/ConvertOverflow.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + ConvertOverflow.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/ConvertOverflow/init b/autotest/ConvertOverflow/init new file mode 100644 index 000000000..3de67254d --- /dev/null +++ b/autotest/ConvertOverflow/init @@ -0,0 +1,4 @@ +#ifndef _ConvertOverflow_icpp_init_stub +#define _ConvertOverflow_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/Core11/Core11.cpp b/autotest/Core11/Core11.cpp new file mode 100644 index 000000000..23f26bd26 --- /dev/null +++ b/autotest/Core11/Core11.cpp @@ -0,0 +1,183 @@ +#include + +using namespace Upp; + +template +void TestTransfer() +{ + T a, b; + a = pick(b); + ASSERT(b.IsPicked()); + ASSERT(!a.IsPicked()); + + b = clone(a); + ASSERT(!b.IsPicked()); + ASSERT(!a.IsPicked()); + + T c = pick(b); + T d = clone(c); + + Swap(c, d); +} + +template +void TestTransfers() +{ + TestTransfer< Vector >(); + TestTransfer< Array >(); + TestTransfer< Index >(); + TestTransfer< ArrayIndex >(); + TestTransfer< VectorMap >(); + TestTransfer< ArrayMap >(); + + TestTransfer< FixedVectorMap >(); + TestTransfer< FixedArrayMap >(); + + TestTransfer< InVector >(); + TestTransfer< InArray >(); + TestTransfer< SortedIndex >(); + TestTransfer< SortedVectorMap >(); + TestTransfer< SortedArrayMap >(); +} + +template +void TestInMap() +{ + InMap m; + + m.Add(1, "hello"); + ASSERT(m.GetCount() == 1); + ASSERT(m[0] == "hello"); + ASSERT(m.Get(1) == "hello"); + + m.Add(2, "world"); + ASSERT(m.GetCount() == 2); + ASSERT(m[0] == "hello"); + ASSERT(m[1] == "world"); + ASSERT(m.Get(1) == "hello"); + ASSERT(m.Get(2) == "world"); + + ASSERT(m.FindAdd(1) == 0); + ASSERT(m.FindAdd(2) == 1); + ASSERT(m.FindAdd(3) == 2); + + ASSERT(m.FindAdd(0) == 0); + + ASSERT(m.FindAdd(4, "four") == 4); + ASSERT(m.GetCount() == 5); + + ASSERT(m[4] == "four"); + + ASSERT(m.GetAdd(3) == ""); + ASSERT(m.GetAdd(2) == "world"); + ASSERT(m.GetAdd(5) == ""); + ASSERT(m.GetCount() == 6); + + m.GetAdd(6) = "six"; + ASSERT(m.GetCount() == 7); + ASSERT(m.Get(6) == "six"); + + m.GetAdd(7, "seven"); + ASSERT(m[7] == "seven"); + ASSERT(m.Get(7) == "seven"); + + ASSERT(m.Get(8, "no") == "no"); + + ASSERT(m.FindPtr(99) == NULL); + ASSERT(*m.FindPtr(7) == "seven"); + + m.Shrink(); + + InMap h; + h.Add(1, "1"); + ASSERT(h.GetCount() == 1); + h.Clear(); + ASSERT(h.GetCount() == 0); + + const Val& vv = m.GetValues(); + ASSERT(vv.GetCount() == vv.GetCount()); + ASSERT(vv[7] == "seven"); + + InMap mm = pick(m); + ASSERT(m.IsPicked()); + ASSERT(!mm.IsPicked()); + + m = clone(mm); + ASSERT(!m.IsPicked()); + ASSERT(!mm.IsPicked()); + + mm = pick(m); + m = pick(mm); + mm.Clear(); + + mm.Swap(m); + m.Swap(mm); + + ASSERT(mm.IsEmpty()); + ASSERT(mm.GetCount() == 0); + ASSERT(!m.IsPicked()); + ASSERT(!mm.IsPicked()); + + ASSERT(m.FindLowerBound(6) == 6); + ASSERT(m.FindUpperBound(6) == 7); + ASSERT(m.Find(6) == 6); + + m.Add(6, "another six"); + ASSERT(m.GetCount() == 9); + ASSERT(m.FindNext(6) == 7); + ASSERT(m.FindLast(6) == 7); + ASSERT(m.FindPrev(7) == 6); + + ASSERT(m.GetKey(7) == 6); + + m.Remove(0); + ASSERT(m.GetCount() == 8); + m.RemoveKey(6); + ASSERT(m.GetCount() == 6); + m.Remove(1, 2); + ASSERT(m.GetCount() == 4); +} + +struct HasClone : MoveableAndDeepCopyOption { + Vector a; + +#ifdef CPP_11 + HasClone(HasClone rval_ x) = default; + HasClone& operator=(HasClone rval_ x) = default; +#endif + HasClone(const HasClone& x, int) : a(x.a, 0) {} + HasClone() {} +}; + +struct NoClone : Moveable { + Vector a; +}; + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + + TestTransfers(); + TestTransfers(); + TestTransfers(); + + TestInMap< SortedVectorMap, InVector >(); + TestInMap< SortedArrayMap, InArray >(); + + SortedArrayMap x; + x.Create(1).a.Add(1); + + { + SortedVectorMap mm; + mm.GetAdd(1).a.Add(12); + mm.GetAdd(1).a.Add(13); + } + + { + SortedVectorMap mm; + mm.GetAdd(1).a.Add(12); + mm.GetAdd(1).a.Add(13); + } + + LOG("=========== OK"); +} diff --git a/autotest/Core11/Core11.upp b/autotest/Core11/Core11.upp new file mode 100644 index 000000000..6d7b2396a --- /dev/null +++ b/autotest/Core11/Core11.upp @@ -0,0 +1,11 @@ +description "Core tests for C+11\377"; + +uses + Core; + +file + Core11.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/Core11/init b/autotest/Core11/init new file mode 100644 index 000000000..d4f925c9b --- /dev/null +++ b/autotest/Core11/init @@ -0,0 +1,4 @@ +#ifndef _Core11_icpp_init_stub +#define _Core11_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/DateTime/DateTime.cpp b/autotest/DateTime/DateTime.cpp new file mode 100644 index 000000000..b56ca5576 --- /dev/null +++ b/autotest/DateTime/DateTime.cpp @@ -0,0 +1,15 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN { + StdLogSetup(LOG_FILE|LOG_COUT); + + for(int i = 0; i < 30000; i++) { + Date d = Date(1970, 1, 1) + i; + int64 n = GetUTCSeconds(ToTime(d)); +// DLOG(d << ' ' << GetLeapSeconds(d) << ' ' << n); + ASSERT(TimeFromUTC(n) == ToTime(d)); + } + LOG("=========== OK"); +} diff --git a/autotest/DateTime/DateTime.upp b/autotest/DateTime/DateTime.upp new file mode 100644 index 000000000..6f5823289 --- /dev/null +++ b/autotest/DateTime/DateTime.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + DateTime.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/DateTime/init b/autotest/DateTime/init new file mode 100644 index 000000000..04b4e1259 --- /dev/null +++ b/autotest/DateTime/init @@ -0,0 +1,4 @@ +#ifndef _DateTime_icpp_init_stub +#define _DateTime_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/FileOutLocking/FileOutLocking.cpp b/autotest/FileOutLocking/FileOutLocking.cpp new file mode 100644 index 000000000..992d04785 --- /dev/null +++ b/autotest/FileOutLocking/FileOutLocking.cpp @@ -0,0 +1,18 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + for(;;) { + Cout() << "Press ENTER to open FileOut\n"; + ReadStdIn(); + FileOut out(ConfigFile("testfile")); + if(out) { + Cout() << "file opened\nPress ENTER to close\n"; + ReadStdIn(); + } + else + Cout() << "NOT opened\n"; + } +} diff --git a/autotest/FileOutLocking/FileOutLocking.upp b/autotest/FileOutLocking/FileOutLocking.upp new file mode 100644 index 000000000..c38fc0d84 --- /dev/null +++ b/autotest/FileOutLocking/FileOutLocking.upp @@ -0,0 +1,11 @@ +description "Testing the locking of FileOut\377"; + +uses + Core; + +file + FileOutLocking.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/FileOutLocking/init b/autotest/FileOutLocking/init new file mode 100644 index 000000000..f5c1c22da --- /dev/null +++ b/autotest/FileOutLocking/init @@ -0,0 +1,4 @@ +#ifndef _FileOutLocking_icpp_init_stub +#define _FileOutLocking_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/FileStream/FileStream.cpp b/autotest/FileStream/FileStream.cpp new file mode 100644 index 000000000..c3fac87e3 --- /dev/null +++ b/autotest/FileStream/FileStream.cpp @@ -0,0 +1,176 @@ +#include + +using namespace Upp; + +void PosOverrunTest() +{ + String tmpfile = GetTempFileName("pos"); + FileOut fo; + if(!fo.Open(tmpfile)) { + Cout() << "PosOverrunTest: error creating file " << tmpfile << "\n"; + return; + } + for(int i = 0; i < 0x10000; i++) + fo.PutIW(i); + int64 size = fo.GetSize(); + fo.Close(); + if(fo.IsError() || size != 0x20000) { + Cout() << "PosOverrunTest generator error, file " << tmpfile << "\n"; + return; + } + FileIn fi; + fi.SetBufferSize(4096); + if(!fi.Open(tmpfile)) { + Cout() << "PosOverrunTest: error reopening temporary file " << tmpfile << "\n"; + return; + } + for(int i = 0; i < 4096; i++) + fi.Get(); + char buffer[32]; + fi.GetAll(buffer, 32); + bool ok = true; + for(int i = 0; i < 16; i++) { + int strmval = Peek16le(buffer + 2 * i); + int expect = 2048 + i; + if(strmval != expect) { + Cout() << "PosOverrunTest: " << FormatIntHex(expect, 4) << " expected, " << FormatIntHex(strmval, 4) << " found\n"; + ok = false; + } + } + if(ok) + Cout() << "PosOverrunTest: finished without errors\n"; +} + +enum { + T_READ = 1, + T_READGROUP = 2, + T_WRITE = 4, + T_WRITEGROUP = 8, + T_SEEK = 16 +}; + +String Copy(Stream& s, int spos, int ssize, int tpos, dword style) { + bool lf = dynamic_cast(&s); + if(lf) LOG("<<"); + if(style & T_SEEK) + s.Seek(spos); + Buffer b(ssize); + int sz = 0; + if(style & T_READ) + if(style & T_READGROUP) { + while(sz < ssize) { + int c = s.Get(); + if(c < 0) + break; + b[sz++] = c; + } + ssize = sz; + } + else + ssize = (int)s.Get(b, ssize); + if(lf) LOG(">>"); + if(style & T_SEEK) + s.Seek(tpos); + if(style & T_WRITE) + if(style & T_WRITEGROUP) + for(int i = 0; i < ssize; i++) + s.Put(b[i]); + else + s.Put(b, ssize); + if(style & T_READ) + return String(b, ssize); + return Null; +} + +String InFile() { return GetDataFile("FileStream.cpp"); } + +void StreamTest() { + FileIn in(InFile()); + FileOut out(ConfigFile("chips1.cpp")); + for(;;) { + int c = in.Get(); + if(c < 0) + break; + out.Put(c); + } + + in.Seek(300); + out.Seek(300); + for(int i = 0; i < 2000; i++) + out.Put(in.Get()); + out.SetBufferSize(8); + out.Seek(0); + + LOG("================================================"); + StringStream ss(LoadFile(InFile())); + int nn = 0; + dword style = 0; + while(nn < 100000000) { + if(++nn % 1000 == 0) + Cout() << "ops: " << nn << ", len: " << ss.GetSize() + << ", buffersize: " << out.GetBufferSize() << "\n"; + if(ss.GetSize() > 256*1024) { + int sz = (rand() % 1000) * 100; + ss.SetSize(sz); + out.SetSize(sz); + LOG("Adjusted size: " << ss.GetSize()); + } + if(ss.GetSize() != out.GetSize()) { + DUMP(ss.GetSize()); + DUMP(out.GetSize()); + Panic("SIZE MISMATCH!"); + return; + } + if((rand() & 255) == 0) + { + int64 p = out.GetPos(); + out.Seek(0); + if(ss.GetResult() != LoadStream(out)) { + out.Seek(0); + SaveFile(ConfigFile("f1.txt"), LoadStream(out)); + SaveFile(ConfigFile("f2.txt"), ss.GetResult()); + Panic("CONTENT INEQUAL!"); + return; + } + out.Seek(p); + } + int spos = ss.GetSize() ? rand() % (int)ss.GetSize() : 0; + int ssize = rand() % (out.GetBufferSize() * 7); + int tpos = ss.GetSize() ? MAKELONG(rand(), rand()) % (int)ss.GetSize() : 0; + if((rand() & 3) == 0) + tpos = minmax(spos - (rand() & 63) + 32, 0, (int)out.GetSize()); + if((rand() & 3) == 0) + ssize = rand() % (3 * out.GetBufferSize()); + if((rand() & 4091) == 0) { + style++; + Cout() << "MODE: " << style << "\n"; + } + LOG("---------------------"); + LOG("spos: " << spos << " ssize: " << ssize << " tpos: " << tpos << " style: " << style); +// DUMP(ss.GetSize()); +// DUMP(out.GetSize()); + String a = Copy(out, spos, ssize, tpos, style); + String b = Copy(ss, spos, ssize, tpos, style); +// DUMP(ss.GetSize()); +// DUMP(out.GetSize()); + if((rand() & 1023) == 0) + out.SetBufferSize((rand() & 127) + 2); + if(a != b) { + SaveFile(ConfigFile("f1c.txt"), a); + SaveFile(ConfigFile("f2c.txt"), b); + out.Seek(0); + SaveFile(ConfigFile("f1.txt"), LoadStream(out)); + SaveFile(ConfigFile("f2.txt"), ss.GetResult()); + DUMP(ss.GetSize()); + Panic("INEQUAL READ IN COPY!"); + return; + } + } +} + +CONSOLE_APP_MAIN +{ +// DataBase::FullTest(); + PosOverrunTest(); + StreamTest(); +} diff --git a/autotest/FileStream/FileStream.upp b/autotest/FileStream/FileStream.upp new file mode 100644 index 000000000..23ee9cde4 --- /dev/null +++ b/autotest/FileStream/FileStream.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + FileStream.cpp; + +mainconfig + "" = ""; + diff --git a/autotest/FileStream/init b/autotest/FileStream/init new file mode 100644 index 000000000..52717d07d --- /dev/null +++ b/autotest/FileStream/init @@ -0,0 +1,4 @@ +#ifndef _FileStream_icpp_init_stub +#define _FileStream_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/FilterStream/FilterStream.cpp b/autotest/FilterStream/FilterStream.cpp new file mode 100644 index 000000000..58c0111c5 --- /dev/null +++ b/autotest/FilterStream/FilterStream.cpp @@ -0,0 +1,58 @@ +#include "Core/Core.h" + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + { + HttpRequest http("www.ultimatepp.org"); + InFilterStream in; + http.WhenContent = callback(&in, &InFilterStream::Out); + in.More = callback(&http, &HttpRequest::Do); + http.Blocking(); + ASSERT(!in.IsEof()); + String h; + h = in.GetLine(); + ASSERT(h.StartsWith("")); + } + String path = GetHomeDirFile("test.gz"); + { + FileOut fout(path); + Zlib zlib; + OutFilterStream out(fout, zlib); + zlib.GZip().Compress(); + for(int i = 0; i < 100000; i++) + out.Put(FormatIntBase(i, 27)); + out.Close(); + } + + String data; + for(int i = 0; i < 100000; i++) + data.Cat(FormatIntBase(i, 27)); + SaveFile(path + ".1", GZCompress(data)); +#if 0 + SaveFile(path, GZCompress(data)); +#endif + for(int pass = 0; pass < 2; pass++) { + FileIn fin(path); + Zlib zlib; + InFilterStream in(fin, zlib); + zlib.GZip().Decompress(); + if(pass) + for(int i = 0; i < data.GetCount(); i++) { + char c = in.Get(); + ASSERT(c == data[i]); + } + else + for(int i = 0; i < data.GetCount(); i += 17) { + int n = min(data.GetCount() - i, 17); + String h = in.Get(n); + ASSERT(h == data.Mid(i, n)); + } + ASSERT(in.Get() < 0); + ASSERT(in.IsEof()); + } +} diff --git a/autotest/FilterStream/FilterStream.upp b/autotest/FilterStream/FilterStream.upp new file mode 100644 index 000000000..3c0433b84 --- /dev/null +++ b/autotest/FilterStream/FilterStream.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + FilterStream.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/FilterStream/init b/autotest/FilterStream/init new file mode 100644 index 000000000..f7c9363a5 --- /dev/null +++ b/autotest/FilterStream/init @@ -0,0 +1,4 @@ +#ifndef _FilterStream_icpp_init_stub +#define _FilterStream_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/FixedMap/FixedMap.cpp b/autotest/FixedMap/FixedMap.cpp new file mode 100644 index 000000000..b1da57587 --- /dev/null +++ b/autotest/FixedMap/FixedMap.cpp @@ -0,0 +1,54 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_FILE|LOG_COUT); + + FixedVectorMap fmap; + + ASSERT(fmap.IsEmpty()); + + for(int i = 0; i < 10; i++) + fmap.Add(AsString(100 + (i & 1 ? -1 : 1) * i), AsString(i)); + + DUMPM(fmap); + fmap.Finish(); + DUMPM(fmap); + + ASSERT(!fmap.IsEmpty()); + ASSERT(fmap.GetCount() == 10); + ASSERT(fmap.Find("foo") < 0); + ASSERT(fmap.FindPtr("foo") == NULL); + + for(int i = 0; i < 10; i++) { + ASSERT(fmap.Get(AsString(100 + (i & 1 ? -1 : 1) * i)) == AsString(i)); + ASSERT(*fmap.FindPtr(AsString(100 + (i & 1 ? -1 : 1) * i)) == AsString(i)); + } + + fmap.Clear(); + + ASSERT(fmap.IsEmpty()); + + for(int i = 1; i < 10; i++) + for(int j = 0; j < i; j++) + fmap.Add(AsString(j)) = AsString(j); + + fmap.Finish(); + + DUMPM(fmap); + + for(int i = 0; i < 10; i++) { + int q = fmap.Find(AsString(i)); + int n = 0; + while(q >= 0) { + n++; + ASSERT(fmap[q] == AsString(i)); + q = fmap.FindNext(q); + } + ASSERT(n == 9 - i); + } + + LOG("========= EVERYTHING OK =========="); +} diff --git a/autotest/FixedMap/FixedMap.upp b/autotest/FixedMap/FixedMap.upp new file mode 100644 index 000000000..3da2daf9e --- /dev/null +++ b/autotest/FixedMap/FixedMap.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + FixedMap.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/FixedMap/init b/autotest/FixedMap/init new file mode 100644 index 000000000..5696884ef --- /dev/null +++ b/autotest/FixedMap/init @@ -0,0 +1,4 @@ +#ifndef _FixedMap_icpp_init_stub +#define _FixedMap_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/FormatUnsafe/FormatUnsafe.cpp b/autotest/FormatUnsafe/FormatUnsafe.cpp new file mode 100644 index 000000000..2ca74f39f --- /dev/null +++ b/autotest/FormatUnsafe/FormatUnsafe.cpp @@ -0,0 +1,41 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + String rndset; + rndset << "[]<>;`%%%%"; + rndset << rndset; + rndset << rndset; + rndset << rndset; + for(int i = 32; i < 128; i++) + if(IsAlpha(i) || IsDigit(i)) + rndset.Cat(i); + for(;;) { + String fmtstr; + while(Random(20)) + fmtstr << (char)rndset[Random(rndset.GetCount())]; + Vector v; + for(;;) { + int q = Random(5); + if(q == 0) + break; + switch(q) { + case 1: + v.Add((int)Random(100)); + break; + case 2: + v.Add(AsString(Random(100))); + break; + case 3: + v.Add(GetSysDate() + Random(100)); + break; + } + } + DUMP(fmtstr); + DUMPC(v); + DUMP(NFormat(fmtstr, v)); + } +} diff --git a/autotest/FormatUnsafe/FormatUnsafe.upp b/autotest/FormatUnsafe/FormatUnsafe.upp new file mode 100644 index 000000000..f39bb30c0 --- /dev/null +++ b/autotest/FormatUnsafe/FormatUnsafe.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + FormatUnsafe.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/FormatUnsafe/init b/autotest/FormatUnsafe/init new file mode 100644 index 000000000..225b8913a --- /dev/null +++ b/autotest/FormatUnsafe/init @@ -0,0 +1,4 @@ +#ifndef _FormatUnsafe_icpp_init_stub +#define _FormatUnsafe_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/GZCompressFile/GZCompressFile.cpp b/autotest/GZCompressFile/GZCompressFile.cpp new file mode 100644 index 000000000..94f6afeb8 --- /dev/null +++ b/autotest/GZCompressFile/GZCompressFile.cpp @@ -0,0 +1,26 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + String dir1 = GetHomeDirFile("gztest1"); + DeleteFolderDeep(dir1); + RealizeDirectory(dir1); + String file1 = AppendFileName(dir1, "test.cpp"); + String gzfile1 = AppendFileName(dir1, "test.cpp.gz"); + + String dir2 = GetHomeDirFile("gztest2"); + DeleteFolderDeep(dir2); + RealizeDirectory(dir2); + String file2 = AppendFileName(dir2, "test.cpp"); + String gzfile2 = AppendFileName(dir2, "test.cpp.gz"); + + SaveFile(file1, LoadFile(GetDataFile("GZCompressFile.cpp"))); + GZCompressFile(file1); + + SaveFile(gzfile2, LoadFile(gzfile1)); + GZDecompressFile(gzfile2); + + ASSERT(LoadFile(file1) == LoadFile(file2)); +} diff --git a/autotest/GZCompressFile/GZCompressFile.upp b/autotest/GZCompressFile/GZCompressFile.upp new file mode 100644 index 000000000..b5e7ad103 --- /dev/null +++ b/autotest/GZCompressFile/GZCompressFile.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + GZCompressFile.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/GZCompressFile/init b/autotest/GZCompressFile/init new file mode 100644 index 000000000..8d927a9fc --- /dev/null +++ b/autotest/GZCompressFile/init @@ -0,0 +1,4 @@ +#ifndef _GZCompressFile_icpp_init_stub +#define _GZCompressFile_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/Gzip/Gzip.cpp b/autotest/Gzip/Gzip.cpp new file mode 100644 index 000000000..0bff45446 --- /dev/null +++ b/autotest/Gzip/Gzip.cpp @@ -0,0 +1,104 @@ +#include + +using namespace Upp; + +void Put(Zlib& zip, const String& data, int fixed, int rndmask) +{ + int done = 0; + while(done < data.GetCount()) { + int n = min(fixed ? fixed : (rand() & rndmask), data.GetCount() - done); + zip.Put(~data + done, n); + done += n; + } + DDUMP(done); +} + +void Test(int size, dword cmask, int fixed, int rndmask) +{ + for(int crc = 0; crc < 2; crc++) + for(int gzip = 0; gzip < 2; gzip++) + for(int cs = 0; cs < 3; cs++) { + String data; + for(int i = 0; i < size; i++) { + data.Cat(rand()); + if((rand() & cmask) == 0) + data.Cat("Something to test compression too..."); + } + + DLOG("===================="); + DDUMP(fixed); + DDUMP(gzip); + DDUMP(crc); + DLOG("COMPRESS: " << data.GetCount()); + + Zlib zip; + zip.GZip(gzip); + zip.ChunkSize(cs == 0 ? 128 : cs == 1 ? 2048 : 65536).CRC(crc).Compress(); + Put(zip, data, fixed, rndmask); + zip.End(); + String deflated = zip; + DDUMP(deflated.GetCount()); + + dword crc = zip.GetCRC(); + + // LOGHEXDUMP(~deflated, deflated.GetCount()); + + String z = gzip ? GZCompress(data) : ZCompress(data); + + DDUMP(z.GetCount()); + // LOGHEXDUMP(~z, z.GetCount()); + + if(crc) + ASSERT(crc == CRC32(data)); + ASSERT(deflated == z); + + DLOG("===================="); + DLOG("DECOMPRESS: " << deflated.GetCount()); + String zz = gzip ? GZDecompress(deflated) : ZDecompress(deflated); + DDUMP(zz.GetCount()); + zip.CRC(crc).Decompress(); + Put(zip, deflated, fixed, rndmask); + zip.End(); + String inflated = zip; + ASSERT(!zip.IsError()); + DDUMP(inflated.GetCount()); + ASSERT(inflated == data); + if(crc) + ASSERT(zip.GetCRC() == crc); + } +} + +void Test2(int n, int fixed, int rndmask) +{ + Test(n, 0xffffffff, fixed, rndmask); + Test(n, 255, fixed, rndmask); + Test(n, 15, fixed, rndmask); + Test(n, 1, fixed, rndmask); +} + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + + String gzf = LoadFile(GetHomeDirFile("mbox.gz")); + Zlib z; + z.GZip().Decompress(); + z.Put(gzf); + z.End(); + DDUMP(~z); + DDUMP(z.GetGZipComment()); + DDUMP(z.GetGZipName()); + DDUMP(GZDecompress(gzf)); + + for(int x = 3; x < 10000000; x += x) { + Test(x, 0xffffffff, 1, 2047); + Test(x, 0xffffffff, 3, 2047); + Test(x, 0xffffffff, 128, 2047); + Test(x, 0xffffffff, 2048, 2047); + Test(x, 0xffffffff, 8192, 2047); + Test(x, 0xffffffff, 100000, 2047); + Test(x, 0xffffffff, 0, 2047); + } + LOG("*************************************"); + LOG("EVERYTHING IS OK"); +} diff --git a/autotest/error/error.upp b/autotest/Gzip/Gzip.upp similarity index 78% rename from autotest/error/error.upp rename to autotest/Gzip/Gzip.upp index 80f68ee03..c9f52c178 100644 --- a/autotest/error/error.upp +++ b/autotest/Gzip/Gzip.upp @@ -2,7 +2,7 @@ uses Core; file - error.cpp; + Gzip.cpp; mainconfig "" = "SSE2"; diff --git a/autotest/Gzip/init b/autotest/Gzip/init new file mode 100644 index 000000000..9bb39a483 --- /dev/null +++ b/autotest/Gzip/init @@ -0,0 +1,4 @@ +#ifndef _Gzip_icpp_init_stub +#define _Gzip_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/Heap/Heap.cpp b/autotest/Heap/Heap.cpp new file mode 100644 index 000000000..2b48422cf --- /dev/null +++ b/autotest/Heap/Heap.cpp @@ -0,0 +1,143 @@ +#include + +using namespace Upp; + +void HSet(byte *ptr, int sz) +{ + if(!ptr) return; + int q = (uintptr_t)ptr % 257; + while(sz--) + *ptr++ = (byte)q++; +} + +void HCheck(byte *ptr, int sz) +{ + if(!ptr) return; + int q = (uintptr_t)ptr % 257; + while(sz--) + ASSERT(*ptr++ == (byte)q++); +} + +int count; +byte *ptr[8192]; +size_t sz[8192]; + +void MCheck() +{ + MemoryCheckDebug(); + for(int i = 0; i < count; i++) + HCheck(ptr[i], sz[i]); +} + +void HClear() { + for(int i = 0; i < count; i++) { + HCheck(ptr[i], sz[i]); + delete ptr[i]; + ptr[i] = NULL; + sz[i] = 0; + MCheck(); + } + MemoryCheck(); + MemoryCheckDebug(); +} + +void MClear(bool del = false) { + for(int i = 0; i < count; i++) { + HCheck(ptr[i], sz[i]); + MemoryFree(ptr[i]); + ptr[i] = NULL; + sz[i] = 0; + MCheck(); + } + MemoryCheck(); + MemoryCheckDebug(); +} + +int RndSize() +{ + return rand() & 255; + switch(rand() & 3) { + case 0: return rand() & 255; + case 1: return rand() & 16383; + } + return (rand() + rand() + rand()) & 0x1ffff; +} + +void HeapTest(int cnt, int N, bool chk) +{ + int mask = cnt - 1; + count = cnt; + memset(ptr, 0, sizeof(ptr)); + memset(sz, 0, sizeof(sz)); + for(int n = 1; n < N; n++) { + if(n % 1000 == 0) + LOG(n); + int q = n & mask; + if(chk) + MCheck(); + else + HCheck(ptr[q], sz[q]); + delete (byte *)ptr[q]; + ptr[q] = NULL; + if(chk) MCheck(); + sz[q] = RndSize(); + ptr[q] = new byte[sz[q]]; + HSet(ptr[q], sz[q]); + if(chk) MCheck(); + } + HClear(); + MCheck(); + LOG("Stage 1 (new/delete) passed\r\n"); + for(int n2 = 1; n2 < N; n2++) { + if(n2 % 1000 == 0) + LOG(n2); + int q = n2 & mask; + if(chk) + MCheck(); + else + HCheck(ptr[q], sz[q]); +// LOGF("Free: %p\n", (void *)ptr[q]); + MemoryFree((byte *)ptr[q]); + ptr[q] = NULL; + if(chk) MCheck(); + sz[q] = RndSize(); + ptr[q] = (byte *)MemoryAlloc(sz[q]); +// LOGF("Alloc: %d %p\n", sz[q], (void *)ptr[q]); + ASSERT(((int)(uintptr_t)ptr[q] & 15) == 0); + HSet(ptr[q], sz[q]); + if(chk) MCheck(); + } + MClear(); + LOG("Stage 2 (MemoryAlloc/MemoryFree) passed"); + for(int n3 = 1; n3 < N; n3++) { + if(n3 % 1000 == 0) + LOG(n3); + int q = n3 & mask; + if(chk) + MCheck(); + else + HCheck(ptr[q], sz[q]); + MemoryFree((byte *)ptr[q]); + ptr[q] = NULL; + if(chk) MCheck(); + sz[q] = RndSize(); + ptr[q] = (byte *)MemoryAllocSz(sz[q]); + ASSERT(((int)(uintptr_t)ptr[q] & 15) == 0); + HSet(ptr[q], sz[q]); + if(chk) MCheck(); + } + MClear(); + LOG("Stage 3 (MemoryAllocSz/MemoryFree) passed"); +} + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_FILE|LOG_COUT); + LOG("Allocator test:"); + HeapTest(256, 100000, true); + LOG("Checked allocator test Passed"); + HeapTest(8192, 1000000, false); + LOG("Quick allocator test Passed"); + HeapTest(8192, 100 * 1000000, false); + LOG("Allocator test Passed"); +} diff --git a/autotest/Heap/Heap.upp b/autotest/Heap/Heap.upp new file mode 100644 index 000000000..46d6d1bb3 --- /dev/null +++ b/autotest/Heap/Heap.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + Heap.cpp; + +mainconfig + "" = ""; + diff --git a/autotest/Heap/init b/autotest/Heap/init new file mode 100644 index 000000000..d73c1c295 --- /dev/null +++ b/autotest/Heap/init @@ -0,0 +1,4 @@ +#ifndef _Heap_icpp_init_stub +#define _Heap_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/HeapMT/Heap.cpp b/autotest/HeapMT/Heap.cpp new file mode 100644 index 000000000..e364467a8 --- /dev/null +++ b/autotest/HeapMT/Heap.cpp @@ -0,0 +1,67 @@ +#include + +#define N 1000 * 100 + +#define THREADS 5 + +using namespace Upp; + +Mutex mutex; +Semaphore todo; +BiVector queue; + +void ProducerThread() +{ + for(int i = 0; i < N; i++) { + if(i % 1000 == 0) + LOG(i); + mutex.Enter(); + queue.AddHead() = new int; + mutex.Leave(); + todo.Release(); + MemoryCheckDebug(); + } + LOG("Producer shutdown"); +} + +void ConsumerThread() +{ + for(;;) { + todo.Wait(); + Mutex::Lock __(mutex); + if(queue.GetCount()) { + int *ptr = queue.Tail(); + if(!ptr) break; + queue.DropTail(); + delete ptr; + } + MemoryCheckDebug(); + } + LOG("Consumer shutdown"); +} + +CONSOLE_APP_MAIN { + StdLogSetup(LOG_COUT); + Thread producer[THREADS]; + Thread consumer[THREADS]; + for(int i = 0; i < THREADS; i++) { + producer[i].Run(callback(ProducerThread)); + consumer[i].Run(callback(ConsumerThread)); + } + for(int i = 0; i < THREADS; i++) { + producer[i].Wait(); + LOG("Producer #" << i << " terminated"); + } + mutex.Enter(); + queue.AddHead(NULL); + mutex.Leave(); + for(int i = 0; i < THREADS; i++) + todo.Release(); + for(int i = 0; i < THREADS; i++) { + consumer[i].Wait(); + LOG("Consumer #" << i << " terminated"); + } + MemoryCheckDebug(); + LOG("App shutdown"); + LOG("Passed"); +} diff --git a/autotest/HeapMT/HeapMT.upp b/autotest/HeapMT/HeapMT.upp new file mode 100644 index 000000000..1e09188ec --- /dev/null +++ b/autotest/HeapMT/HeapMT.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + Heap.cpp; + +mainconfig + "" = "MT"; + diff --git a/autotest/HeapMT/init b/autotest/HeapMT/init new file mode 100644 index 000000000..e9a41f4e5 --- /dev/null +++ b/autotest/HeapMT/init @@ -0,0 +1,4 @@ +#ifndef _HeapMT_icpp_init_stub +#define _HeapMT_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/HttpRequest/HttpRequest.cpp b/autotest/HttpRequest/HttpRequest.cpp new file mode 100644 index 000000000..accbd8efd --- /dev/null +++ b/autotest/HttpRequest/HttpRequest.cpp @@ -0,0 +1,49 @@ +#include + +using namespace Upp; + +#define LLOG(x) RLOG(x) +#define LDUMP(x) RDUMP(x) + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + HttpRequest::Trace(); + const Tuple2 x[] = { + { "https://www.servis24.cz", "" }, + { "rcmania.cz", "" }, + // { "http://www.facebook.com/pages/Upp", "" }, + { "www.oexchange.org", "" }, + { "http://pagead2.googlesyndication.com/pagead/show_ads.js", "" }, + { "www.ultimatepp.org", "" }, + { "www.idnes.cz", "" }, + { "www.google.com", "" }, + { "http://wattsupwiththat.com/", "" }, + { "http://www.rcalbum.com", "" }, + }; + for(int nd = 0; nd < 1; nd++) + for(int i = 0; i < __countof(x); i++) { + LLOG("============================================="); + LLOG("URL: " << x[i].a); + HttpRequest h(x[i].a); + if(nd) + h.Timeout(0); + if(IsNull(h.Execute())) { + DUMP(~h); + LLOG("Error:\n" << h.GetErrorDesc()); + NEVER(); + } + if((~h).Find(x[i].b) < 0) { + LLOG("Content:\n" << ~h); + NEVER(); + } + } + { + HttpRequest h("www.idnes.cz"); + h.MaxContentSize(10000); + h.Execute(); + ASSERT(h.IsError()); + LDUMP(h.GetError()); + } + LLOG("*********** Everything is OK"); +} diff --git a/autotest/HttpRequest/HttpRequest.upp b/autotest/HttpRequest/HttpRequest.upp new file mode 100644 index 000000000..a2b0a3f6a --- /dev/null +++ b/autotest/HttpRequest/HttpRequest.upp @@ -0,0 +1,10 @@ +uses + Core, + Core\SSL; + +file + HttpRequest.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/HttpRequest/init b/autotest/HttpRequest/init new file mode 100644 index 000000000..4763d4b7f --- /dev/null +++ b/autotest/HttpRequest/init @@ -0,0 +1,5 @@ +#ifndef _HttpRequest_icpp_init_stub +#define _HttpRequest_icpp_init_stub +#include "Core/init" +#include "Core\SSL/init" +#endif diff --git a/autotest/INI/INI.cpp b/autotest/INI/INI.cpp new file mode 100644 index 000000000..4f21d33d2 --- /dev/null +++ b/autotest/INI/INI.cpp @@ -0,0 +1,30 @@ +#include + +using namespace Upp; + +namespace Config { + +INI_STRING(text, "default text", "Text parameter"); + +}; + +struct Test { + int x; + String a; +}; + +Test y = { 123, "123" }; + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + + SetIniFile(GetDataFile("test.ini")); + + for(;;) { + LOG(Config::text); + LOG(GetIniInfoFormatted()); + getchar(); + SetIniFile(GetDataFile("test.ini")); + } +} diff --git a/autotest/INI/INI.upp b/autotest/INI/INI.upp new file mode 100644 index 000000000..9b2a30748 --- /dev/null +++ b/autotest/INI/INI.upp @@ -0,0 +1,10 @@ +uses + Core; + +file + test.ini, + INI.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/INI/init b/autotest/INI/init new file mode 100644 index 000000000..2cedd1e6d --- /dev/null +++ b/autotest/INI/init @@ -0,0 +1,4 @@ +#ifndef _INI_icpp_init_stub +#define _INI_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/INI/test.ini b/autotest/INI/test.ini new file mode 100644 index 000000000..79c54b5a2 --- /dev/null +++ b/autotest/INI/test.ini @@ -0,0 +1 @@ +text = Just a test \ No newline at end of file diff --git a/autotest/InArray/InArray.cpp b/autotest/InArray/InArray.cpp new file mode 100644 index 000000000..aec205564 --- /dev/null +++ b/autotest/InArray/InArray.cpp @@ -0,0 +1,203 @@ +#include + +using namespace Upp; + +template +void Compare(C1& a, C2& b) +{ + ASSERT(a.GetCount() == b.GetCount()); + + for(int i = 0; i < a.GetCount(); i++) + ASSERT(a[i] == b[i]); + + typename C1::Iterator ia = a.Begin(); + typename C2::Iterator ib = b.Begin(); + while(ib != b.End()) { + ASSERT(*ia == *ib); + ia++; + ib++; + } +} + +void InArrayTest() +{ + SeedRandom(); + Vector q; + InArray iv; + Compare(q, iv); + iv.Insert(0) = 0; + q.Insert(0) = 0; + iv.Insert(1) = -1; + q.Insert(1) = -1; + for(int j = 0; j < 10000; j++) { + if(j % 1000 == 0) + LOG(j); + int i = Random(iv.GetCount()); + iv.Insert(i) = i; + q.Insert(i) = i; + Compare(q, iv); + ASSERT(iv.End() - iv.Begin() == iv.GetCount()); + } + + for(int i = 0; i < 100; i++) { + int n = Random(100) + 20; + InArray::Iterator it2, it = iv.Begin(); + it += n; + ASSERT(it - iv.Begin() == n); + it2 = it; + for(int j = 0; j < 10; j++) { + ASSERT(it2 - iv.Begin() == n + j); + ++it2; + } + it2 = it; + for(int j = 0; j < 10; j++) { + ASSERT(it2 - iv.Begin() == n - j); + --it2; + } + } + + StableSort(q); + StableSort(iv); + Compare(q, iv); +} + +void TestUpperBound() +{ + { + InArray v; + for(int i = 0; i < 3000; i++) { + if(i % 1000 == 0) + LOG(i); + v.Insert(i) = i; + ASSERT(v.FindUpperBound(i) == i + 1); + for(int j = 0; j < i; j++) + ASSERT(v.FindUpperBound(j) == j + 1); + } + } + { + InArray v; + for(int i = 0; i < 3000; i++) { + if(i % 1000 == 0) + LOG(i); + for(int j = 0; j < 7; j++) + v.Insert(7 * i) = i; + ASSERT(v.FindUpperBound(i) == 7 * i + 7); + for(int j = 0; j < i; j++) + ASSERT(v.FindUpperBound(j) == 7 * j + 7); + } + } +} + +void TestLowerBound() +{ + { + InArray v; + for(int i = 0; i < 3000; i++) { + if(i % 1000 == 0) + LOG(i); + v.Insert(i) = i; + ASSERT(v.FindLowerBound(i) == i); + for(int j = 0; j < i; j++) + ASSERT(v.FindLowerBound(j) == j); + } + } + { + InArray v; + for(int i = 0; i < 3000; i++) { + if(i % 1000 == 0) + LOG(i); + for(int j = 0; j < 7; j++) + v.Insert(7 * i) = i; + ASSERT(v.FindLowerBound(i) == 7 * i); + for(int j = 0; j < i; j++) + ASSERT(v.FindLowerBound(j) == 7 * j); + } + } +} + +void SetTest() +{ + for(int j = 0; j < 100; j++) { + LOG(j); + Vector va; + InArray ia; + for(int i = 0; i < 1000; i++) { + int q = Random(100); + int ii = FindUpperBound(va, q); + va.Insert(ii) = q; + ia.InsertUpperBound(q); + Compare(va, ia); + + ii = ia.Find(q); + ASSERT(ia[ii] == q); + ASSERT(ia.Find(200) < 0); + } + } +} + +void RemoveTest() +{ + SeedRandom(); + Vector q; + InArray iv; + Compare(q, iv); + iv.Insert(0) = 0; + q.Insert(0) = 0; + iv.Insert(1) = -1; + q.Insert(1) = -1; + for(int j = 0; j < 10000000; j++) { + if(j % 1000 == 0) + LOG(j); + if(iv.GetCount() > 200 && Random(4) == 1) { + int i = Random(iv.GetCount() - 21); + int n = Random(20); + iv.Remove(i, n); + q.Remove(i, n); + } + else { + int i = Random(iv.GetCount()); + iv.Insert(i) = i; + q.Insert(i) = i; + } + Compare(q, iv); + ASSERT(iv.End() - iv.Begin() == iv.GetCount()); + } +} + +void InsertNTest() +{ + SeedRandom(); + Vector av; + InArray iv; + for(int i = 0; i < 100000; i++) { + if(i % 1000 == 0) + LOG(i); + if(av.GetCount() > 2000) { + av.Clear(); + iv.Clear(); + } + int pos = av.GetCount() ? Random(av.GetCount()) : 0; + int n = Random(30); + av.InsertN(pos, n); + iv.InsertN(pos, n); + for(int j = 0; j < n; j++) { + int r = Random(); + av[pos + j] = r; + iv[pos + j] = r; + } + Compare(av, iv); + } +} + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_FILE|LOG_COUT); + SeedRandom(); + + RemoveTest(); + InsertNTest(); + SetTest(); + TestLowerBound(); + TestUpperBound(); + InArrayTest(); +} diff --git a/autotest/InArray/InArray.upp b/autotest/InArray/InArray.upp new file mode 100644 index 000000000..62b5acebf --- /dev/null +++ b/autotest/InArray/InArray.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + InArray.cpp; + +mainconfig + "" = "SSE2 IVTEST"; + diff --git a/autotest/InArray/init b/autotest/InArray/init new file mode 100644 index 000000000..7cdbeecee --- /dev/null +++ b/autotest/InArray/init @@ -0,0 +1,4 @@ +#ifndef _InArray_icpp_init_stub +#define _InArray_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/InVector/InVector.cpp b/autotest/InVector/InVector.cpp new file mode 100644 index 000000000..4919a0eb2 --- /dev/null +++ b/autotest/InVector/InVector.cpp @@ -0,0 +1,266 @@ +#include + +using namespace Upp; + +template +void Compare(C1& a, C2& b) +{ + ASSERT(a.GetCount() == b.GetCount()); + + for(int i = 0; i < a.GetCount(); i++) + ASSERT(a[i] == b[i]); + + typename C1::Iterator ia = a.Begin(); + typename C2::Iterator ib = b.Begin(); + while(ib != b.End()) { + ASSERT(*ia == *ib); + ia++; + ib++; + } +} + +template +void Check(const InVector& iv) +{ + ASSERT(iv.GetCount() == 0 || iv.FindUpperBound(iv.Top()) == iv.GetCount()); +} + +template +T ToType(int); + +template <> +String ToType(int i) +{ + return AsString(i); +} + +template <> +int ToType(int i) +{ + return i; +} + +template +void InVectorTest() +{ + SeedRandom(); + Vector q; + InVector iv; + Compare(q, iv); + iv.Insert(0) = 0; + q.Insert(0) = 0; + iv.Insert(1) = ToType(-1); + q.Insert(1) = ToType(-1); + for(int j = 0; j < 10000; j++) { + if(j % 1000 == 0) + LOG(j); + int i = Random(iv.GetCount()); + iv.Insert(i) = ToType(i); + q.Insert(i) = ToType(i); + Compare(q, iv); + } + + for(int i = 0; i < 100; i++) { + int n = Random(100) + 20; + typename InVector::Iterator it2, it = iv.Begin(); + it += n; + ASSERT(it - iv.Begin() == n); + it2 = it; + for(int j = 0; j < 10; j++) { + ASSERT(it2 - iv.Begin() == n + j); + ++it2; + } + it2 = it; + for(int j = 0; j < 10; j++) { + ASSERT(it2 - iv.Begin() == n - j); + --it2; + } + } + + StableSort(q); + StableSort(iv); + Compare(q, iv); +} + +template +void TestUpperBound() +{ + { + InVector v; + for(int i = 0; i < 3000; i++) { + if(i % 1000 == 0) + LOG(i); + v.Insert(i) = ToType(i); + ASSERT(v.FindUpperBound(ToType(i)) == i + 1); + for(int j = 0; j < i; j++) + ASSERT(v.FindUpperBound(ToType(j)) == j + 1); + Check(v); + } + } + { + InVector v; + for(int i = 0; i < 3000; i++) { + if(i % 1000 == 0) + LOG(i); + for(int j = 0; j < 7; j++) + v.Insert(7 * i) = ToType(i); + ASSERT(v.FindUpperBound(ToType(i)) == 7 * i + 7); + for(int j = 0; j < i; j++) + ASSERT(v.FindUpperBound(ToType(j)) == 7 * j + 7); + Check(v); + } + } +} + +template +void TestLowerBound() +{ + { + InVector v; + for(int i = 0; i < 3000; i++) { + if(i % 1000 == 0) + LOG(i); + v.Insert(i) = ToType(i); + ASSERT(v.FindLowerBound(ToType(i)) == i); + for(int j = 0; j < i; j++) + ASSERT(v.FindLowerBound(ToType(j)) == j); + Check(v); + } + } + { + InVector v; + for(int i = 0; i < 3000; i++) { + if(i % 1000 == 0) + LOG(i); + for(int j = 0; j < 7; j++) + v.Insert(7 * i) = ToType(i); + ASSERT(v.FindLowerBound(ToType(i)) == 7 * i); + for(int j = 0; j < i; j++) + ASSERT(v.FindLowerBound(ToType(j)) == 7 * j); + Check(v); + } + } +} + +template +void SetTest() +{ + for(int j = 0; j < 100; j++) { + LOG(j); + Vector va; + InVector ia; + for(int i = 0; i < 1000; i++) { + int q = Random(100); + int ii = FindUpperBound(va, ToType(q)); + T val = ToType(q); + va.Insert(ii) = val; + ia.InsertUpperBound(val); + Compare(va, ia); + Check(ia); + + ii = ia.Find(val); + ASSERT(ia[ii] == val); + ASSERT(ia.Find(ToType(20000)) < 0); + } + } +} + +template +void RemoveTest() +{ + SeedRandom(); + Vector q; + InVector iv; + Compare(q, iv); + iv.Insert(0) = 0; + q.Insert(0) = 0; + iv.Insert(1) = ToType(-1); + q.Insert(1) = ToType(-1); + for(int j = 0; j < 10000000; j++) { + if(j % 1000 == 0) + LOG(j); + if(iv.GetCount() > 200 && Random(4) == 1) { + int i = Random(iv.GetCount() - 21); + int n = Random(20); + iv.Remove(i, n); + q.Remove(i, n); + } + else { + int i = Random(iv.GetCount()); + iv.Insert(i) = ToType(i); + q.Insert(i) = ToType(i); + } + Compare(q, iv); + ASSERT(iv.End() - iv.Begin() == iv.GetCount()); + } +} + +template +void InsertNTest() +{ + SeedRandom(); + Vector av; + InVector iv; + for(int i = 0; i < 100000; i++) { + if(i % 1000 == 0) + LOG(i); + if(av.GetCount() > 2000) { + av.Clear(); + iv.Clear(); + } + int pos = av.GetCount() ? Random(av.GetCount()) : 0; + int n = Random(30); + av.InsertN(pos, n); + iv.InsertN(pos, n); + for(int j = 0; j < n; j++) { + int r = Random(); + av[pos + j] = ToType(r); + iv[pos + j] = ToType(r); + } + Compare(av, iv); + } +} + +struct TestType : Moveable { + int x; + String y; + + bool operator<(const TestType& b) const { return CombineCompare(x, b.x)(y, b.y) < 0; } + bool operator==(const TestType& b) const { return x == b.x && y == b.y; } + + TestType(int i) { x = i; y = AsString(i ^ 7); } + TestType() {} +}; + +template <> +TestType ToType(int i) +{ + return TestType(i); +} + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_FILE|LOG_COUT); + SeedRandom(); + + SetTest(); + TestLowerBound(); + TestUpperBound(); + RemoveTest(); + InsertNTest(); + InVectorTest(); + + SetTest(); + TestLowerBound(); + TestUpperBound(); + RemoveTest(); + InsertNTest(); + InVectorTest(); + + SetTest(); + TestLowerBound(); + TestUpperBound(); + RemoveTest(); + InsertNTest(); + InVectorTest(); +} diff --git a/autotest/InVector/InVector.upp b/autotest/InVector/InVector.upp new file mode 100644 index 000000000..cb74f4997 --- /dev/null +++ b/autotest/InVector/InVector.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + InVector.cpp; + +mainconfig + "" = "SSE2 IVTEST"; + diff --git a/autotest/InVector/init b/autotest/InVector/init new file mode 100644 index 000000000..642a795a7 --- /dev/null +++ b/autotest/InVector/init @@ -0,0 +1,4 @@ +#ifndef _InVector_icpp_init_stub +#define _InVector_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/Long/Long.cpp b/autotest/InetCode/InetCode.cpp similarity index 53% rename from autotest/Long/Long.cpp rename to autotest/InetCode/InetCode.cpp index acd7294c4..b261a8226 100644 --- a/autotest/Long/Long.cpp +++ b/autotest/InetCode/InetCode.cpp @@ -4,5 +4,5 @@ using namespace Upp; CONSOLE_APP_MAIN { - Sleep(20000); + ASSERT(QPDecode("=3DTest=\r\n=3D") == "=Test="); } diff --git a/autotest/InetCode/InetCode.upp b/autotest/InetCode/InetCode.upp new file mode 100644 index 000000000..ddfb8a91e --- /dev/null +++ b/autotest/InetCode/InetCode.upp @@ -0,0 +1,11 @@ +description "Various inet based encoding/decoding schemes\377"; + +uses + Core; + +file + InetCode.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/InetCode/init b/autotest/InetCode/init new file mode 100644 index 000000000..328e2ad4a --- /dev/null +++ b/autotest/InetCode/init @@ -0,0 +1,4 @@ +#ifndef _InetCode_icpp_init_stub +#define _InetCode_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/JSON/JSON.cpp b/autotest/JSON/JSON.cpp new file mode 100644 index 000000000..c4597adcf --- /dev/null +++ b/autotest/JSON/JSON.cpp @@ -0,0 +1,96 @@ +#include + +using namespace Upp; + +struct TestStruct +{ + struct TestV : Moveable + { + double a; + Value b; + String c; + bool d; + String ToString() const + { + return Format("a=%d, b=%d", a,b); + } + + void Jsonize(JsonIO &json) + { + json + ("a", a) + ("b", b) + ("c", c) + ("d", d) + ; + } + + TestV() { c = "Some text"; d = false; } + }; + + void Add(double a, Value b) + { + TestV v; + v.a = a; + v.b = b; + static int ii; + map.Add("SomeKey" + AsString(++ii), v); + } + + void Jsonize(JsonIO &json) + { + StringMap(json, map); // <- string map + } + + void Xmlize(XmlIO &xio) { + XmlizeByJsonize(xio, *this); + } + + VectorMap map; +}; + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + + Vector a, b; + a.Add(); + String json = StoreAsJson(a); + RDUMP(json); + LoadFromJson(b, json); + RDUMPC(b); + ASSERT(b.GetCount() == 1 && IsNull(b[0])); + + TestStruct test, test2; + test.Add(0, 0); + test.Add(-1.2345, Date(2007, 12, 12)); + + LoadFromJson(test2, StoreAsJson(test)); + + RLOG(StoreAsJson(test)); + RLOG("==================="); + RLOG(StoreAsJson(test2)); + ASSERT(StoreAsJson(test) == StoreAsJson(test2)); + RLOG("==================="); + StoreAsJsonFile(test, NULL, true); + LoadFromJsonFile(test2); + ASSERT(StoreAsJson(test) == StoreAsJson(test2)); + String fn = ConfigFile("h"); + StoreAsJsonFile(test, fn, true); + RDUMP(LoadFile(fn)); + LoadFromJsonFile(test2); + ASSERT(StoreAsJson(test) == StoreAsJson(test2)); + + TestStruct test3; + ASSERT(!LoadFromJson(test2, "{\"SomeKey1\":{\"a\":\"X\",\"b\":2},\"SomeKey2\":{\"a\":1,\"b\":2}}")); + + ASSERT(!LoadFromJsonFile(test2, "c:aksjdfhkjaskjdfkhasdf")); + + RLOG("================================"); + String xml = StoreAsXML(test, "test"); + RLOG(xml); + LoadFromXML(test2, xml); + ASSERT(StoreAsXML(test, "test") == xml); + + RLOG("Everything is OK."); +} diff --git a/autotest/leaks/leaks.upp b/autotest/JSON/JSON.upp similarity index 78% rename from autotest/leaks/leaks.upp rename to autotest/JSON/JSON.upp index 380cb30dd..cd02c85f8 100644 --- a/autotest/leaks/leaks.upp +++ b/autotest/JSON/JSON.upp @@ -2,7 +2,7 @@ uses Core; file - leaks.cpp; + JSON.cpp; mainconfig "" = "SSE2"; diff --git a/autotest/JSON/init b/autotest/JSON/init new file mode 100644 index 000000000..95f1c4ee3 --- /dev/null +++ b/autotest/JSON/init @@ -0,0 +1,4 @@ +#ifndef _JSON_icpp_init_stub +#define _JSON_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/JsonDATE/JsonDATE.cpp b/autotest/JsonDATE/JsonDATE.cpp new file mode 100644 index 000000000..b40dc2a0e --- /dev/null +++ b/autotest/JsonDATE/JsonDATE.cpp @@ -0,0 +1,18 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN { + StdLogSetup(LOG_FILE|LOG_COUT); + + Date d = GetSysDate(); + Time t = GetSysTime(); + String h = Json("date", d)("time", t)("array", JsonArray() << d << t); + DDUMP(h); + + Value v = ParseJSON(h); + ASSERT(v["date"] == d); + ASSERT(v["time"] == t); + ASSERT(v["array"][0] == d); + ASSERT(v["array"][1] == t); +} diff --git a/autotest/JsonDATE/JsonDATE.upp b/autotest/JsonDATE/JsonDATE.upp new file mode 100644 index 000000000..bb0c47b9c --- /dev/null +++ b/autotest/JsonDATE/JsonDATE.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + JsonDATE.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/JsonDATE/init b/autotest/JsonDATE/init new file mode 100644 index 000000000..c231b7665 --- /dev/null +++ b/autotest/JsonDATE/init @@ -0,0 +1,4 @@ +#ifndef _JsonDATE_icpp_init_stub +#define _JsonDATE_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/LoadIniStream/LoadIniStream.cpp b/autotest/LoadIniStream/LoadIniStream.cpp new file mode 100644 index 000000000..64d2d3892 --- /dev/null +++ b/autotest/LoadIniStream/LoadIniStream.cpp @@ -0,0 +1,22 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + VectorMap map = LoadIniFile(GetDataFile("test.ini")); + DDUMPM(map); + + const Tuple2 et[] = { + { "alfa", "alfa_value" }, + { "_beta", "beta_value" }, + { "gamma", "gamma_value" }, + { "included", "included_value" }, + { "delta", "delta_value" }, + }; + ASSERT(map.GetCount() == __countof(et)); + for(int i = 0; i < map.GetCount(); i++) { + ASSERT(map.GetKey(i) == et[i].a); + ASSERT(map[i] == et[i].b); + } +} diff --git a/autotest/LoadIniStream/LoadIniStream.upp b/autotest/LoadIniStream/LoadIniStream.upp new file mode 100644 index 000000000..9492c1598 --- /dev/null +++ b/autotest/LoadIniStream/LoadIniStream.upp @@ -0,0 +1,11 @@ +uses + Core; + +file + test2.ini, + test.ini, + LoadIniStream.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/LoadIniStream/init b/autotest/LoadIniStream/init new file mode 100644 index 000000000..d2c3d43eb --- /dev/null +++ b/autotest/LoadIniStream/init @@ -0,0 +1,4 @@ +#ifndef _LoadIniStream_icpp_init_stub +#define _LoadIniStream_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/LoadIniStream/test.ini b/autotest/LoadIniStream/test.ini new file mode 100644 index 000000000..131175b21 --- /dev/null +++ b/autotest/LoadIniStream/test.ini @@ -0,0 +1,16 @@ +alfa=alfa_value +_beta=beta_value + +;comment=comment + + gamma= gamma_value + +#another comment = gggg + +@include test2.ini + +delta=delta_value + +@end + +past_end=this should not be there... diff --git a/autotest/LoadIniStream/test2.ini b/autotest/LoadIniStream/test2.ini new file mode 100644 index 000000000..b887b927f --- /dev/null +++ b/autotest/LoadIniStream/test2.ini @@ -0,0 +1 @@ +included=included_value diff --git a/autotest/Long/Long.upp b/autotest/Long/Long.upp deleted file mode 100644 index 4c19e4175..000000000 --- a/autotest/Long/Long.upp +++ /dev/null @@ -1,11 +0,0 @@ -description "This takes 20 second, which would result in timeout, if not ##WAIT: 1\377"; - -uses - Core; - -file - Long.cpp; - -mainconfig - "" = "SSE2"; - diff --git a/autotest/Long/init b/autotest/Long/init deleted file mode 100644 index 8cce5be81..000000000 --- a/autotest/Long/init +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef _Long_icpp_init_stub -#define _Long_icpp_init_stub -#include "Core/init" -#endif diff --git a/autotest/Maps/Maps.cpp b/autotest/Maps/Maps.cpp new file mode 100644 index 000000000..9ce850479 --- /dev/null +++ b/autotest/Maps/Maps.cpp @@ -0,0 +1,35 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN{ + StdLogSetup(LOG_FILE|LOG_COUT); + + VectorMap m; + m(1, "one")(2, "two"); + DDUMPM(m); + ASSERT(m.Get(1) == "one"); + ASSERT(m.Get(2) == "two"); + + { + SortedVectorMap m; + m(2, "two")(1, "one"); + DDUMPM(m); + ASSERT(m.Get(1) == "one"); + ASSERT(m.Get(2) == "two"); + } + { + SortedArrayMap m; + m(1, "one")(2, "two"); + DDUMPM(m); + ASSERT(m.Get(1) == "one"); + ASSERT(m.Get(2) == "two"); + } + { + ValueMap m; + m(1, "one")(2, "two"); + DDUMP(m); + ASSERT(m[1] == "one"); + ASSERT(m[2] == "two"); + } +} diff --git a/autotest/Maps/Maps.upp b/autotest/Maps/Maps.upp new file mode 100644 index 000000000..3b69be3b6 --- /dev/null +++ b/autotest/Maps/Maps.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + Maps.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/Maps/init b/autotest/Maps/init new file mode 100644 index 000000000..31de64aff --- /dev/null +++ b/autotest/Maps/init @@ -0,0 +1,4 @@ +#ifndef _Maps_icpp_init_stub +#define _Maps_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/NTLAsString/NTLAsString.cpp b/autotest/NTLAsString/NTLAsString.cpp new file mode 100644 index 000000000..bbe7c4713 --- /dev/null +++ b/autotest/NTLAsString/NTLAsString.cpp @@ -0,0 +1,88 @@ +#include + +using namespace Upp; + +template +void ArrayTest() +{ + T array; + array.Add(1); + array.Add(2); + array.Add(3); + DUMP(array); +} + +template +void BiArrayTest() +{ + T array; + array.AddTail(1); + array.AddTail(2); + array.AddTail(3); + DUMP(array); +} + +template +void MapTest() +{ + T map; + map.Add(1, "one"); + map.Add(2, "two"); + map.Add(3, "three"); + DUMP(map); + map.Unlink(1); + DUMP(map); +} + +template +void SortedMapTest() +{ + T map; + map.Add(1, "one"); + map.Add(2, "two"); + map.Add(3, "three"); + DUMP(map); +} + +template +void FixedMapTest() +{ + T map; + map.Add(1, "one"); + map.Add(2, "two"); + map.Add(3, "three"); + map.Finish(); + DUMP(map); +} + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_FILE|LOG_COUT); + + ArrayTest< Vector > (); + ArrayTest< Array > (); + ArrayTest< InVector > (); + ArrayTest< InArray > (); + ArrayTest< Index > (); + ArrayTest< ArrayIndex > (); + ArrayTest< SortedIndex > (); + + BiArrayTest< BiVector > (); + BiArrayTest< BiArray > (); + + MapTest< VectorMap >(); + MapTest< ArrayMap >(); + + SortedMapTest< SortedVectorMap >(); + SortedMapTest< SortedArrayMap >(); + + FixedMapTest< FixedVectorMap >(); + FixedMapTest< FixedArrayMap >(); + + One x; + DUMP(x); + x.Create() = 1; + DUMP(x); + + LOG("======== OK"); +} diff --git a/autotest/NTLAsString/NTLAsString.upp b/autotest/NTLAsString/NTLAsString.upp new file mode 100644 index 000000000..c99e95cd4 --- /dev/null +++ b/autotest/NTLAsString/NTLAsString.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + NTLAsString.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/NTLAsString/init b/autotest/NTLAsString/init new file mode 100644 index 000000000..35c352213 --- /dev/null +++ b/autotest/NTLAsString/init @@ -0,0 +1,4 @@ +#ifndef _NTLAsString_icpp_init_stub +#define _NTLAsString_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/NaNINF/NaNINF.upp b/autotest/NaNINF/NaNINF.upp new file mode 100644 index 000000000..095ae49d2 --- /dev/null +++ b/autotest/NaNINF/NaNINF.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + NaNInf.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/NaNINF/NaNInf.cpp b/autotest/NaNINF/NaNInf.cpp new file mode 100644 index 000000000..176be400c --- /dev/null +++ b/autotest/NaNINF/NaNInf.cpp @@ -0,0 +1,31 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + double d = 0; + ASSERT(!IsNaN(d)); + ASSERT(!IsInf(d)); + ASSERT(IsFin(d)); + + d = sqrt(StrDbl("-1.0")); + ASSERT(IsNaN(d)); + ASSERT(!IsInf(d)); + ASSERT(!IsFin(d)); + + d = 1e300; + d *= d; + ASSERT(!IsNaN(d)); + ASSERT(IsInf(d)); + ASSERT(!IsFin(d)); + + d = 1e300; + d *= -d; + ASSERT(!IsNaN(d)); + ASSERT(IsInf(d)); + ASSERT(!IsFin(d)); + + LOG("Everything OK"); +} diff --git a/autotest/NaNINF/init b/autotest/NaNINF/init new file mode 100644 index 000000000..9d9727187 --- /dev/null +++ b/autotest/NaNINF/init @@ -0,0 +1,4 @@ +#ifndef _NaNINF_icpp_init_stub +#define _NaNINF_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/NanoStrings/NanoStrings.cpp b/autotest/NanoStrings/NanoStrings.cpp new file mode 100644 index 000000000..67bdd5eb0 --- /dev/null +++ b/autotest/NanoStrings/NanoStrings.cpp @@ -0,0 +1,64 @@ +#include + +using namespace Upp; + +// WARNING: 64-bit OS and 8GB RAM required to run this test + +String RandomString(int maxlen = 70) +{ + int len = Random(maxlen); + String h; + for(int i = 0; i < len; i++) + h.Cat(Random(26) + 'a'); + return h; +} + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + + MemoryLimitKb(8000000); + for(int sz = 0; sz < 2; sz++) { + for(int pass = 0; pass < 2; pass++) { + LOG("--------------------"); + DUMP(sz); + DUMP(pass); + { + NanoStrings ns; + Vector ws; + + ns.ZeroTerminated(sz); + + SeedRandom(); + for(int i = 0; i < 140000000; i++) { + if(i % 10000000 == 0) + RLOG("Created " << i); + String s = pass ? "x" : RandomString(Random(4) ? 5 : 50); + ws.Add(ns.Add(s)); + } + + ns.DumpProfile(); + LOG("---- Strings " << MemoryUsedKb() << " KB used -------"); + LOG(MemoryProfile()); + + SeedRandom(); + for(int i = 0; i < ws.GetCount(); i++) { + if(i % 10000000 == 0) + RLOG("Tested " << i); + String s = pass ? "x" : RandomString(Random(4) ? 5 : 50); + if((sz ? String(ns.GetPtr(ws[i])) : ns.Get(ws[i])) != s) { + DUMP(i); + DUMP(ns.Get(ws[i])); + DUMP(s); + NEVER(); + } + } + LOG("Test OK"); + } + LOG("===== EMPTY " << MemoryUsedKb() << " KB used -------"); + LOG(MemoryProfile()); + } + } + + LOG("============ Everything OK ==================="); +} diff --git a/autotest/NanoStrings/NanoStrings.upp b/autotest/NanoStrings/NanoStrings.upp new file mode 100644 index 000000000..c68a845a8 --- /dev/null +++ b/autotest/NanoStrings/NanoStrings.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + NanoStrings.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/NanoStrings/init b/autotest/NanoStrings/init new file mode 100644 index 000000000..f37ac1698 --- /dev/null +++ b/autotest/NanoStrings/init @@ -0,0 +1,4 @@ +#ifndef _NanoStrings_icpp_init_stub +#define _NanoStrings_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/PcreTest/PcreTest.cpp b/autotest/PcreTest/PcreTest.cpp new file mode 100644 index 000000000..ac3dc84ec --- /dev/null +++ b/autotest/PcreTest/PcreTest.cpp @@ -0,0 +1,27 @@ +#include +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + RegExp r0("(\\w+)\\s(\\w+)\\s(\\w+)"); + if(r0.Match("one two three")) + { + for(int i = 0; i < r0.GetCount(); i++) + Cout() << r0[i] << '\n'; + } else if(r0.IsError()) + Cout() << r0.GetError() << '\n'; + + Cout() << "------------------------------\n"; + + RegExp r1("(\\w+)", RegExp::UNICODE); + int i = 0; + while(r1.GlobalMatch("hello 4 ho 55 uuu iii pp 99 baby too swistak")) + { + for(int i = 0; i < r1.GetCount(); i++) + Cout() << r1[i] << '\n'; + } + if(r1.IsError()) + Cout() << r1.GetError() << '\n'; +} diff --git a/autotest/PcreTest/PcreTest.upp b/autotest/PcreTest/PcreTest.upp new file mode 100644 index 000000000..dd14224b2 --- /dev/null +++ b/autotest/PcreTest/PcreTest.upp @@ -0,0 +1,10 @@ +uses + Core, + plugin\pcre; + +file + PcreTest.cpp charset "UTF-8"; + +mainconfig + "" = "CONSOLE"; + diff --git a/autotest/PcreTest/init b/autotest/PcreTest/init new file mode 100644 index 000000000..3194279c9 --- /dev/null +++ b/autotest/PcreTest/init @@ -0,0 +1,5 @@ +#ifndef _PcreTest_icpp_init_stub +#define _PcreTest_icpp_init_stub +#include "Core/init" +#include "plugin\pcre/init" +#endif diff --git a/autotest/RWMutex/RWMutex.cpp b/autotest/RWMutex/RWMutex.cpp new file mode 100644 index 000000000..312b3714a --- /dev/null +++ b/autotest/RWMutex/RWMutex.cpp @@ -0,0 +1,80 @@ +#include + +using namespace Upp; + +#ifdef PLATFORM_POSIX +__thread int threadid; +#else +__declspec(thread) int threadid; +#endif + +#define LLOG(x) LOG((threadid) << " " << x << ", count " << count) + +RWMutex rwlock; +VectorMap cache; + +String Fn(int x) +{ + return AsString(sin(sqrt((double)x))); +} + +void CheckResult(int x, const String& r) +{ + if(r != Fn(x)) { + DUMP(r); + DUMP(Fn(x)); + Panic("Failure! " + AsString(threadid)); + } +} + +int writes, removes; + +void WorkThread(int id) +{ + threadid = id; + for(int i = 0; i < 1000000; i++) { + if(i % 1000000 == 0) + INTERLOCKED + Cout() << id << ": " << i << ", writes: " << writes << ", removes: " << removes << "\n"; + int x = rand() & 0x7fff; + rwlock.EnterRead(); + int q = cache.Find(x); + if(q >= 0) { + String r = cache[q]; + CheckResult(x, r); + // for(int i = 0; i < 100; i++) + // Fn(x); + rwlock.LeaveRead(); + } + else { + rwlock.LeaveRead(); + rwlock.EnterWrite(); + RTIMING("Write!"); + q = cache.Find(x); + if(q >= 0) + CheckResult(x, cache[q]); + else { + writes++; + if(cache.GetCount() >= 0x7ff0) { + removes++; + cache.Remove(0, 100); + } + cache.Add(x, Fn(x)); + } + rwlock.LeaveWrite(); + } + } +} + +CONSOLE_APP_MAIN +{ + RTIMING("All"); + Thread t[20]; + for(int i = 0; i < 9; i++) + t[i].Run(callback1(WorkThread, i + 1)); + WorkThread(0); + for(int i = 0; i < 9; i++) + t[i].Wait(); + RDUMP(writes); + RDUMP(removes); +} diff --git a/autotest/RWMutex/RWMutex.upp b/autotest/RWMutex/RWMutex.upp new file mode 100644 index 000000000..7d100e1c2 --- /dev/null +++ b/autotest/RWMutex/RWMutex.upp @@ -0,0 +1,8 @@ +uses + Core; + +file + RWMutex.cpp; + +mainconfig + "" = "MT"; diff --git a/autotest/RWMutex/init b/autotest/RWMutex/init new file mode 100644 index 000000000..109ced9c3 --- /dev/null +++ b/autotest/RWMutex/init @@ -0,0 +1,4 @@ +#ifndef _RWMutex_icpp_init_stub +#define _RWMutex_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/Ref/Ref.cpp b/autotest/Ref/Ref.cpp new file mode 100644 index 000000000..99e84267a --- /dev/null +++ b/autotest/Ref/Ref.cpp @@ -0,0 +1,125 @@ +#include +#include + +using namespace Upp; + +template +void TestRef(const T& x) +{ + LOG(typeid(T).name()); + T a; + Ref ref(a); + ref.SetValue(x); + ASSERT(a == x); + LOG(a); + Value xx = x; + if(!xx.Is()) { + ref.SetNull(); + ASSERT(IsNull(a)); + ASSERT(ref.IsNull()); + + ref.Get() = x; + ASSERT(!IsNull(a)); + ASSERT(!ref.IsNull()); + + ref.SetValue(Null); + ASSERT(IsNull(a)); + ASSERT(ref.IsNull()); + + ref.Get() = x; + ASSERT(!IsNull(a)); + + ref = Null; + ASSERT(IsNull(a)); + ASSERT(ref.IsNull()); + + ref.Get() = x; + ASSERT(!IsNull(a)); + + ref = (Value)Null; + ASSERT(IsNull(a)); + ASSERT(ref.IsNull()); + } + + DUMP(ref.GetType()); + DUMP(GetValueTypeNo()); + ASSERT(ref.GetType() == GetValueTypeNo()); + + ASSERT(ref.Is()); + + T b; + Ref r2(b); + T& f = r2.Get(); + f = x; + ASSERT(x == b); + + r2.Get() = x; + ASSERT(x == b); + + LOG("-------------------"); +} + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + + TestRef(Date(2012, 3, 4)); + TestRef(Time(2012, 3, 4, 23, 1)); + TestRef(String("hello!")); + TestRef(WString("hello!")); + TestRef(true); + TestRef(123); + TestRef(123.456); + TestRef((int64)123); + + TestRef(Value("hello Value!")); + + TestRef(ValueMap()("key1", 1)("key2", 2)); + + TestRef(ValueArray() << "v1" << "v2"); + + TestRef(Blue()); + + TestRef(Rect(1, 2, 3, 4)); + TestRef(Rectf(1, 2, 3, 4)); + + TestRef(Point(1, 4)); + TestRef(Pointf(1, 4)); + + TestRef(Size(1, 4)); + TestRef(Sizef(1, 4)); + + TestRef(Complex(1, 2)); + + TestRef(CreateImage(Size(1, 2), Blue())); + + TestRef(Arial(20).Bold()); + + DrawingDraw w(20, 20); + w.DrawRect(1, 1, 1, 1, Black()); + TestRef(w.GetResult()); + + PaintingPainter p(20, 20); + p.DrawRect(1, 1, 1, 1, Black()); + TestRef(p.GetResult()); + + String text; + Ref textref(text); + textref = "TEST"; + DUMP(text); + ASSERT(text == "TEST"); + + int x; + Ref ref(x); + ref.SetValue(1.0); + DUMP(x); + ASSERT(x == 1); + + Ref empty; + DUMP(empty.GetValue()); + DUMP(empty.IsNull()); + DUMP(IsNull(empty.GetValue())); + DUMP(~empty); + + LOG("--- OK: All tests finished successfully"); +} diff --git a/autotest/Ref/Ref.upp b/autotest/Ref/Ref.upp new file mode 100644 index 000000000..c07bc39f8 --- /dev/null +++ b/autotest/Ref/Ref.upp @@ -0,0 +1,11 @@ +uses + Core, + Draw, + Painter; + +file + Ref.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/Ref/init b/autotest/Ref/init new file mode 100644 index 000000000..dc87f45b2 --- /dev/null +++ b/autotest/Ref/init @@ -0,0 +1,6 @@ +#ifndef _Ref_icpp_init_stub +#define _Ref_icpp_init_stub +#include "Core/init" +#include "Draw/init" +#include "Painter/init" +#endif diff --git a/autotest/STL/STL.cpp b/autotest/STL/STL.cpp new file mode 100644 index 000000000..0d75e4bb6 --- /dev/null +++ b/autotest/STL/STL.cpp @@ -0,0 +1,34 @@ +#include + +using namespace Upp; + +template +void Check() +{ + T a; + std::includes(a.begin(), a.end(), a.begin(), a.end()); + + const T& b = a; + std::includes(b.begin(), b.end(), b.begin(), b.end()); +} + +CONSOLE_APP_MAIN +{ + Check< Vector > (); + Check< Array > (); + + Check< BiVector > (); + Check< BiArray > (); + + Check< Index > (); + Check< ArrayIndex > (); + Check< VectorMap > (); + Check< ArrayMap > (); + + Check< InVector > (); + Check< InArray > (); + + Check< SortedIndex > (); + Check< SortedVectorMap > (); + Check< SortedArrayMap > (); +} diff --git a/autotest/ok/ok.upp b/autotest/STL/STL.upp similarity index 81% rename from autotest/ok/ok.upp rename to autotest/STL/STL.upp index 9465b561e..df1731907 100644 --- a/autotest/ok/ok.upp +++ b/autotest/STL/STL.upp @@ -2,7 +2,7 @@ uses Core; file - ok.cpp; + STL.cpp; mainconfig "" = "SSE2"; diff --git a/autotest/STL/init b/autotest/STL/init new file mode 100644 index 000000000..ae94b3635 --- /dev/null +++ b/autotest/STL/init @@ -0,0 +1,4 @@ +#ifndef _STL_icpp_init_stub +#define _STL_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/S_type/S_type.cpp b/autotest/S_type/S_type.cpp new file mode 100644 index 000000000..0e478a9e7 --- /dev/null +++ b/autotest/S_type/S_type.cpp @@ -0,0 +1,84 @@ +#include + +using namespace Upp; +#define SCHEMADIALECT +#define MODEL +#include +#include +#include + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + + S_TEST test; + + test.GetRef(TEXT) = "Hello!"; + test.GetRef(TEXT1) = "text1!"; + DUMP(test.Get(TEXT)); + DUMP(test.Get()); + DUMP(test); + + S_TEST test2 = test; + ASSERT(test2 == test); + ASSERT(test2.Get() == test.Get()); + test2.NUMBER = 1; + ASSERT(test2 != test); + ASSERT(test2.Get() != test.Get()); + + LOG("------------------------"); + { + ValueMap m; + test.Clear(); + DUMP(test); + for(int i = 0; i < test.GetCount(); i++) { + Ref f = test.GetRef(i); + if(!f.Is()) + ASSERT(IsNull(test.Get(i))); + Value v; + if(f.Is()) + v = (bool)(i % 2); + else + if(f.Is()) + v = i + 1000; + else + v = "text " + AsString(i); + m.Add(test.GetId(i), v); + test.Set(i, v); + ASSERT(test.Get(i) == v); + } + DUMP(test); + DUMP(test.Get()); + ASSERT(test.Get() == m); + } + + test.Set(FLAG, "1"); + ASSERT(test.FLAG); + test.Set(FLAG, "0"); + ASSERT(!test.FLAG); + + DUMP(test.GetWidth(TEXT1)); + ASSERT(test.GetWidth(TEXT1) == 200); + DUMP(test.GetWidth(FLAG)); + ASSERT(test.GetWidth(FLAG) == 0); + + LOG("------------------------"); + ASSERT(test.Get(TEST).IsVoid()); + + ValueMap m; + m(TEXT, "texttest")(NUMBER1, 123456)(A[2], 10)(FLAG, true)(FLAG2, "1"); + test.Set(m); + DUMP(test); + test = m; + DUMP(test); + + DDUMPC(S_TEST::GetColumnIds()); + DDUMP(SqlCompile(SQLITE3, ~S_TEST::ColumnSet())); + ASSERT(SqlCompile(SQLITE3, ~S_TEST::ColumnSet()) == "NUMBER1, TEXT1, A0, A1, A2, A3, A4, FLAG, FLAG2, NUMBER2, TEXT2, NUMBER, TEXT"); + DDUMP(SqlCompile(SQLITE3, ~S_TEST::ColumnSet("PREFIX_"))); + ASSERT(SqlCompile(SQLITE3, ~S_TEST::ColumnSet("PREFIX_")) == "PREFIX_NUMBER1, PREFIX_TEXT1, PREFIX_A0, PREFIX_A1, PREFIX_A2, PREFIX_A3, PREFIX_A4, PREFIX_FLAG, PREFIX_FLAG2, PREFIX_NUMBER2, PREFIX_TEXT2, PREFIX_NUMBER, PREFIX_TEXT"); + DDUMP(SqlCompile(SQLITE3, ~S_TEST::Of("TABLE"))); + ASSERT(SqlCompile(SQLITE3, ~S_TEST::Of("TABLE")) == "TABLE.NUMBER1, TABLE.TEXT1, TABLE.A0, TABLE.A1, TABLE.A2, TABLE.A3, TABLE.A4, TABLE.FLAG, TABLE.FLAG2, TABLE.NUMBER2, TABLE.TEXT2, TABLE.NUMBER, TABLE.TEXT"); + + LOG("--------- FINISHED"); +} diff --git a/autotest/S_type/S_type.sch b/autotest/S_type/S_type.sch new file mode 100644 index 000000000..db726cf49 --- /dev/null +++ b/autotest/S_type/S_type.sch @@ -0,0 +1,17 @@ +TABLE_ (BASE1) + INT_ (NUMBER1) + STRING_ (TEXT1, 200) + INT_ARRAY_ (A, 5) + BOOL_ (FLAG) + BOOL_ (FLAG2) +END_TABLE + +TABLE_ (BASE2) + INT_ (NUMBER2) + STRING_ (TEXT2, 200) +END_TABLE + +TABLE_II_ (TEST, BASE1, BASE2) + INT_ (NUMBER) + STRING_ (TEXT, 200) +END_TABLE diff --git a/autotest/S_type/S_type.upp b/autotest/S_type/S_type.upp new file mode 100644 index 000000000..c49092816 --- /dev/null +++ b/autotest/S_type/S_type.upp @@ -0,0 +1,13 @@ +description "Demonstrates a possible bug in Sqlite 3 interface\377"; + +uses + Sql, + plugin/sqlite3; + +file + S_type.sch, + S_type.cpp; + +mainconfig + "" = ""; + diff --git a/autotest/S_type/init b/autotest/S_type/init new file mode 100644 index 000000000..71c49d9b2 --- /dev/null +++ b/autotest/S_type/init @@ -0,0 +1,5 @@ +#ifndef _S_type_icpp_init_stub +#define _S_type_icpp_init_stub +#include "Sql/init" +#include "plugin/sqlite3/init" +#endif diff --git a/autotest/ScalarDate/ScalarDate.cpp b/autotest/ScalarDate/ScalarDate.cpp new file mode 100644 index 000000000..f48d0e9b8 --- /dev/null +++ b/autotest/ScalarDate/ScalarDate.cpp @@ -0,0 +1,21 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + Date d; + + d.Set(Null); + ASSERT(IsNull(d)); + + d.Set(0); + ASSERT(d == Date(0, 1, 1)); + + for(int i = 0; i < 800000; i++) { + d.Set(i); + Date d1 = d; + d.Set(d.Get()); + ASSERT(d1 == d); + } +} diff --git a/autotest/fail_crash/fail_crash.upp b/autotest/ScalarDate/ScalarDate.upp similarity index 72% rename from autotest/fail_crash/fail_crash.upp rename to autotest/ScalarDate/ScalarDate.upp index 63da2b834..9f0683410 100644 --- a/autotest/fail_crash/fail_crash.upp +++ b/autotest/ScalarDate/ScalarDate.upp @@ -2,7 +2,7 @@ uses Core; file - fail_crash.cpp; + ScalarDate.cpp; mainconfig "" = "SSE2"; diff --git a/autotest/ScalarDate/init b/autotest/ScalarDate/init new file mode 100644 index 000000000..23cd3f5b7 --- /dev/null +++ b/autotest/ScalarDate/init @@ -0,0 +1,4 @@ +#ifndef _ScalarDate_icpp_init_stub +#define _ScalarDate_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/Socket/Socket.cpp b/autotest/Socket/Socket.cpp new file mode 100644 index 000000000..b279786ed --- /dev/null +++ b/autotest/Socket/Socket.cpp @@ -0,0 +1,31 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + + TcpSocket socket; + + if(!socket.Connect("pop.gmail.com", 995)) { + LOG("Socket error encountered: " << socket.GetErrorDesc()); + Exit(1); + } + if(!socket.StartSSL()) { + LOG("Couldn't start SSL session."); + Exit(1); + } + + // 5 secs. + socket.Timeout(5000); + + String server_hello = socket.GetLine(); + + DUMP(server_hello); + DUMPHEX(server_hello); + + ASSERT(server_hello.StartsWith("+OK Gpop ready for requests from")); + + LOG("=========== OK"); +} diff --git a/autotest/Socket/Socket.upp b/autotest/Socket/Socket.upp new file mode 100644 index 000000000..046ee3e5f --- /dev/null +++ b/autotest/Socket/Socket.upp @@ -0,0 +1,10 @@ +uses + Core, + Core/SSL; + +file + Socket.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/Socket/init b/autotest/Socket/init new file mode 100644 index 000000000..21be07a92 --- /dev/null +++ b/autotest/Socket/init @@ -0,0 +1,5 @@ +#ifndef _Socket_icpp_init_stub +#define _Socket_icpp_init_stub +#include "Core/init" +#include "Core/SSL/init" +#endif diff --git a/autotest/SortedAMap/SortedAMap.upp b/autotest/SortedAMap/SortedAMap.upp new file mode 100644 index 000000000..f3e5f0133 --- /dev/null +++ b/autotest/SortedAMap/SortedAMap.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + main.cpp; + +mainconfig + "" = "SSE2 IVTEST"; + diff --git a/autotest/SortedAMap/init b/autotest/SortedAMap/init new file mode 100644 index 000000000..4b1d0902d --- /dev/null +++ b/autotest/SortedAMap/init @@ -0,0 +1,4 @@ +#ifndef _SortedAMap_icpp_init_stub +#define _SortedAMap_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/SortedAMap/main.cpp b/autotest/SortedAMap/main.cpp new file mode 100644 index 000000000..ca701b4ad --- /dev/null +++ b/autotest/SortedAMap/main.cpp @@ -0,0 +1,221 @@ +#include + +using namespace Upp; + +template +void BenchNTL(const char *file, Stream& out) { + FileIn in(file); + if (!in) { + out << "Cannot open input file.\n"; + return; + } + + C map; + + for(;;) { + int c = in.Get(); + if(c < 0) break; + if(IsAlpha(c) || c == '_') { + String id; + id.Cat(c); + c = in.Get(); + while(c >= 0 && (IsAlNum(c) || c == '_')) { + id.Cat(c); + c = in.Get(); + } + map.GetAdd(id, 0)++; + } + else + if(IsDigit(c)) + do c = in.Get(); + while(c >= 0 && (IsAlNum(c) || c == '.')); + } + + for(int i = 0; i < map.GetCount(); i++) + out << ~map.GetKey(i) << ": " << map[i] << '\n'; +} + +void BenchNTL2(const char *file, Stream& out) { + FileIn in(file); + if (!in) { + out << "Cannot open input file.\n"; + return; + } + + VectorMap map; + + for(;;) { + int c = in.Get(); + if(c < 0) break; + if(IsAlpha(c) || c == '_') { + String id; + id.Cat(c); + c = in.Get(); + while(c >= 0 && (IsAlNum(c) || c == '_')) { + id.Cat(c); + c = in.Get(); + } + map.GetAdd(id, 0)++; + } + else + if(IsDigit(c)) + do c = in.Get(); + while(c >= 0 && (IsAlNum(c) || c == '.')); + } + + Vector order = GetSortOrder(map.GetKeys()); + for(int i = 0; i < order.GetCount(); i++) + out << ~map.GetKey(order[i]) << ": " << map[order[i]] << '\n'; +} + +void BenchmarkMap() +{ + String fn; + int argc = CommandLine().GetCount(); + const Vector& argv = CommandLine(); + if(argc < 1) +#ifdef _DEBUG + fn = GetDataFile("main.cpp"); +#else + fn = GetHomeDirFile("test.txt"); +#endif + else + fn = argv[0]; + + { + FileOut out(GetHomeDirFile("ntl1.txt")); + BenchNTL< SortedVectorMap >(fn, out); + } + + { + FileOut out(GetHomeDirFile("ntl2.txt")); + BenchNTL< SortedArrayMap >(fn, out); + } + + { + FileOut out(GetHomeDirFile("ntl3.txt")); + BenchNTL2(fn, out); + } + + ASSERT(LoadFile(GetHomeDirFile("ntl1.txt")) == LoadFile(GetHomeDirFile("ntl2.txt")) && + LoadFile(GetHomeDirFile("ntl2.txt")) == LoadFile(GetHomeDirFile("ntl3.txt"))); + LOG("MATCH!"); +} + +template +void Test(T& map) +{ + map.Add(1, 10); + map.Add(20, 20); + map.Add(12, 20); + map.Add(10, 11); + map.Add(12) = 21; + map.Add(1) = 2; + + map.GetAdd(12) = 1234; + + DUMPM(map); + + DUMP(map.FindAdd(4, 2)); + + DUMPM(map); + + map.GetAdd(13) = 1313; + + ASSERT(map.Get(13) == 1313); + ASSERT(map.Get(1) == 10); + ASSERT(map.Get(10) == 11); + ASSERT(map.GetAdd(10) == 11); + ASSERT(map.GetAdd(15, 4321) == 4321); + + for(int i = 0; i < 1000; i++) + map.Add(i, Random(1000)); + + for(int i = 0; i < 1000; i++) + map.FindAdd(i, Random(1000)); + + typename T::Iterator it = map.Begin(); + typename T::KeyConstIterator ckit = map.KeyBegin(); + typename T::ConstIterator cit = map.Begin(); + for(int i = 0; i < map.GetCount(); i++) { + ASSERT(map.GetKey(i) == *ckit++); + ASSERT(map[i] == *it++); + ASSERT(map[i] == *cit++); + + typename T::Iterator q = map.GetIter(i); + ASSERT(map[i] == *q); + typename T::KeyConstIterator kq = map.KeyGetIter(i); + ASSERT(map.GetKey(i) == *kq); + } +} + +struct Foo : Moveable { + Vector a; +}; + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + + BenchmarkMap(); + + LOG("==========================="); + LOG("VectorMap"); + SortedVectorMap map; + Test(map); + + LOG("==========================="); + LOG("ArrayMap"); + SortedArrayMap amap; + Test(amap); + + LOG("------------"); + + SortedArrayMap > am; + am.Add(1, 11); + am.Add(2) = 12; + am.Add(3, new int(13)); + am.Create(4) = 14; + am.GetAdd(5) = 15; + am.GetAdd(6, 0); + am.GetAdd(6, 1) = 16; + am.GetAdd(7, 17); + + DDUMPM(am); + + ASSERT(am.GetCount() == 7); + for(int i = 0; i < am.GetCount(); i++) { + ASSERT(am.GetKey(i) == am[i] - 10); + } + + am.Remove(0); + + DDUMPM(am); + + ASSERT(am.GetCount() == 6); + for(int i = 0; i < am.GetCount(); i++) + ASSERT(am.GetKey(i) + 1 == am[i] - 10 + 1); + + delete am.Detach(0); + + DDUMPM(am); + + ASSERT(am.GetCount() == 5); + for(int i = 0; i < am.GetCount(); i++) + ASSERT(am.GetKey(i) + 2 == am[i] - 10 + 2); + + RDUMP(sizeof(Vector)); + RDUMP(sizeof(Array)); + RDUMP(sizeof(Index)); + RDUMP(sizeof(VectorMap)); + RDUMP(sizeof(InVector)); + RDUMP(sizeof(InArray)); + RDUMP(sizeof(SortedIndex)); + RDUMP(sizeof(SortedVectorMap)); + + { // Test that this compiles + SortedVectorMap mm; + Foo& x = mm.Add(1); + x.a.Add(12); + } +} diff --git a/autotest/SortedIndex/SortedIndex.cpp b/autotest/SortedIndex/SortedIndex.cpp new file mode 100644 index 000000000..d4c403df9 --- /dev/null +++ b/autotest/SortedIndex/SortedIndex.cpp @@ -0,0 +1,72 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_FILE|LOG_COUT); +// SeedRandom(); + + SortedIndex si0; + for(int i = 0; i < 10000; i++) { + int v = Random(100); + int q = si0.FindAdd(v); + ASSERT(si0[q] == v); + } + for(int i = 0; i < 100; i++) { + int q = si0.FindAdd(i); + } + ASSERT(si0.GetCount() == 100); + for(int i = 0; i < 100; i++) + ASSERT(si0[i] == i); + LOG("FindAdd passed"); + SortedIndex si; + int count = 0; + for(int i = 0; i < 1000000; i++) { + if(i % 1000 == 0) + LOG(i); + if(si.GetCount() > 1000 && Random(1000) == 0) { + si.Clear(); + count = 0; + } + int v = Random(100); + int h0 = si.FindUpperBound(v); + int q = si.Add(v); + count++; + ASSERT(h0 == q); + ASSERT(si[q] == v); + for(int pass = 0; pass < 2; pass++) { + ASSERT(si.GetCount() == count); + int l = si.FindLowerBound(v); + int h = si.FindUpperBound(v); + ASSERT(l == 0 || si[l - 1] < v); + ASSERT(l == si.GetCount() || si[l] >= v); + ASSERT(h == si.GetCount() || si[h] > v); + ASSERT(h == 0 || si[h - 1] <= v); + ASSERT(si.GetCount() == 0 || si.FindUpperBound(si.Top()) == si.GetCount()); + for(int i = l; i < h; i++) + ASSERT(si[i] == v); + int i = si.Find(v); + ASSERT(i < 0 ? l >= si.GetCount() || si[l] > v : l == i); + while(i >= 0) { + ASSERT(si[i] == v); + i = si.FindNext(i); + } + i = si.FindLast(v); + while(i >= 0) { + ASSERT(si[i] == v); + i = si.FindPrev(i); + } + if(i >= 0) + ASSERT(h - 1 == i); + if(si.GetCount() > 500 && Random(40) == 0) { + count -= h - l; + si.RemoveKey(v); + ASSERT(si.FindUpperBound(v) == si.FindLowerBound(v)); + } + v = Random(100); + } + } + + DDUMPC(si); +} diff --git a/autotest/SortedIndex/SortedIndex.upp b/autotest/SortedIndex/SortedIndex.upp new file mode 100644 index 000000000..fa85c4056 --- /dev/null +++ b/autotest/SortedIndex/SortedIndex.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + SortedIndex.cpp; + +mainconfig + "" = "SSE2 IVTEST"; + diff --git a/autotest/SortedIndex/init b/autotest/SortedIndex/init new file mode 100644 index 000000000..133abf445 --- /dev/null +++ b/autotest/SortedIndex/init @@ -0,0 +1,4 @@ +#ifndef _SortedIndex_icpp_init_stub +#define _SortedIndex_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/SplitJoin/SplitJoin.cpp b/autotest/SplitJoin/SplitJoin.cpp new file mode 100644 index 000000000..85dfd94da --- /dev/null +++ b/autotest/SplitJoin/SplitJoin.cpp @@ -0,0 +1,26 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + + Vector h = Split("alfa,beta,,gamma", ',', false); +// DUMP(Join(h, ",")); +// DUMP(Join(h, ",", true)); + + String a, b, c; + + SplitTo("one", ',', a, b, c); + + DUMP(SplitTo("one", ',', a, b, c)); + DUMP(SplitTo("one,two,,three", ',', a, b, c)); + DUMP(MakeTuple(a, b, c)); + DUMP(SplitTo("one,two,,three", ',', false, a, b, c)); + DUMP(MakeTuple(a, b, c)); + DUMP(SplitTo("one,two,,three", ",", a, b, c)); + DUMP(MakeTuple(a, b, c)); + DUMP(SplitTo("one,two,,three", ",", false, a, b, c)); + DUMP(MakeTuple(a, b, c)); +} diff --git a/autotest/SplitJoin/SplitJoin.upp b/autotest/SplitJoin/SplitJoin.upp new file mode 100644 index 000000000..670361e0b --- /dev/null +++ b/autotest/SplitJoin/SplitJoin.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + SplitJoin.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/SplitJoin/init b/autotest/SplitJoin/init new file mode 100644 index 000000000..269a315ed --- /dev/null +++ b/autotest/SplitJoin/init @@ -0,0 +1,4 @@ +#ifndef _SplitJoin_icpp_init_stub +#define _SplitJoin_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/SqlExp/SqlExp.cpp b/autotest/SqlExp/SqlExp.cpp new file mode 100644 index 000000000..fcf986adb --- /dev/null +++ b/autotest/SqlExp/SqlExp.cpp @@ -0,0 +1,231 @@ +#include + +using namespace Upp; + +#define MODEL +#define SCHEMADIALECT +#include +#include +#include + +SQLID(PH_SEQ) +SQLID(CASTKA) +SQLID(PH_POLOZKA) +SQLID(DATUM) +SQLID(PLAT_DTM) +SQLID(PLAT_DTM_SEQ) +SQLID(SEQ_POPLATEK) +SQLID(PRIPAD_SEQ) +SQLID(TXT) +SQLID(KATASTR_SEQ) +SQLID(ADRESA) +SQLID(ADRESA_SEQ) +SQLID(PAR_ADRESA_SEQ) +SQLID(KONTO) +SQLID(ROK) +SQLID(OBDOBI) +SQLID(KONTO_CON) +SQLID(B) +SQLID(C) +SQLID(OBEXPBI) + +void Exp0(int dialect, const char *dialectn, const char *sqlexp, SqlStatement x) +{ + LOG("\tTEST(" << dialectn << ",\n\t\t" << sqlexp << ",\n\t\t" + << AsCString(x.Get(dialect)) << "); // " << x.Get(dialect)); +} + +void Exp(const char *sqlexp, SqlStatement x) +{ + Exp0(MY_SQL, "MY_SQL", sqlexp, x); + Exp0(SQLITE3, "SQLITE3", sqlexp, x); + Exp0(ORACLE, "ORACLE", sqlexp, x); + Exp0(MSSQL, "MSSQL", sqlexp, x); + Exp0(PGSQL, "PGSQL", sqlexp, x); + Exp0(FIREBIRD, "FIREBIRD", sqlexp, x); + Exp0(DB2, "DB2", sqlexp, x); + LOG("// ---------------------------------"); +} + +#define EXP(x) Exp(#x, x) + +int NoQuotes(int c) +{ + return c == '\"' || c == '`' ? 0 : c; +} + +bool IsCid(int c) +{ + return IsAlNum(c) || c == '_' || c == '$'; +} + +void Test(int dialect, const char *dialectn, SqlStatement s, const char *q) +{ + String compiled = s.Get(dialect); + bool quote = false; + for(int i = 0; i < compiled.GetCount(); i++) { + if(compiled[i] == '\"' || compiled[i] == '`') + quote = !quote; + else + if(quote && !IsCid(compiled[i])) { + LOG("---------------------"); + LOG("Dialect " << dialectn); + LOG("Etalon " << q); + LOG("Compiled " << s.Get(dialect)); + LOG("FAILED QUOTES"); + #ifndef flagNOSTOP + NEVER(); + #endif + } + } + if(compiled != q) { + LOG("---------------------"); + LOG("Dialect " << dialectn); + LOG("Etalon " << q); + LOG("Compiled " << s.Get(dialect)); + LOG("FAILED"); + #ifndef flagNOSTOP + NEVER(); + #endif + } +} + +#define TEST(dialect, s, e) Test(dialect, #dialect, s, e) + +CONSOLE_APP_MAIN +{ + SqlId::UseQuotes(); + + Date date = Date(2011, 12, 31); + EXP(Select(A, B).From(TABLE1, TABLE2).OrderBy(B, C)); + EXP(Select(A, B).From(TABLE1, TABLE2).Where(A == 10).OrderBy(B, C)); + EXP(Select(A, B).From(SqlSet(TABLE1, TABLE2)).Where(A == 10).OrderBy(SqlSet(B, C))); + EXP(Select(PH_SEQ, SqlSum(CASTKA)).From(PH_POLOZKA).Where(DATUM <= date).GroupBy(PH_SEQ).Having(C == B)); + EXP(Insert(TABLE1)(A, 1)(B, 2)); + EXP(Insert(PLAT_DTM) + (PLAT_DTM_SEQ, NextVal(SEQ_POPLATEK)) + (PRIPAD_SEQ, 1111) + (DATUM) + (CASTKA) + (TXT) + .From(PLAT_DTM).Where(PRIPAD_SEQ == 2222)); + EXP(Select(KATASTR_SEQ).From(ADRESA) + .StartWith(PAR_ADRESA_SEQ == 1111) + .ConnectBy(Prior(ADRESA_SEQ) == PAR_ADRESA_SEQ) + | Select(KATASTR_SEQ).From(ADRESA) + .StartWith(ADRESA_SEQ == 2222) + .ConnectBy(Prior(PAR_ADRESA_SEQ) == ADRESA_SEQ)); + EXP(SqlUpdate(KONTO)(ROK, 1111)(OBEXPBI, 2222).Where(KONTO_CON == 3333)); + EXP(Select(23 * (ROK + 1)).From(TABLE1)); + EXP(Select(COLUMN1).From(TABLE1) | Select(COLUMN2).From(TABLE2)); + EXP(Select(COLUMN1).From(TABLE1) & Select(COLUMN2).From(TABLE2)); + EXP(Select(COLUMN1).From(TABLE1) - Select(COLUMN2).From(TABLE2)); + + EXP(Select(COL).From(TABLE1)); + EXP(Select(COL.Of(TABLE1)).From(TABLE1)); + EXP(Select(COL.As(A)).From(TABLE1)); + EXP(Select(COL&A).From(TABLE1)); + EXP(Select(COL[3]).From(TABLE1)); + EXP(Select(COLUMN1 % COLUMN2).From(TABLE1)); + EXP(Select(COLUMN1 | COLUMN2).From(TABLE1)); + EXP(Select(SqlFunc("any_fn", COL, 2)).From(TABLE1)); + EXP(Select(Distinct(COL)).From(TABLE1)); + EXP(Select(Distinct(SqlSet(COLUMN1, COLUMN2))).From(TABLE1)); + EXP(Select(All(COL)).From(TABLE1)); + EXP(Select(Count(COL)).From(TABLE1)); + EXP(Select(SqlAll()).From(TABLE1)); + EXP(Select(SqlCountRows()).From(TABLE1)); + EXP(Select(COL).From(TABLE1).OrderBy(Descending(COL))); + EXP(Select(SqlMax(COL)).From(TABLE1)); + EXP(Select(SqlMin(COL)).From(TABLE1)); + EXP(Select(SqlSum(COL)).From(TABLE1)); + EXP(Select(Avg(COL)).From(TABLE1)); + EXP(Select(Stddev(COL)).From(TABLE1)); + EXP(Select(Variance(COL)).From(TABLE1)); + EXP(Select(Greatest(COLUMN1, COLUMN2)).From(TABLE1)); + EXP(Select(Least(COLUMN1, COLUMN2)).From(TABLE1)); + EXP(Select(Upper(COL)).From(TABLE1)); + EXP(Select(Lower(COL)).From(TABLE1)); + EXP(Select(Substr(COL, 1)).From(TABLE1)); + EXP(Select(Substr(COL, 2, 1)).From(TABLE1)); + EXP(Select(Instr(COL, "hello")).From(TABLE1)); + EXP(Select(SqlNvl(COLUMN1, COLUMN2)).From(TABLE1)); + EXP(Select(NextVal(SEQ)).Get()); + EXP(Select(CurrVal(SEQ)).Get()); + EXP(Select(SqlArg()).From(TABLE1)); + EXP(Select(Coalesce(COLUMN1, "_")).From(TABLE1)); + EXP(Select(Coalesce(COLUMN1, "_").As("H")).From(TABLE1)); + EXP(Select(Coalesce(COLUMN1, "_").As(COLUMN2)).From(TABLE1)); + + EXP(Select(COL).From(TABLE1).Where(COL / 2 > 1 && COLUMN1 == "A" || COLUMN2 == Date(2006, 1, 1))); + EXP(Select(COL).From(TABLE1).Where(!(COL == 1))); + EXP(Select(COL).From(TABLE1).Where((COLUMN1 == 1) - (COLUMN2 == 1))); + EXP(Select(COL).From(TABLE1).Where(IsNull(COLUMN1))); + EXP(Select(COL).From(TABLE1).Where(NotNull(COLUMN1))); + EXP(Select(COL).From(TABLE1).Where(Like(COLUMN1, Wild("A*")))); + EXP(Select(COL).From(TABLE1).Where(NotLike(COLUMN1, Wild("A*")))); + EXP(Select(COL).From(TABLE1).Where(In(COL, Select(COL).From(TABLE1)))); + EXP(Select(COL).From(TABLE1).Where(COL == Select(COL).From(TABLE1))); + EXP(Select(COL).From(TABLE1).Where(COL == Select(COL).From(TABLE1).AsValue())); + EXP(Select(COL).From(TABLE1).Where(NotIn(COL, Select(COL).From(TABLE1)))); + EXP(Select(COL).From(TABLE1).Where(COL != Select(COL).From(TABLE1))); + EXP(Select(COL).From(TABLE1).Where(Exists(Select(COL).From(TABLE1)))); + EXP(Select(COL).From(TABLE1).Where(NotExists(Select(COL).From(TABLE1)))); + + EXP(Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) | Select(COLUMN2).From(TABLE2)))); + EXP(Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) & Select(COLUMN2).From(TABLE2)))); + EXP(Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) - Select(COLUMN2).From(TABLE2)))); + EXP(Select(COL).From(TABLE1).Where(COL == 0).GroupBy(COL).Having(COL == 0).OrderBy(Descending(COL))); + EXP(Select(COL, Count(Select(SqlAll()).From(TABLE1))).From(TABLE1).Where(COL == 0).GroupBy(COL) + .Having(COL == 0).OrderBy(Descending(COL))); + EXP(Select(COL).From(TABLE1).Limit(100)); + EXP(Select(COL).From(TABLE1).Limit(100, 10)); + EXP(Select(COL).From(TABLE1).Offset(20)); + EXP(Select(25 * 34).Get()); + EXP(Select(COL).From(TABLE1).Hint("hint")); + EXP(Select(COL).From(TABLE1).InnerJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1))); + EXP(Select(COL).From(TABLE1).LeftJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1))); + EXP(Select(COL).From(TABLE1).RightJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1))); + EXP(Select(COL).From(TABLE1).FullJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1))); + + EXP(Delete(TABLE1).Where(COL < 0)); + + EXP(Insert(TABLE1)(COLUMN1, 12)(COLUMN2, "hello")(COL, Date(2007, 1, 1))); + EXP(Insert(TABLE1)(COLUMN1, 12)(COLUMN2)(COL).From(TABLE1).Where(COL >= 0)); + + EXP(Insert(TABLE1)(COLUMN1)(COL, SqlSum(COLUMN2)).From(TABLE1).Where(COL >= 0).GroupBy(COLUMN1)); + EXP(Insert(TABLE1)(COLUMN1)(COL, SqlSum(COLUMN2)).From(TABLE1).Where(COL >= 0).GroupBy(COLUMN1).Having(COLUMN2 > 10)); + + EXP(Insert(TABLE1)(COLUMN1, 1).Where(NotExists(Select(ID).From(TABLE1).Where(COLUMN1 == 1)))); + + EXP(Update(TABLE1)(COLUMN1, 13)(COLUMN2, "world").Where(COL > Date(2007, 1, 1))); + + EXP(Insert(TABLE1)(COL, Select(COLUMN1).From(TABLE1).Where(COLUMN2 == 21).AsValue())); + + EXP(Select(COL).From(Select(COL).From(TABLE1))); + EXP(Select(COL).From(Select(COL).From(TABLE1).AsTable(TABLE2))); + EXP(Select(COL).From(TABLE1).LeftJoin(Select(COL).From(TABLE1)).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1))); + EXP(Select(COL).From(TABLE1).LeftJoin(Select(COL).From(TABLE1).AsTable(TABLE2)).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1))); + + EXP(Select(TABLE1(COL, COLUMN1)).From(TABLE1)); + + EXP(Select(ID(ID, NAME, LASTNAME)).From(TABLE1).LeftJoinRef(TABLE2).Where(BDATE == Date(2011, 12, 9))); + EXP(Select(ID(ID, NAME, LASTNAME)).From(TABLE1).LeftJoinRef(TABLE2).On(IsNull(BDATE)).Where(BDATE == Date(2011, 12, 9))); + + EXP(Select(SqlAll().Of(TABLE1)).From(TABLE1)); + + EXP(Select(SqlTxt("TEST.*")).From(TABLE1)); + + EXP(Select(SqlTxt("123")).From(TABLE1)); + + VectorMap m; + for(int i = 0; i < 10; i++) + m.Add(i, AsString(i)); + + EXP(Select(ID).From(TABLE1).Where(ID == SqlSetFrom(m))); + + LOG("\n\n\n========================================================================="); + #include "Test.i" + + LOG("OK"); +} diff --git a/autotest/SqlExp/SqlExp.sch b/autotest/SqlExp/SqlExp.sch new file mode 100644 index 000000000..e8e1a47f2 --- /dev/null +++ b/autotest/SqlExp/SqlExp.sch @@ -0,0 +1,20 @@ +TABLE_(TABLE1) + INT_ (ID) + STRING_ (NAME, 200) PRIMARY_KEY + STRING_ (LASTNAME, 200) + INT_ (COLUMN1) + INT_ (COL) + INT_ (SEQ) + INT_ (BDATE) + INT_ (A) +END_TABLE + +TABLE_(TABLE2) + INT (ID) PRIMARY_KEY + INT_ (TABLE1_ID) REFERENCES(TABLE1) + STRING (NAME, 200) + STRING (LASTNAME, 200) + INT (BDATE) + INT_ (COLUMN2) + INT (SEQ) +END_TABLE diff --git a/autotest/SqlExp/SqlExp.upp b/autotest/SqlExp/SqlExp.upp new file mode 100644 index 000000000..1d6fe6c71 --- /dev/null +++ b/autotest/SqlExp/SqlExp.upp @@ -0,0 +1,15 @@ +description "SqlExp unit testing\377"; + +uses + Core, + Sql; + +file + SqlExp.sch, + Test.i, + SqlExp.cpp; + +mainconfig + "" = "", + "" = "NOSTOP"; + diff --git a/autotest/SqlExp/Test.i b/autotest/SqlExp/Test.i new file mode 100644 index 000000000..3c18d2661 --- /dev/null +++ b/autotest/SqlExp/Test.i @@ -0,0 +1,2068 @@ + TEST(MY_SQL, + Select(A, B).From(TABLE1, TABLE2).OrderBy(B, C), + "select `A`, `B` from `TABLE1`, `TABLE2` order by `B`, `C`"); // select `A`, `B` from `TABLE1`, `TABLE2` order by `B`, `C` + TEST(SQLITE3, + Select(A, B).From(TABLE1, TABLE2).OrderBy(B, C), + "select \"A\", \"B\" from \"TABLE1\", \"TABLE2\" order by \"B\", \"C\""); // select "A", "B" from "TABLE1", "TABLE2" order by "B", "C" + TEST(ORACLE, + Select(A, B).From(TABLE1, TABLE2).OrderBy(B, C), + "select \"A\", \"B\" from \"TABLE1\", \"TABLE2\" order by \"B\", \"C\""); // select "A", "B" from "TABLE1", "TABLE2" order by "B", "C" + TEST(MSSQL, + Select(A, B).From(TABLE1, TABLE2).OrderBy(B, C), + "select \"A\", \"B\" from \"TABLE1\", \"TABLE2\" order by \"B\", \"C\""); // select "A", "B" from "TABLE1", "TABLE2" order by "B", "C" + TEST(PGSQL, + Select(A, B).From(TABLE1, TABLE2).OrderBy(B, C), + "select \"A\", \"B\" from \"TABLE1\", \"TABLE2\" order by \"B\", \"C\""); // select "A", "B" from "TABLE1", "TABLE2" order by "B", "C" + TEST(FIREBIRD, + Select(A, B).From(TABLE1, TABLE2).OrderBy(B, C), + "select \"A\", \"B\" from \"TABLE1\", \"TABLE2\" order by \"B\", \"C\""); // select "A", "B" from "TABLE1", "TABLE2" order by "B", "C" + TEST(DB2, + Select(A, B).From(TABLE1, TABLE2).OrderBy(B, C), + "select \"A\", \"B\" from \"TABLE1\", \"TABLE2\" order by \"B\", \"C\""); // select "A", "B" from "TABLE1", "TABLE2" order by "B", "C" +// --------------------------------- + TEST(MY_SQL, + Select(A, B).From(TABLE1, TABLE2).Where(A == 10).OrderBy(B, C), + "select `A`, `B` from `TABLE1`, `TABLE2` where `A` = 10 order by `B`, `C`"); // select `A`, `B` from `TABLE1`, `TABLE2` where `A` = 10 order by `B`, `C` + TEST(SQLITE3, + Select(A, B).From(TABLE1, TABLE2).Where(A == 10).OrderBy(B, C), + "select \"A\", \"B\" from \"TABLE1\", \"TABLE2\" where \"A\" = 10 order by \"B\", \"C\""); // select "A", "B" from "TABLE1", "TABLE2" where "A" = 10 order by "B", "C" + TEST(ORACLE, + Select(A, B).From(TABLE1, TABLE2).Where(A == 10).OrderBy(B, C), + "select \"A\", \"B\" from \"TABLE1\", \"TABLE2\" where \"A\" = 10 order by \"B\", \"C\""); // select "A", "B" from "TABLE1", "TABLE2" where "A" = 10 order by "B", "C" + TEST(MSSQL, + Select(A, B).From(TABLE1, TABLE2).Where(A == 10).OrderBy(B, C), + "select \"A\", \"B\" from \"TABLE1\", \"TABLE2\" where \"A\" = 10 order by \"B\", \"C\""); // select "A", "B" from "TABLE1", "TABLE2" where "A" = 10 order by "B", "C" + TEST(PGSQL, + Select(A, B).From(TABLE1, TABLE2).Where(A == 10).OrderBy(B, C), + "select \"A\", \"B\" from \"TABLE1\", \"TABLE2\" where \"A\" = 10 order by \"B\", \"C\""); // select "A", "B" from "TABLE1", "TABLE2" where "A" = 10 order by "B", "C" + TEST(FIREBIRD, + Select(A, B).From(TABLE1, TABLE2).Where(A == 10).OrderBy(B, C), + "select \"A\", \"B\" from \"TABLE1\", \"TABLE2\" where \"A\" = 10 order by \"B\", \"C\""); // select "A", "B" from "TABLE1", "TABLE2" where "A" = 10 order by "B", "C" + TEST(DB2, + Select(A, B).From(TABLE1, TABLE2).Where(A == 10).OrderBy(B, C), + "select \"A\", \"B\" from \"TABLE1\", \"TABLE2\" where \"A\" = 10 order by \"B\", \"C\""); // select "A", "B" from "TABLE1", "TABLE2" where "A" = 10 order by "B", "C" +// --------------------------------- + TEST(MY_SQL, + Select(A, B).From(SqlSet(TABLE1, TABLE2)).Where(A == 10).OrderBy(SqlSet(B, C)), + "select `A`, `B` from `TABLE1`, `TABLE2` where `A` = 10 order by `B`, `C`"); // select `A`, `B` from `TABLE1`, `TABLE2` where `A` = 10 order by `B`, `C` + TEST(SQLITE3, + Select(A, B).From(SqlSet(TABLE1, TABLE2)).Where(A == 10).OrderBy(SqlSet(B, C)), + "select \"A\", \"B\" from \"TABLE1\", \"TABLE2\" where \"A\" = 10 order by \"B\", \"C\""); // select "A", "B" from "TABLE1", "TABLE2" where "A" = 10 order by "B", "C" + TEST(ORACLE, + Select(A, B).From(SqlSet(TABLE1, TABLE2)).Where(A == 10).OrderBy(SqlSet(B, C)), + "select \"A\", \"B\" from \"TABLE1\", \"TABLE2\" where \"A\" = 10 order by \"B\", \"C\""); // select "A", "B" from "TABLE1", "TABLE2" where "A" = 10 order by "B", "C" + TEST(MSSQL, + Select(A, B).From(SqlSet(TABLE1, TABLE2)).Where(A == 10).OrderBy(SqlSet(B, C)), + "select \"A\", \"B\" from \"TABLE1\", \"TABLE2\" where \"A\" = 10 order by \"B\", \"C\""); // select "A", "B" from "TABLE1", "TABLE2" where "A" = 10 order by "B", "C" + TEST(PGSQL, + Select(A, B).From(SqlSet(TABLE1, TABLE2)).Where(A == 10).OrderBy(SqlSet(B, C)), + "select \"A\", \"B\" from \"TABLE1\", \"TABLE2\" where \"A\" = 10 order by \"B\", \"C\""); // select "A", "B" from "TABLE1", "TABLE2" where "A" = 10 order by "B", "C" + TEST(FIREBIRD, + Select(A, B).From(SqlSet(TABLE1, TABLE2)).Where(A == 10).OrderBy(SqlSet(B, C)), + "select \"A\", \"B\" from \"TABLE1\", \"TABLE2\" where \"A\" = 10 order by \"B\", \"C\""); // select "A", "B" from "TABLE1", "TABLE2" where "A" = 10 order by "B", "C" + TEST(DB2, + Select(A, B).From(SqlSet(TABLE1, TABLE2)).Where(A == 10).OrderBy(SqlSet(B, C)), + "select \"A\", \"B\" from \"TABLE1\", \"TABLE2\" where \"A\" = 10 order by \"B\", \"C\""); // select "A", "B" from "TABLE1", "TABLE2" where "A" = 10 order by "B", "C" +// --------------------------------- + TEST(MY_SQL, + Select(PH_SEQ, SqlSum(CASTKA)).From(PH_POLOZKA).Where(DATUM <= date).GroupBy(PH_SEQ).Having(C == B), + "select `PH_SEQ`, sum(`CASTKA`) from `PH_POLOZKA` where `DATUM` <= '2011-12-31' group by `PH_SEQ` having `C` = `B`"); // select `PH_SEQ`, sum(`CASTKA`) from `PH_POLOZKA` where `DATUM` <= '2011-12-31' group by `PH_SEQ` having `C` = `B` + TEST(SQLITE3, + Select(PH_SEQ, SqlSum(CASTKA)).From(PH_POLOZKA).Where(DATUM <= date).GroupBy(PH_SEQ).Having(C == B), + "select \"PH_SEQ\", sum(\"CASTKA\") from \"PH_POLOZKA\" where \"DATUM\" <= '2011-12-31' group by \"PH_SEQ\" having \"C\" = \"B\""); // select "PH_SEQ", sum("CASTKA") from "PH_POLOZKA" where "DATUM" <= '2011-12-31' group by "PH_SEQ" having "C" = "B" + TEST(ORACLE, + Select(PH_SEQ, SqlSum(CASTKA)).From(PH_POLOZKA).Where(DATUM <= date).GroupBy(PH_SEQ).Having(C == B), + "select \"PH_SEQ\", sum(\"CASTKA\") from \"PH_POLOZKA\" where \"DATUM\" <= to_date('2011/12/31', 'SYYYY/MM/DD') group by \"PH_SEQ\" having \"C\" = \"B\""); // select "PH_SEQ", sum("CASTKA") from "PH_POLOZKA" where "DATUM" <= to_date('2011/12/31', 'SYYYY/MM/DD') group by "PH_SEQ" having "C" = "B" + TEST(MSSQL, + Select(PH_SEQ, SqlSum(CASTKA)).From(PH_POLOZKA).Where(DATUM <= date).GroupBy(PH_SEQ).Having(C == B), + "select \"PH_SEQ\", sum(\"CASTKA\") from \"PH_POLOZKA\" where \"DATUM\" <= convert(datetime, '2011/12/31', 120) group by \"PH_SEQ\" having \"C\" = \"B\""); // select "PH_SEQ", sum("CASTKA") from "PH_POLOZKA" where "DATUM" <= convert(datetime, '2011/12/31', 120) group by "PH_SEQ" having "C" = "B" + TEST(PGSQL, + Select(PH_SEQ, SqlSum(CASTKA)).From(PH_POLOZKA).Where(DATUM <= date).GroupBy(PH_SEQ).Having(C == B), + "select \"PH_SEQ\", sum(\"CASTKA\") from \"PH_POLOZKA\" where \"DATUM\" <= date '2011-12-31' group by \"PH_SEQ\" having \"C\" = \"B\""); // select "PH_SEQ", sum("CASTKA") from "PH_POLOZKA" where "DATUM" <= date '2011-12-31' group by "PH_SEQ" having "C" = "B" + TEST(FIREBIRD, + Select(PH_SEQ, SqlSum(CASTKA)).From(PH_POLOZKA).Where(DATUM <= date).GroupBy(PH_SEQ).Having(C == B), + "select \"PH_SEQ\", sum(\"CASTKA\") from \"PH_POLOZKA\" where \"DATUM\" <= '2011-12-31' group by \"PH_SEQ\" having \"C\" = \"B\""); // select "PH_SEQ", sum("CASTKA") from "PH_POLOZKA" where "DATUM" <= '2011-12-31' group by "PH_SEQ" having "C" = "B" + TEST(DB2, + Select(PH_SEQ, SqlSum(CASTKA)).From(PH_POLOZKA).Where(DATUM <= date).GroupBy(PH_SEQ).Having(C == B), + "select \"PH_SEQ\", sum(\"CASTKA\") from \"PH_POLOZKA\" where \"DATUM\" <= '2011-12-31' group by \"PH_SEQ\" having \"C\" = \"B\""); // select "PH_SEQ", sum("CASTKA") from "PH_POLOZKA" where "DATUM" <= '2011-12-31' group by "PH_SEQ" having "C" = "B" +// --------------------------------- + TEST(MY_SQL, + Insert(TABLE1)(A, 1)(B, 2), + "insert into `TABLE1`(`A`, `B`) values (1, 2)"); // insert into `TABLE1`(`A`, `B`) values (1, 2) + TEST(SQLITE3, + Insert(TABLE1)(A, 1)(B, 2), + "insert into \"TABLE1\"(\"A\", \"B\") values (1, 2)"); // insert into "TABLE1"("A", "B") values (1, 2) + TEST(ORACLE, + Insert(TABLE1)(A, 1)(B, 2), + "insert into \"TABLE1\"(\"A\", \"B\") values (1, 2)"); // insert into "TABLE1"("A", "B") values (1, 2) + TEST(MSSQL, + Insert(TABLE1)(A, 1)(B, 2), + "insert into \"TABLE1\"(\"A\", \"B\") values (1, 2)"); // insert into "TABLE1"("A", "B") values (1, 2) + TEST(PGSQL, + Insert(TABLE1)(A, 1)(B, 2), + "insert into \"TABLE1\"(\"A\", \"B\") values (1, 2)"); // insert into "TABLE1"("A", "B") values (1, 2) + TEST(FIREBIRD, + Insert(TABLE1)(A, 1)(B, 2), + "insert into \"TABLE1\"(\"A\", \"B\") values (1, 2)"); // insert into "TABLE1"("A", "B") values (1, 2) + TEST(DB2, + Insert(TABLE1)(A, 1)(B, 2), + "insert into \"TABLE1\"(\"A\", \"B\") values (1, 2)"); // insert into "TABLE1"("A", "B") values (1, 2) +// --------------------------------- + TEST(MY_SQL, + Insert(PLAT_DTM) (PLAT_DTM_SEQ, NextVal(SEQ_POPLATEK)) (PRIPAD_SEQ, 1111) (DATUM) (CASTKA) (TXT) .From(PLAT_DTM).Where(PRIPAD_SEQ == 2222), + "insert into `PLAT_DTM`(`PLAT_DTM_SEQ`, `PRIPAD_SEQ`, `DATUM`, `CASTKA`, `TXT`) select `SEQ_POPLATEK`.NEXTVAL, 1111, `DATUM`, `CASTKA`, `TXT` from `PLAT_DTM` where `PRIPAD_SEQ` = 2222"); // insert into `PLAT_DTM`(`PLAT_DTM_SEQ`, `PRIPAD_SEQ`, `DATUM`, `CASTKA`, `TXT`) select `SEQ_POPLATEK`.NEXTVAL, 1111, `DATUM`, `CASTKA`, `TXT` from `PLAT_DTM` where `PRIPAD_SEQ` = 2222 + TEST(SQLITE3, + Insert(PLAT_DTM) (PLAT_DTM_SEQ, NextVal(SEQ_POPLATEK)) (PRIPAD_SEQ, 1111) (DATUM) (CASTKA) (TXT) .From(PLAT_DTM).Where(PRIPAD_SEQ == 2222), + "insert into \"PLAT_DTM\"(\"PLAT_DTM_SEQ\", \"PRIPAD_SEQ\", \"DATUM\", \"CASTKA\", \"TXT\") select \"SEQ_POPLATEK\".NEXTVAL, 1111, \"DATUM\", \"CASTKA\", \"TXT\" from \"PLAT_DTM\" where \"PRIPAD_SEQ\" = 2222"); // insert into "PLAT_DTM"("PLAT_DTM_SEQ", "PRIPAD_SEQ", "DATUM", "CASTKA", "TXT") select "SEQ_POPLATEK".NEXTVAL, 1111, "DATUM", "CASTKA", "TXT" from "PLAT_DTM" where "PRIPAD_SEQ" = 2222 + TEST(ORACLE, + Insert(PLAT_DTM) (PLAT_DTM_SEQ, NextVal(SEQ_POPLATEK)) (PRIPAD_SEQ, 1111) (DATUM) (CASTKA) (TXT) .From(PLAT_DTM).Where(PRIPAD_SEQ == 2222), + "insert into \"PLAT_DTM\"(\"PLAT_DTM_SEQ\", \"PRIPAD_SEQ\", \"DATUM\", \"CASTKA\", \"TXT\") select \"SEQ_POPLATEK\".NEXTVAL, 1111, \"DATUM\", \"CASTKA\", \"TXT\" from \"PLAT_DTM\" where \"PRIPAD_SEQ\" = 2222"); // insert into "PLAT_DTM"("PLAT_DTM_SEQ", "PRIPAD_SEQ", "DATUM", "CASTKA", "TXT") select "SEQ_POPLATEK".NEXTVAL, 1111, "DATUM", "CASTKA", "TXT" from "PLAT_DTM" where "PRIPAD_SEQ" = 2222 + TEST(MSSQL, + Insert(PLAT_DTM) (PLAT_DTM_SEQ, NextVal(SEQ_POPLATEK)) (PRIPAD_SEQ, 1111) (DATUM) (CASTKA) (TXT) .From(PLAT_DTM).Where(PRIPAD_SEQ == 2222), + "insert into \"PLAT_DTM\"(\"PLAT_DTM_SEQ\", \"PRIPAD_SEQ\", \"DATUM\", \"CASTKA\", \"TXT\") select \"SEQ_POPLATEK\".NEXTVAL, 1111, \"DATUM\", \"CASTKA\", \"TXT\" from \"PLAT_DTM\" where \"PRIPAD_SEQ\" = 2222"); // insert into "PLAT_DTM"("PLAT_DTM_SEQ", "PRIPAD_SEQ", "DATUM", "CASTKA", "TXT") select "SEQ_POPLATEK".NEXTVAL, 1111, "DATUM", "CASTKA", "TXT" from "PLAT_DTM" where "PRIPAD_SEQ" = 2222 + TEST(PGSQL, + Insert(PLAT_DTM) (PLAT_DTM_SEQ, NextVal(SEQ_POPLATEK)) (PRIPAD_SEQ, 1111) (DATUM) (CASTKA) (TXT) .From(PLAT_DTM).Where(PRIPAD_SEQ == 2222), + "insert into \"PLAT_DTM\"(\"PLAT_DTM_SEQ\", \"PRIPAD_SEQ\", \"DATUM\", \"CASTKA\", \"TXT\") select nextval('SEQ_POPLATEK'), 1111, \"DATUM\", \"CASTKA\", \"TXT\" from \"PLAT_DTM\" where \"PRIPAD_SEQ\" = 2222"); // insert into "PLAT_DTM"("PLAT_DTM_SEQ", "PRIPAD_SEQ", "DATUM", "CASTKA", "TXT") select nextval('SEQ_POPLATEK'), 1111, "DATUM", "CASTKA", "TXT" from "PLAT_DTM" where "PRIPAD_SEQ" = 2222 + TEST(FIREBIRD, + Insert(PLAT_DTM) (PLAT_DTM_SEQ, NextVal(SEQ_POPLATEK)) (PRIPAD_SEQ, 1111) (DATUM) (CASTKA) (TXT) .From(PLAT_DTM).Where(PRIPAD_SEQ == 2222), + "insert into \"PLAT_DTM\"(\"PLAT_DTM_SEQ\", \"PRIPAD_SEQ\", \"DATUM\", \"CASTKA\", \"TXT\") select \"SEQ_POPLATEK\".NEXTVAL, 1111, \"DATUM\", \"CASTKA\", \"TXT\" from \"PLAT_DTM\" where \"PRIPAD_SEQ\" = 2222"); // insert into "PLAT_DTM"("PLAT_DTM_SEQ", "PRIPAD_SEQ", "DATUM", "CASTKA", "TXT") select "SEQ_POPLATEK".NEXTVAL, 1111, "DATUM", "CASTKA", "TXT" from "PLAT_DTM" where "PRIPAD_SEQ" = 2222 + TEST(DB2, + Insert(PLAT_DTM) (PLAT_DTM_SEQ, NextVal(SEQ_POPLATEK)) (PRIPAD_SEQ, 1111) (DATUM) (CASTKA) (TXT) .From(PLAT_DTM).Where(PRIPAD_SEQ == 2222), + "insert into \"PLAT_DTM\"(\"PLAT_DTM_SEQ\", \"PRIPAD_SEQ\", \"DATUM\", \"CASTKA\", \"TXT\") select \"SEQ_POPLATEK\".NEXTVAL, 1111, \"DATUM\", \"CASTKA\", \"TXT\" from \"PLAT_DTM\" where \"PRIPAD_SEQ\" = 2222"); // insert into "PLAT_DTM"("PLAT_DTM_SEQ", "PRIPAD_SEQ", "DATUM", "CASTKA", "TXT") select "SEQ_POPLATEK".NEXTVAL, 1111, "DATUM", "CASTKA", "TXT" from "PLAT_DTM" where "PRIPAD_SEQ" = 2222 +// --------------------------------- + TEST(MY_SQL, + Select(KATASTR_SEQ).From(ADRESA) .StartWith(PAR_ADRESA_SEQ == 1111) .ConnectBy(Prior(ADRESA_SEQ) == PAR_ADRESA_SEQ) | Select(KATASTR_SEQ).From(ADRESA) .StartWith(ADRESA_SEQ == 2222) .ConnectBy(Prior(PAR_ADRESA_SEQ) == ADRESA_SEQ), + "((select `KATASTR_SEQ` from `ADRESA` start with `PAR_ADRESA_SEQ` = 1111 connect by prior `ADRESA_SEQ` = `PAR_ADRESA_SEQ`) union (select `KATASTR_SEQ` from `ADRESA` start with `ADRESA_SEQ` = 2222 connect by prior `PAR_ADRESA_SEQ` = `ADRESA_SEQ`))"); // ((select `KATASTR_SEQ` from `ADRESA` start with `PAR_ADRESA_SEQ` = 1111 connect by prior `ADRESA_SEQ` = `PAR_ADRESA_SEQ`) union (select `KATASTR_SEQ` from `ADRESA` start with `ADRESA_SEQ` = 2222 connect by prior `PAR_ADRESA_SEQ` = `ADRESA_SEQ`)) + TEST(SQLITE3, + Select(KATASTR_SEQ).From(ADRESA) .StartWith(PAR_ADRESA_SEQ == 1111) .ConnectBy(Prior(ADRESA_SEQ) == PAR_ADRESA_SEQ) | Select(KATASTR_SEQ).From(ADRESA) .StartWith(ADRESA_SEQ == 2222) .ConnectBy(Prior(PAR_ADRESA_SEQ) == ADRESA_SEQ), + "select \"KATASTR_SEQ\" from \"ADRESA\" start with \"PAR_ADRESA_SEQ\" = 1111 connect by prior \"ADRESA_SEQ\" = \"PAR_ADRESA_SEQ\" union select \"KATASTR_SEQ\" from \"ADRESA\" start with \"ADRESA_SEQ\" = 2222 connect by prior \"PAR_ADRESA_SEQ\" = \"ADRESA_SEQ\""); // select "KATASTR_SEQ" from "ADRESA" start with "PAR_ADRESA_SEQ" = 1111 connect by prior "ADRESA_SEQ" = "PAR_ADRESA_SEQ" union select "KATASTR_SEQ" from "ADRESA" start with "ADRESA_SEQ" = 2222 connect by prior "PAR_ADRESA_SEQ" = "ADRESA_SEQ" + TEST(ORACLE, + Select(KATASTR_SEQ).From(ADRESA) .StartWith(PAR_ADRESA_SEQ == 1111) .ConnectBy(Prior(ADRESA_SEQ) == PAR_ADRESA_SEQ) | Select(KATASTR_SEQ).From(ADRESA) .StartWith(ADRESA_SEQ == 2222) .ConnectBy(Prior(PAR_ADRESA_SEQ) == ADRESA_SEQ), + "((select \"KATASTR_SEQ\" from \"ADRESA\" start with \"PAR_ADRESA_SEQ\" = 1111 connect by prior \"ADRESA_SEQ\" = \"PAR_ADRESA_SEQ\") union (select \"KATASTR_SEQ\" from \"ADRESA\" start with \"ADRESA_SEQ\" = 2222 connect by prior \"PAR_ADRESA_SEQ\" = \"ADRESA_SEQ\"))"); // ((select "KATASTR_SEQ" from "ADRESA" start with "PAR_ADRESA_SEQ" = 1111 connect by prior "ADRESA_SEQ" = "PAR_ADRESA_SEQ") union (select "KATASTR_SEQ" from "ADRESA" start with "ADRESA_SEQ" = 2222 connect by prior "PAR_ADRESA_SEQ" = "ADRESA_SEQ")) + TEST(MSSQL, + Select(KATASTR_SEQ).From(ADRESA) .StartWith(PAR_ADRESA_SEQ == 1111) .ConnectBy(Prior(ADRESA_SEQ) == PAR_ADRESA_SEQ) | Select(KATASTR_SEQ).From(ADRESA) .StartWith(ADRESA_SEQ == 2222) .ConnectBy(Prior(PAR_ADRESA_SEQ) == ADRESA_SEQ), + "((select \"KATASTR_SEQ\" from \"ADRESA\" start with \"PAR_ADRESA_SEQ\" = 1111 connect by prior \"ADRESA_SEQ\" = \"PAR_ADRESA_SEQ\") union (select \"KATASTR_SEQ\" from \"ADRESA\" start with \"ADRESA_SEQ\" = 2222 connect by prior \"PAR_ADRESA_SEQ\" = \"ADRESA_SEQ\"))"); // ((select "KATASTR_SEQ" from "ADRESA" start with "PAR_ADRESA_SEQ" = 1111 connect by prior "ADRESA_SEQ" = "PAR_ADRESA_SEQ") union (select "KATASTR_SEQ" from "ADRESA" start with "ADRESA_SEQ" = 2222 connect by prior "PAR_ADRESA_SEQ" = "ADRESA_SEQ")) + TEST(PGSQL, + Select(KATASTR_SEQ).From(ADRESA) .StartWith(PAR_ADRESA_SEQ == 1111) .ConnectBy(Prior(ADRESA_SEQ) == PAR_ADRESA_SEQ) | Select(KATASTR_SEQ).From(ADRESA) .StartWith(ADRESA_SEQ == 2222) .ConnectBy(Prior(PAR_ADRESA_SEQ) == ADRESA_SEQ), + "((select \"KATASTR_SEQ\" from \"ADRESA\" start with \"PAR_ADRESA_SEQ\" = 1111 connect by prior \"ADRESA_SEQ\" = \"PAR_ADRESA_SEQ\") union (select \"KATASTR_SEQ\" from \"ADRESA\" start with \"ADRESA_SEQ\" = 2222 connect by prior \"PAR_ADRESA_SEQ\" = \"ADRESA_SEQ\"))"); // ((select "KATASTR_SEQ" from "ADRESA" start with "PAR_ADRESA_SEQ" = 1111 connect by prior "ADRESA_SEQ" = "PAR_ADRESA_SEQ") union (select "KATASTR_SEQ" from "ADRESA" start with "ADRESA_SEQ" = 2222 connect by prior "PAR_ADRESA_SEQ" = "ADRESA_SEQ")) + TEST(FIREBIRD, + Select(KATASTR_SEQ).From(ADRESA) .StartWith(PAR_ADRESA_SEQ == 1111) .ConnectBy(Prior(ADRESA_SEQ) == PAR_ADRESA_SEQ) | Select(KATASTR_SEQ).From(ADRESA) .StartWith(ADRESA_SEQ == 2222) .ConnectBy(Prior(PAR_ADRESA_SEQ) == ADRESA_SEQ), + "((select \"KATASTR_SEQ\" from \"ADRESA\" start with \"PAR_ADRESA_SEQ\" = 1111 connect by prior \"ADRESA_SEQ\" = \"PAR_ADRESA_SEQ\") union (select \"KATASTR_SEQ\" from \"ADRESA\" start with \"ADRESA_SEQ\" = 2222 connect by prior \"PAR_ADRESA_SEQ\" = \"ADRESA_SEQ\"))"); // ((select "KATASTR_SEQ" from "ADRESA" start with "PAR_ADRESA_SEQ" = 1111 connect by prior "ADRESA_SEQ" = "PAR_ADRESA_SEQ") union (select "KATASTR_SEQ" from "ADRESA" start with "ADRESA_SEQ" = 2222 connect by prior "PAR_ADRESA_SEQ" = "ADRESA_SEQ")) + TEST(DB2, + Select(KATASTR_SEQ).From(ADRESA) .StartWith(PAR_ADRESA_SEQ == 1111) .ConnectBy(Prior(ADRESA_SEQ) == PAR_ADRESA_SEQ) | Select(KATASTR_SEQ).From(ADRESA) .StartWith(ADRESA_SEQ == 2222) .ConnectBy(Prior(PAR_ADRESA_SEQ) == ADRESA_SEQ), + "((select \"KATASTR_SEQ\" from \"ADRESA\" start with \"PAR_ADRESA_SEQ\" = 1111 connect by prior \"ADRESA_SEQ\" = \"PAR_ADRESA_SEQ\") union (select \"KATASTR_SEQ\" from \"ADRESA\" start with \"ADRESA_SEQ\" = 2222 connect by prior \"PAR_ADRESA_SEQ\" = \"ADRESA_SEQ\"))"); // ((select "KATASTR_SEQ" from "ADRESA" start with "PAR_ADRESA_SEQ" = 1111 connect by prior "ADRESA_SEQ" = "PAR_ADRESA_SEQ") union (select "KATASTR_SEQ" from "ADRESA" start with "ADRESA_SEQ" = 2222 connect by prior "PAR_ADRESA_SEQ" = "ADRESA_SEQ")) +// --------------------------------- + TEST(MY_SQL, + SqlUpdate(KONTO)(ROK, 1111)(OBEXPBI, 2222).Where(KONTO_CON == 3333), + "update `KONTO` set `ROK` = 1111, `OBEXPBI` = 2222 where `KONTO_CON` = 3333"); // update `KONTO` set `ROK` = 1111, `OBEXPBI` = 2222 where `KONTO_CON` = 3333 + TEST(SQLITE3, + SqlUpdate(KONTO)(ROK, 1111)(OBEXPBI, 2222).Where(KONTO_CON == 3333), + "update \"KONTO\" set \"ROK\" = 1111, \"OBEXPBI\" = 2222 where \"KONTO_CON\" = 3333"); // update "KONTO" set "ROK" = 1111, "OBEXPBI" = 2222 where "KONTO_CON" = 3333 + TEST(ORACLE, + SqlUpdate(KONTO)(ROK, 1111)(OBEXPBI, 2222).Where(KONTO_CON == 3333), + "update \"KONTO\" set \"ROK\" = 1111, \"OBEXPBI\" = 2222 where \"KONTO_CON\" = 3333"); // update "KONTO" set "ROK" = 1111, "OBEXPBI" = 2222 where "KONTO_CON" = 3333 + TEST(MSSQL, + SqlUpdate(KONTO)(ROK, 1111)(OBEXPBI, 2222).Where(KONTO_CON == 3333), + "update \"KONTO\" set \"ROK\" = 1111, \"OBEXPBI\" = 2222 where \"KONTO_CON\" = 3333"); // update "KONTO" set "ROK" = 1111, "OBEXPBI" = 2222 where "KONTO_CON" = 3333 + TEST(PGSQL, + SqlUpdate(KONTO)(ROK, 1111)(OBEXPBI, 2222).Where(KONTO_CON == 3333), + "update \"KONTO\" set \"ROK\" = 1111, \"OBEXPBI\" = 2222 where \"KONTO_CON\" = 3333"); // update "KONTO" set "ROK" = 1111, "OBEXPBI" = 2222 where "KONTO_CON" = 3333 + TEST(FIREBIRD, + SqlUpdate(KONTO)(ROK, 1111)(OBEXPBI, 2222).Where(KONTO_CON == 3333), + "update \"KONTO\" set \"ROK\" = 1111, \"OBEXPBI\" = 2222 where \"KONTO_CON\" = 3333"); // update "KONTO" set "ROK" = 1111, "OBEXPBI" = 2222 where "KONTO_CON" = 3333 + TEST(DB2, + SqlUpdate(KONTO)(ROK, 1111)(OBEXPBI, 2222).Where(KONTO_CON == 3333), + "update \"KONTO\" set \"ROK\" = 1111, \"OBEXPBI\" = 2222 where \"KONTO_CON\" = 3333"); // update "KONTO" set "ROK" = 1111, "OBEXPBI" = 2222 where "KONTO_CON" = 3333 +// --------------------------------- + TEST(MY_SQL, + Select(23 * (ROK + 1)).From(TABLE1), + "select 23 * (`ROK` + 1) from `TABLE1`"); // select 23 * (`ROK` + 1) from `TABLE1` + TEST(SQLITE3, + Select(23 * (ROK + 1)).From(TABLE1), + "select 23 * (\"ROK\" + 1) from \"TABLE1\""); // select 23 * ("ROK" + 1) from "TABLE1" + TEST(ORACLE, + Select(23 * (ROK + 1)).From(TABLE1), + "select 23 * (\"ROK\" + 1) from \"TABLE1\""); // select 23 * ("ROK" + 1) from "TABLE1" + TEST(MSSQL, + Select(23 * (ROK + 1)).From(TABLE1), + "select 23 * (\"ROK\" + 1) from \"TABLE1\""); // select 23 * ("ROK" + 1) from "TABLE1" + TEST(PGSQL, + Select(23 * (ROK + 1)).From(TABLE1), + "select 23 * (\"ROK\" + 1) from \"TABLE1\""); // select 23 * ("ROK" + 1) from "TABLE1" + TEST(FIREBIRD, + Select(23 * (ROK + 1)).From(TABLE1), + "select 23 * (\"ROK\" + 1) from \"TABLE1\""); // select 23 * ("ROK" + 1) from "TABLE1" + TEST(DB2, + Select(23 * (ROK + 1)).From(TABLE1), + "select 23 * (\"ROK\" + 1) from \"TABLE1\""); // select 23 * ("ROK" + 1) from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(COLUMN1).From(TABLE1) | Select(COLUMN2).From(TABLE2), + "((select `COLUMN1` from `TABLE1`) union (select `COLUMN2` from `TABLE2`))"); // ((select `COLUMN1` from `TABLE1`) union (select `COLUMN2` from `TABLE2`)) + TEST(SQLITE3, + Select(COLUMN1).From(TABLE1) | Select(COLUMN2).From(TABLE2), + "select \"COLUMN1\" from \"TABLE1\" union select \"COLUMN2\" from \"TABLE2\""); // select "COLUMN1" from "TABLE1" union select "COLUMN2" from "TABLE2" + TEST(ORACLE, + Select(COLUMN1).From(TABLE1) | Select(COLUMN2).From(TABLE2), + "((select \"COLUMN1\" from \"TABLE1\") union (select \"COLUMN2\" from \"TABLE2\"))"); // ((select "COLUMN1" from "TABLE1") union (select "COLUMN2" from "TABLE2")) + TEST(MSSQL, + Select(COLUMN1).From(TABLE1) | Select(COLUMN2).From(TABLE2), + "((select \"COLUMN1\" from \"TABLE1\") union (select \"COLUMN2\" from \"TABLE2\"))"); // ((select "COLUMN1" from "TABLE1") union (select "COLUMN2" from "TABLE2")) + TEST(PGSQL, + Select(COLUMN1).From(TABLE1) | Select(COLUMN2).From(TABLE2), + "((select \"COLUMN1\" from \"TABLE1\") union (select \"COLUMN2\" from \"TABLE2\"))"); // ((select "COLUMN1" from "TABLE1") union (select "COLUMN2" from "TABLE2")) + TEST(FIREBIRD, + Select(COLUMN1).From(TABLE1) | Select(COLUMN2).From(TABLE2), + "((select \"COLUMN1\" from \"TABLE1\") union (select \"COLUMN2\" from \"TABLE2\"))"); // ((select "COLUMN1" from "TABLE1") union (select "COLUMN2" from "TABLE2")) + TEST(DB2, + Select(COLUMN1).From(TABLE1) | Select(COLUMN2).From(TABLE2), + "((select \"COLUMN1\" from \"TABLE1\") union (select \"COLUMN2\" from \"TABLE2\"))"); // ((select "COLUMN1" from "TABLE1") union (select "COLUMN2" from "TABLE2")) +// --------------------------------- + TEST(MY_SQL, + Select(COLUMN1).From(TABLE1) & Select(COLUMN2).From(TABLE2), + "((select `COLUMN1` from `TABLE1`) intersect (select `COLUMN2` from `TABLE2`))"); // ((select `COLUMN1` from `TABLE1`) intersect (select `COLUMN2` from `TABLE2`)) + TEST(SQLITE3, + Select(COLUMN1).From(TABLE1) & Select(COLUMN2).From(TABLE2), + "select \"COLUMN1\" from \"TABLE1\" intersect select \"COLUMN2\" from \"TABLE2\""); // select "COLUMN1" from "TABLE1" intersect select "COLUMN2" from "TABLE2" + TEST(ORACLE, + Select(COLUMN1).From(TABLE1) & Select(COLUMN2).From(TABLE2), + "((select \"COLUMN1\" from \"TABLE1\") intersect (select \"COLUMN2\" from \"TABLE2\"))"); // ((select "COLUMN1" from "TABLE1") intersect (select "COLUMN2" from "TABLE2")) + TEST(MSSQL, + Select(COLUMN1).From(TABLE1) & Select(COLUMN2).From(TABLE2), + "((select \"COLUMN1\" from \"TABLE1\") intersect (select \"COLUMN2\" from \"TABLE2\"))"); // ((select "COLUMN1" from "TABLE1") intersect (select "COLUMN2" from "TABLE2")) + TEST(PGSQL, + Select(COLUMN1).From(TABLE1) & Select(COLUMN2).From(TABLE2), + "((select \"COLUMN1\" from \"TABLE1\") intersect (select \"COLUMN2\" from \"TABLE2\"))"); // ((select "COLUMN1" from "TABLE1") intersect (select "COLUMN2" from "TABLE2")) + TEST(FIREBIRD, + Select(COLUMN1).From(TABLE1) & Select(COLUMN2).From(TABLE2), + "((select \"COLUMN1\" from \"TABLE1\") intersect (select \"COLUMN2\" from \"TABLE2\"))"); // ((select "COLUMN1" from "TABLE1") intersect (select "COLUMN2" from "TABLE2")) + TEST(DB2, + Select(COLUMN1).From(TABLE1) & Select(COLUMN2).From(TABLE2), + "((select \"COLUMN1\" from \"TABLE1\") intersect (select \"COLUMN2\" from \"TABLE2\"))"); // ((select "COLUMN1" from "TABLE1") intersect (select "COLUMN2" from "TABLE2")) +// --------------------------------- + TEST(MY_SQL, + Select(COLUMN1).From(TABLE1) - Select(COLUMN2).From(TABLE2), + "((select `COLUMN1` from `TABLE1`) minus (select `COLUMN2` from `TABLE2`))"); // ((select `COLUMN1` from `TABLE1`) minus (select `COLUMN2` from `TABLE2`)) + TEST(SQLITE3, + Select(COLUMN1).From(TABLE1) - Select(COLUMN2).From(TABLE2), + "select \"COLUMN1\" from \"TABLE1\" except select \"COLUMN2\" from \"TABLE2\""); // select "COLUMN1" from "TABLE1" except select "COLUMN2" from "TABLE2" + TEST(ORACLE, + Select(COLUMN1).From(TABLE1) - Select(COLUMN2).From(TABLE2), + "((select \"COLUMN1\" from \"TABLE1\") minus (select \"COLUMN2\" from \"TABLE2\"))"); // ((select "COLUMN1" from "TABLE1") minus (select "COLUMN2" from "TABLE2")) + TEST(MSSQL, + Select(COLUMN1).From(TABLE1) - Select(COLUMN2).From(TABLE2), + "((select \"COLUMN1\" from \"TABLE1\") except (select \"COLUMN2\" from \"TABLE2\"))"); // ((select "COLUMN1" from "TABLE1") except (select "COLUMN2" from "TABLE2")) + TEST(PGSQL, + Select(COLUMN1).From(TABLE1) - Select(COLUMN2).From(TABLE2), + "((select \"COLUMN1\" from \"TABLE1\") except (select \"COLUMN2\" from \"TABLE2\"))"); // ((select "COLUMN1" from "TABLE1") except (select "COLUMN2" from "TABLE2")) + TEST(FIREBIRD, + Select(COLUMN1).From(TABLE1) - Select(COLUMN2).From(TABLE2), + "((select \"COLUMN1\" from \"TABLE1\") minus (select \"COLUMN2\" from \"TABLE2\"))"); // ((select "COLUMN1" from "TABLE1") minus (select "COLUMN2" from "TABLE2")) + TEST(DB2, + Select(COLUMN1).From(TABLE1) - Select(COLUMN2).From(TABLE2), + "((select \"COLUMN1\" from \"TABLE1\") minus (select \"COLUMN2\" from \"TABLE2\"))"); // ((select "COLUMN1" from "TABLE1") minus (select "COLUMN2" from "TABLE2")) +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1), + "select `COL` from `TABLE1`"); // select `COL` from `TABLE1` + TEST(SQLITE3, + Select(COL).From(TABLE1), + "select \"COL\" from \"TABLE1\""); // select "COL" from "TABLE1" + TEST(ORACLE, + Select(COL).From(TABLE1), + "select \"COL\" from \"TABLE1\""); // select "COL" from "TABLE1" + TEST(MSSQL, + Select(COL).From(TABLE1), + "select \"COL\" from \"TABLE1\""); // select "COL" from "TABLE1" + TEST(PGSQL, + Select(COL).From(TABLE1), + "select \"COL\" from \"TABLE1\""); // select "COL" from "TABLE1" + TEST(FIREBIRD, + Select(COL).From(TABLE1), + "select \"COL\" from \"TABLE1\""); // select "COL" from "TABLE1" + TEST(DB2, + Select(COL).From(TABLE1), + "select \"COL\" from \"TABLE1\""); // select "COL" from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(COL.Of(TABLE1)).From(TABLE1), + "select `TABLE1`.`COL` from `TABLE1`"); // select `TABLE1`.`COL` from `TABLE1` + TEST(SQLITE3, + Select(COL.Of(TABLE1)).From(TABLE1), + "select \"TABLE1\".\"COL\" from \"TABLE1\""); // select "TABLE1"."COL" from "TABLE1" + TEST(ORACLE, + Select(COL.Of(TABLE1)).From(TABLE1), + "select \"TABLE1\".\"COL\" from \"TABLE1\""); // select "TABLE1"."COL" from "TABLE1" + TEST(MSSQL, + Select(COL.Of(TABLE1)).From(TABLE1), + "select \"TABLE1\".\"COL\" from \"TABLE1\""); // select "TABLE1"."COL" from "TABLE1" + TEST(PGSQL, + Select(COL.Of(TABLE1)).From(TABLE1), + "select \"TABLE1\".\"COL\" from \"TABLE1\""); // select "TABLE1"."COL" from "TABLE1" + TEST(FIREBIRD, + Select(COL.Of(TABLE1)).From(TABLE1), + "select \"TABLE1\".\"COL\" from \"TABLE1\""); // select "TABLE1"."COL" from "TABLE1" + TEST(DB2, + Select(COL.Of(TABLE1)).From(TABLE1), + "select \"TABLE1\".\"COL\" from \"TABLE1\""); // select "TABLE1"."COL" from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(COL.As(A)).From(TABLE1), + "select `COL` `A` from `TABLE1`"); // select `COL` `A` from `TABLE1` + TEST(SQLITE3, + Select(COL.As(A)).From(TABLE1), + "select \"COL\" \"A\" from \"TABLE1\""); // select "COL" "A" from "TABLE1" + TEST(ORACLE, + Select(COL.As(A)).From(TABLE1), + "select \"COL\" \"A\" from \"TABLE1\""); // select "COL" "A" from "TABLE1" + TEST(MSSQL, + Select(COL.As(A)).From(TABLE1), + "select \"COL\" as \"A\" from \"TABLE1\""); // select "COL" as "A" from "TABLE1" + TEST(PGSQL, + Select(COL.As(A)).From(TABLE1), + "select \"COL\" as \"A\" from \"TABLE1\""); // select "COL" as "A" from "TABLE1" + TEST(FIREBIRD, + Select(COL.As(A)).From(TABLE1), + "select \"COL\" \"A\" from \"TABLE1\""); // select "COL" "A" from "TABLE1" + TEST(DB2, + Select(COL.As(A)).From(TABLE1), + "select \"COL\" \"A\" from \"TABLE1\""); // select "COL" "A" from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(COL&A).From(TABLE1), + "select `COL$A` from `TABLE1`"); // select `COL$A` from `TABLE1` + TEST(SQLITE3, + Select(COL&A).From(TABLE1), + "select \"COL$A\" from \"TABLE1\""); // select "COL$A" from "TABLE1" + TEST(ORACLE, + Select(COL&A).From(TABLE1), + "select \"COL$A\" from \"TABLE1\""); // select "COL$A" from "TABLE1" + TEST(MSSQL, + Select(COL&A).From(TABLE1), + "select \"COL$A\" from \"TABLE1\""); // select "COL$A" from "TABLE1" + TEST(PGSQL, + Select(COL&A).From(TABLE1), + "select \"COL$A\" from \"TABLE1\""); // select "COL$A" from "TABLE1" + TEST(FIREBIRD, + Select(COL&A).From(TABLE1), + "select \"COL$A\" from \"TABLE1\""); // select "COL$A" from "TABLE1" + TEST(DB2, + Select(COL&A).From(TABLE1), + "select \"COL$A\" from \"TABLE1\""); // select "COL$A" from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(COL[3]).From(TABLE1), + "select `COL3` from `TABLE1`"); // select `COL3` from `TABLE1` + TEST(SQLITE3, + Select(COL[3]).From(TABLE1), + "select \"COL3\" from \"TABLE1\""); // select "COL3" from "TABLE1" + TEST(ORACLE, + Select(COL[3]).From(TABLE1), + "select \"COL3\" from \"TABLE1\""); // select "COL3" from "TABLE1" + TEST(MSSQL, + Select(COL[3]).From(TABLE1), + "select \"COL3\" from \"TABLE1\""); // select "COL3" from "TABLE1" + TEST(PGSQL, + Select(COL[3]).From(TABLE1), + "select \"COL3\" from \"TABLE1\""); // select "COL3" from "TABLE1" + TEST(FIREBIRD, + Select(COL[3]).From(TABLE1), + "select \"COL3\" from \"TABLE1\""); // select "COL3" from "TABLE1" + TEST(DB2, + Select(COL[3]).From(TABLE1), + "select \"COL3\" from \"TABLE1\""); // select "COL3" from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(COLUMN1 % COLUMN2).From(TABLE1), + "select mod(`COLUMN1`, `COLUMN2`) from `TABLE1`"); // select mod(`COLUMN1`, `COLUMN2`) from `TABLE1` + TEST(SQLITE3, + Select(COLUMN1 % COLUMN2).From(TABLE1), + "select mod(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select mod("COLUMN1", "COLUMN2") from "TABLE1" + TEST(ORACLE, + Select(COLUMN1 % COLUMN2).From(TABLE1), + "select mod(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select mod("COLUMN1", "COLUMN2") from "TABLE1" + TEST(MSSQL, + Select(COLUMN1 % COLUMN2).From(TABLE1), + "select mod(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select mod("COLUMN1", "COLUMN2") from "TABLE1" + TEST(PGSQL, + Select(COLUMN1 % COLUMN2).From(TABLE1), + "select mod(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select mod("COLUMN1", "COLUMN2") from "TABLE1" + TEST(FIREBIRD, + Select(COLUMN1 % COLUMN2).From(TABLE1), + "select mod(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select mod("COLUMN1", "COLUMN2") from "TABLE1" + TEST(DB2, + Select(COLUMN1 % COLUMN2).From(TABLE1), + "select mod(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select mod("COLUMN1", "COLUMN2") from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(COLUMN1 | COLUMN2).From(TABLE1), + "select `COLUMN1` + `COLUMN2` from `TABLE1`"); // select `COLUMN1` + `COLUMN2` from `TABLE1` + TEST(SQLITE3, + Select(COLUMN1 | COLUMN2).From(TABLE1), + "select \"COLUMN1\" || \"COLUMN2\" from \"TABLE1\""); // select "COLUMN1" || "COLUMN2" from "TABLE1" + TEST(ORACLE, + Select(COLUMN1 | COLUMN2).From(TABLE1), + "select \"COLUMN1\" || \"COLUMN2\" from \"TABLE1\""); // select "COLUMN1" || "COLUMN2" from "TABLE1" + TEST(MSSQL, + Select(COLUMN1 | COLUMN2).From(TABLE1), + "select \"COLUMN1\" + \"COLUMN2\" from \"TABLE1\""); // select "COLUMN1" + "COLUMN2" from "TABLE1" + TEST(PGSQL, + Select(COLUMN1 | COLUMN2).From(TABLE1), + "select \"COLUMN1\" || \"COLUMN2\" from \"TABLE1\""); // select "COLUMN1" || "COLUMN2" from "TABLE1" + TEST(FIREBIRD, + Select(COLUMN1 | COLUMN2).From(TABLE1), + "select \"COLUMN1\" + \"COLUMN2\" from \"TABLE1\""); // select "COLUMN1" + "COLUMN2" from "TABLE1" + TEST(DB2, + Select(COLUMN1 | COLUMN2).From(TABLE1), + "select \"COLUMN1\" + \"COLUMN2\" from \"TABLE1\""); // select "COLUMN1" + "COLUMN2" from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(SqlFunc("any_fn", COL, 2)).From(TABLE1), + "select any_fn(`COL`, 2) from `TABLE1`"); // select any_fn(`COL`, 2) from `TABLE1` + TEST(SQLITE3, + Select(SqlFunc("any_fn", COL, 2)).From(TABLE1), + "select any_fn(\"COL\", 2) from \"TABLE1\""); // select any_fn("COL", 2) from "TABLE1" + TEST(ORACLE, + Select(SqlFunc("any_fn", COL, 2)).From(TABLE1), + "select any_fn(\"COL\", 2) from \"TABLE1\""); // select any_fn("COL", 2) from "TABLE1" + TEST(MSSQL, + Select(SqlFunc("any_fn", COL, 2)).From(TABLE1), + "select any_fn(\"COL\", 2) from \"TABLE1\""); // select any_fn("COL", 2) from "TABLE1" + TEST(PGSQL, + Select(SqlFunc("any_fn", COL, 2)).From(TABLE1), + "select any_fn(\"COL\", 2) from \"TABLE1\""); // select any_fn("COL", 2) from "TABLE1" + TEST(FIREBIRD, + Select(SqlFunc("any_fn", COL, 2)).From(TABLE1), + "select any_fn(\"COL\", 2) from \"TABLE1\""); // select any_fn("COL", 2) from "TABLE1" + TEST(DB2, + Select(SqlFunc("any_fn", COL, 2)).From(TABLE1), + "select any_fn(\"COL\", 2) from \"TABLE1\""); // select any_fn("COL", 2) from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(Distinct(COL)).From(TABLE1), + "select distinct `COL` from `TABLE1`"); // select distinct `COL` from `TABLE1` + TEST(SQLITE3, + Select(Distinct(COL)).From(TABLE1), + "select distinct \"COL\" from \"TABLE1\""); // select distinct "COL" from "TABLE1" + TEST(ORACLE, + Select(Distinct(COL)).From(TABLE1), + "select distinct \"COL\" from \"TABLE1\""); // select distinct "COL" from "TABLE1" + TEST(MSSQL, + Select(Distinct(COL)).From(TABLE1), + "select distinct \"COL\" from \"TABLE1\""); // select distinct "COL" from "TABLE1" + TEST(PGSQL, + Select(Distinct(COL)).From(TABLE1), + "select distinct \"COL\" from \"TABLE1\""); // select distinct "COL" from "TABLE1" + TEST(FIREBIRD, + Select(Distinct(COL)).From(TABLE1), + "select distinct \"COL\" from \"TABLE1\""); // select distinct "COL" from "TABLE1" + TEST(DB2, + Select(Distinct(COL)).From(TABLE1), + "select distinct \"COL\" from \"TABLE1\""); // select distinct "COL" from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(Distinct(SqlSet(COLUMN1, COLUMN2))).From(TABLE1), + "select distinct `COLUMN1`, `COLUMN2` from `TABLE1`"); // select distinct `COLUMN1`, `COLUMN2` from `TABLE1` + TEST(SQLITE3, + Select(Distinct(SqlSet(COLUMN1, COLUMN2))).From(TABLE1), + "select distinct \"COLUMN1\", \"COLUMN2\" from \"TABLE1\""); // select distinct "COLUMN1", "COLUMN2" from "TABLE1" + TEST(ORACLE, + Select(Distinct(SqlSet(COLUMN1, COLUMN2))).From(TABLE1), + "select distinct \"COLUMN1\", \"COLUMN2\" from \"TABLE1\""); // select distinct "COLUMN1", "COLUMN2" from "TABLE1" + TEST(MSSQL, + Select(Distinct(SqlSet(COLUMN1, COLUMN2))).From(TABLE1), + "select distinct \"COLUMN1\", \"COLUMN2\" from \"TABLE1\""); // select distinct "COLUMN1", "COLUMN2" from "TABLE1" + TEST(PGSQL, + Select(Distinct(SqlSet(COLUMN1, COLUMN2))).From(TABLE1), + "select distinct \"COLUMN1\", \"COLUMN2\" from \"TABLE1\""); // select distinct "COLUMN1", "COLUMN2" from "TABLE1" + TEST(FIREBIRD, + Select(Distinct(SqlSet(COLUMN1, COLUMN2))).From(TABLE1), + "select distinct \"COLUMN1\", \"COLUMN2\" from \"TABLE1\""); // select distinct "COLUMN1", "COLUMN2" from "TABLE1" + TEST(DB2, + Select(Distinct(SqlSet(COLUMN1, COLUMN2))).From(TABLE1), + "select distinct \"COLUMN1\", \"COLUMN2\" from \"TABLE1\""); // select distinct "COLUMN1", "COLUMN2" from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(All(COL)).From(TABLE1), + "select all `COL` from `TABLE1`"); // select all `COL` from `TABLE1` + TEST(SQLITE3, + Select(All(COL)).From(TABLE1), + "select all \"COL\" from \"TABLE1\""); // select all "COL" from "TABLE1" + TEST(ORACLE, + Select(All(COL)).From(TABLE1), + "select all \"COL\" from \"TABLE1\""); // select all "COL" from "TABLE1" + TEST(MSSQL, + Select(All(COL)).From(TABLE1), + "select all \"COL\" from \"TABLE1\""); // select all "COL" from "TABLE1" + TEST(PGSQL, + Select(All(COL)).From(TABLE1), + "select all \"COL\" from \"TABLE1\""); // select all "COL" from "TABLE1" + TEST(FIREBIRD, + Select(All(COL)).From(TABLE1), + "select all \"COL\" from \"TABLE1\""); // select all "COL" from "TABLE1" + TEST(DB2, + Select(All(COL)).From(TABLE1), + "select all \"COL\" from \"TABLE1\""); // select all "COL" from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(Count(COL)).From(TABLE1), + "select count(`COL`) from `TABLE1`"); // select count(`COL`) from `TABLE1` + TEST(SQLITE3, + Select(Count(COL)).From(TABLE1), + "select count(\"COL\") from \"TABLE1\""); // select count("COL") from "TABLE1" + TEST(ORACLE, + Select(Count(COL)).From(TABLE1), + "select count(\"COL\") from \"TABLE1\""); // select count("COL") from "TABLE1" + TEST(MSSQL, + Select(Count(COL)).From(TABLE1), + "select count(\"COL\") from \"TABLE1\""); // select count("COL") from "TABLE1" + TEST(PGSQL, + Select(Count(COL)).From(TABLE1), + "select count(\"COL\") from \"TABLE1\""); // select count("COL") from "TABLE1" + TEST(FIREBIRD, + Select(Count(COL)).From(TABLE1), + "select count(\"COL\") from \"TABLE1\""); // select count("COL") from "TABLE1" + TEST(DB2, + Select(Count(COL)).From(TABLE1), + "select count(\"COL\") from \"TABLE1\""); // select count("COL") from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(SqlAll()).From(TABLE1), + "select * from `TABLE1`"); // select * from `TABLE1` + TEST(SQLITE3, + Select(SqlAll()).From(TABLE1), + "select * from \"TABLE1\""); // select * from "TABLE1" + TEST(ORACLE, + Select(SqlAll()).From(TABLE1), + "select * from \"TABLE1\""); // select * from "TABLE1" + TEST(MSSQL, + Select(SqlAll()).From(TABLE1), + "select * from \"TABLE1\""); // select * from "TABLE1" + TEST(PGSQL, + Select(SqlAll()).From(TABLE1), + "select * from \"TABLE1\""); // select * from "TABLE1" + TEST(FIREBIRD, + Select(SqlAll()).From(TABLE1), + "select * from \"TABLE1\""); // select * from "TABLE1" + TEST(DB2, + Select(SqlAll()).From(TABLE1), + "select * from \"TABLE1\""); // select * from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(SqlCountRows()).From(TABLE1), + "select count(*) from `TABLE1`"); // select count(*) from `TABLE1` + TEST(SQLITE3, + Select(SqlCountRows()).From(TABLE1), + "select count(*) from \"TABLE1\""); // select count(*) from "TABLE1" + TEST(ORACLE, + Select(SqlCountRows()).From(TABLE1), + "select count(*) from \"TABLE1\""); // select count(*) from "TABLE1" + TEST(MSSQL, + Select(SqlCountRows()).From(TABLE1), + "select count(*) from \"TABLE1\""); // select count(*) from "TABLE1" + TEST(PGSQL, + Select(SqlCountRows()).From(TABLE1), + "select count(*) from \"TABLE1\""); // select count(*) from "TABLE1" + TEST(FIREBIRD, + Select(SqlCountRows()).From(TABLE1), + "select count(*) from \"TABLE1\""); // select count(*) from "TABLE1" + TEST(DB2, + Select(SqlCountRows()).From(TABLE1), + "select count(*) from \"TABLE1\""); // select count(*) from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).OrderBy(Descending(COL)), + "select `COL` from `TABLE1` order by `COL` desc"); // select `COL` from `TABLE1` order by `COL` desc + TEST(SQLITE3, + Select(COL).From(TABLE1).OrderBy(Descending(COL)), + "select \"COL\" from \"TABLE1\" order by \"COL\" desc"); // select "COL" from "TABLE1" order by "COL" desc + TEST(ORACLE, + Select(COL).From(TABLE1).OrderBy(Descending(COL)), + "select \"COL\" from \"TABLE1\" order by \"COL\" desc"); // select "COL" from "TABLE1" order by "COL" desc + TEST(MSSQL, + Select(COL).From(TABLE1).OrderBy(Descending(COL)), + "select \"COL\" from \"TABLE1\" order by \"COL\" desc"); // select "COL" from "TABLE1" order by "COL" desc + TEST(PGSQL, + Select(COL).From(TABLE1).OrderBy(Descending(COL)), + "select \"COL\" from \"TABLE1\" order by \"COL\" desc"); // select "COL" from "TABLE1" order by "COL" desc + TEST(FIREBIRD, + Select(COL).From(TABLE1).OrderBy(Descending(COL)), + "select \"COL\" from \"TABLE1\" order by \"COL\" desc"); // select "COL" from "TABLE1" order by "COL" desc + TEST(DB2, + Select(COL).From(TABLE1).OrderBy(Descending(COL)), + "select \"COL\" from \"TABLE1\" order by \"COL\" desc"); // select "COL" from "TABLE1" order by "COL" desc +// --------------------------------- + TEST(MY_SQL, + Select(SqlMax(COL)).From(TABLE1), + "select max(`COL`) from `TABLE1`"); // select max(`COL`) from `TABLE1` + TEST(SQLITE3, + Select(SqlMax(COL)).From(TABLE1), + "select max(\"COL\") from \"TABLE1\""); // select max("COL") from "TABLE1" + TEST(ORACLE, + Select(SqlMax(COL)).From(TABLE1), + "select max(\"COL\") from \"TABLE1\""); // select max("COL") from "TABLE1" + TEST(MSSQL, + Select(SqlMax(COL)).From(TABLE1), + "select max(\"COL\") from \"TABLE1\""); // select max("COL") from "TABLE1" + TEST(PGSQL, + Select(SqlMax(COL)).From(TABLE1), + "select max(\"COL\") from \"TABLE1\""); // select max("COL") from "TABLE1" + TEST(FIREBIRD, + Select(SqlMax(COL)).From(TABLE1), + "select max(\"COL\") from \"TABLE1\""); // select max("COL") from "TABLE1" + TEST(DB2, + Select(SqlMax(COL)).From(TABLE1), + "select max(\"COL\") from \"TABLE1\""); // select max("COL") from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(SqlMin(COL)).From(TABLE1), + "select min(`COL`) from `TABLE1`"); // select min(`COL`) from `TABLE1` + TEST(SQLITE3, + Select(SqlMin(COL)).From(TABLE1), + "select min(\"COL\") from \"TABLE1\""); // select min("COL") from "TABLE1" + TEST(ORACLE, + Select(SqlMin(COL)).From(TABLE1), + "select min(\"COL\") from \"TABLE1\""); // select min("COL") from "TABLE1" + TEST(MSSQL, + Select(SqlMin(COL)).From(TABLE1), + "select min(\"COL\") from \"TABLE1\""); // select min("COL") from "TABLE1" + TEST(PGSQL, + Select(SqlMin(COL)).From(TABLE1), + "select min(\"COL\") from \"TABLE1\""); // select min("COL") from "TABLE1" + TEST(FIREBIRD, + Select(SqlMin(COL)).From(TABLE1), + "select min(\"COL\") from \"TABLE1\""); // select min("COL") from "TABLE1" + TEST(DB2, + Select(SqlMin(COL)).From(TABLE1), + "select min(\"COL\") from \"TABLE1\""); // select min("COL") from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(SqlSum(COL)).From(TABLE1), + "select sum(`COL`) from `TABLE1`"); // select sum(`COL`) from `TABLE1` + TEST(SQLITE3, + Select(SqlSum(COL)).From(TABLE1), + "select sum(\"COL\") from \"TABLE1\""); // select sum("COL") from "TABLE1" + TEST(ORACLE, + Select(SqlSum(COL)).From(TABLE1), + "select sum(\"COL\") from \"TABLE1\""); // select sum("COL") from "TABLE1" + TEST(MSSQL, + Select(SqlSum(COL)).From(TABLE1), + "select sum(\"COL\") from \"TABLE1\""); // select sum("COL") from "TABLE1" + TEST(PGSQL, + Select(SqlSum(COL)).From(TABLE1), + "select sum(\"COL\") from \"TABLE1\""); // select sum("COL") from "TABLE1" + TEST(FIREBIRD, + Select(SqlSum(COL)).From(TABLE1), + "select sum(\"COL\") from \"TABLE1\""); // select sum("COL") from "TABLE1" + TEST(DB2, + Select(SqlSum(COL)).From(TABLE1), + "select sum(\"COL\") from \"TABLE1\""); // select sum("COL") from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(Avg(COL)).From(TABLE1), + "select avg(`COL`) from `TABLE1`"); // select avg(`COL`) from `TABLE1` + TEST(SQLITE3, + Select(Avg(COL)).From(TABLE1), + "select avg(\"COL\") from \"TABLE1\""); // select avg("COL") from "TABLE1" + TEST(ORACLE, + Select(Avg(COL)).From(TABLE1), + "select avg(\"COL\") from \"TABLE1\""); // select avg("COL") from "TABLE1" + TEST(MSSQL, + Select(Avg(COL)).From(TABLE1), + "select avg(\"COL\") from \"TABLE1\""); // select avg("COL") from "TABLE1" + TEST(PGSQL, + Select(Avg(COL)).From(TABLE1), + "select avg(\"COL\") from \"TABLE1\""); // select avg("COL") from "TABLE1" + TEST(FIREBIRD, + Select(Avg(COL)).From(TABLE1), + "select avg(\"COL\") from \"TABLE1\""); // select avg("COL") from "TABLE1" + TEST(DB2, + Select(Avg(COL)).From(TABLE1), + "select avg(\"COL\") from \"TABLE1\""); // select avg("COL") from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(Stddev(COL)).From(TABLE1), + "select stddev(`COL`) from `TABLE1`"); // select stddev(`COL`) from `TABLE1` + TEST(SQLITE3, + Select(Stddev(COL)).From(TABLE1), + "select stddev(\"COL\") from \"TABLE1\""); // select stddev("COL") from "TABLE1" + TEST(ORACLE, + Select(Stddev(COL)).From(TABLE1), + "select stddev(\"COL\") from \"TABLE1\""); // select stddev("COL") from "TABLE1" + TEST(MSSQL, + Select(Stddev(COL)).From(TABLE1), + "select stddev(\"COL\") from \"TABLE1\""); // select stddev("COL") from "TABLE1" + TEST(PGSQL, + Select(Stddev(COL)).From(TABLE1), + "select stddev(\"COL\") from \"TABLE1\""); // select stddev("COL") from "TABLE1" + TEST(FIREBIRD, + Select(Stddev(COL)).From(TABLE1), + "select stddev(\"COL\") from \"TABLE1\""); // select stddev("COL") from "TABLE1" + TEST(DB2, + Select(Stddev(COL)).From(TABLE1), + "select stddev(\"COL\") from \"TABLE1\""); // select stddev("COL") from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(Variance(COL)).From(TABLE1), + "select variance(`COL`) from `TABLE1`"); // select variance(`COL`) from `TABLE1` + TEST(SQLITE3, + Select(Variance(COL)).From(TABLE1), + "select variance(\"COL\") from \"TABLE1\""); // select variance("COL") from "TABLE1" + TEST(ORACLE, + Select(Variance(COL)).From(TABLE1), + "select variance(\"COL\") from \"TABLE1\""); // select variance("COL") from "TABLE1" + TEST(MSSQL, + Select(Variance(COL)).From(TABLE1), + "select variance(\"COL\") from \"TABLE1\""); // select variance("COL") from "TABLE1" + TEST(PGSQL, + Select(Variance(COL)).From(TABLE1), + "select variance(\"COL\") from \"TABLE1\""); // select variance("COL") from "TABLE1" + TEST(FIREBIRD, + Select(Variance(COL)).From(TABLE1), + "select variance(\"COL\") from \"TABLE1\""); // select variance("COL") from "TABLE1" + TEST(DB2, + Select(Variance(COL)).From(TABLE1), + "select variance(\"COL\") from \"TABLE1\""); // select variance("COL") from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(Greatest(COLUMN1, COLUMN2)).From(TABLE1), + "select greatest(`COLUMN1`, `COLUMN2`) from `TABLE1`"); // select greatest(`COLUMN1`, `COLUMN2`) from `TABLE1` + TEST(SQLITE3, + Select(Greatest(COLUMN1, COLUMN2)).From(TABLE1), + "select max(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select max("COLUMN1", "COLUMN2") from "TABLE1" + TEST(ORACLE, + Select(Greatest(COLUMN1, COLUMN2)).From(TABLE1), + "select greatest(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select greatest("COLUMN1", "COLUMN2") from "TABLE1" + TEST(MSSQL, + Select(Greatest(COLUMN1, COLUMN2)).From(TABLE1), + "select greatest(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select greatest("COLUMN1", "COLUMN2") from "TABLE1" + TEST(PGSQL, + Select(Greatest(COLUMN1, COLUMN2)).From(TABLE1), + "select greatest(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select greatest("COLUMN1", "COLUMN2") from "TABLE1" + TEST(FIREBIRD, + Select(Greatest(COLUMN1, COLUMN2)).From(TABLE1), + "select greatest(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select greatest("COLUMN1", "COLUMN2") from "TABLE1" + TEST(DB2, + Select(Greatest(COLUMN1, COLUMN2)).From(TABLE1), + "select greatest(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select greatest("COLUMN1", "COLUMN2") from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(Least(COLUMN1, COLUMN2)).From(TABLE1), + "select least(`COLUMN1`, `COLUMN2`) from `TABLE1`"); // select least(`COLUMN1`, `COLUMN2`) from `TABLE1` + TEST(SQLITE3, + Select(Least(COLUMN1, COLUMN2)).From(TABLE1), + "select min(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select min("COLUMN1", "COLUMN2") from "TABLE1" + TEST(ORACLE, + Select(Least(COLUMN1, COLUMN2)).From(TABLE1), + "select least(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select least("COLUMN1", "COLUMN2") from "TABLE1" + TEST(MSSQL, + Select(Least(COLUMN1, COLUMN2)).From(TABLE1), + "select least(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select least("COLUMN1", "COLUMN2") from "TABLE1" + TEST(PGSQL, + Select(Least(COLUMN1, COLUMN2)).From(TABLE1), + "select least(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select least("COLUMN1", "COLUMN2") from "TABLE1" + TEST(FIREBIRD, + Select(Least(COLUMN1, COLUMN2)).From(TABLE1), + "select least(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select least("COLUMN1", "COLUMN2") from "TABLE1" + TEST(DB2, + Select(Least(COLUMN1, COLUMN2)).From(TABLE1), + "select least(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select least("COLUMN1", "COLUMN2") from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(Upper(COL)).From(TABLE1), + "select upper(`COL`) from `TABLE1`"); // select upper(`COL`) from `TABLE1` + TEST(SQLITE3, + Select(Upper(COL)).From(TABLE1), + "select upper(\"COL\") from \"TABLE1\""); // select upper("COL") from "TABLE1" + TEST(ORACLE, + Select(Upper(COL)).From(TABLE1), + "select upper(\"COL\") from \"TABLE1\""); // select upper("COL") from "TABLE1" + TEST(MSSQL, + Select(Upper(COL)).From(TABLE1), + "select upper(\"COL\") from \"TABLE1\""); // select upper("COL") from "TABLE1" + TEST(PGSQL, + Select(Upper(COL)).From(TABLE1), + "select upper(\"COL\") from \"TABLE1\""); // select upper("COL") from "TABLE1" + TEST(FIREBIRD, + Select(Upper(COL)).From(TABLE1), + "select upper(\"COL\") from \"TABLE1\""); // select upper("COL") from "TABLE1" + TEST(DB2, + Select(Upper(COL)).From(TABLE1), + "select upper(\"COL\") from \"TABLE1\""); // select upper("COL") from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(Lower(COL)).From(TABLE1), + "select lower(`COL`) from `TABLE1`"); // select lower(`COL`) from `TABLE1` + TEST(SQLITE3, + Select(Lower(COL)).From(TABLE1), + "select lower(\"COL\") from \"TABLE1\""); // select lower("COL") from "TABLE1" + TEST(ORACLE, + Select(Lower(COL)).From(TABLE1), + "select lower(\"COL\") from \"TABLE1\""); // select lower("COL") from "TABLE1" + TEST(MSSQL, + Select(Lower(COL)).From(TABLE1), + "select lower(\"COL\") from \"TABLE1\""); // select lower("COL") from "TABLE1" + TEST(PGSQL, + Select(Lower(COL)).From(TABLE1), + "select lower(\"COL\") from \"TABLE1\""); // select lower("COL") from "TABLE1" + TEST(FIREBIRD, + Select(Lower(COL)).From(TABLE1), + "select lower(\"COL\") from \"TABLE1\""); // select lower("COL") from "TABLE1" + TEST(DB2, + Select(Lower(COL)).From(TABLE1), + "select lower(\"COL\") from \"TABLE1\""); // select lower("COL") from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(Substr(COL, 1)).From(TABLE1), + "select SUBSTR(`COL`, 1) from `TABLE1`"); // select SUBSTR(`COL`, 1) from `TABLE1` + TEST(SQLITE3, + Select(Substr(COL, 1)).From(TABLE1), + "select SUBSTR(\"COL\", 1) from \"TABLE1\""); // select SUBSTR("COL", 1) from "TABLE1" + TEST(ORACLE, + Select(Substr(COL, 1)).From(TABLE1), + "select SUBSTR(\"COL\", 1) from \"TABLE1\""); // select SUBSTR("COL", 1) from "TABLE1" + TEST(MSSQL, + Select(Substr(COL, 1)).From(TABLE1), + "select SUBSTR(\"COL\", 1) from \"TABLE1\""); // select SUBSTR("COL", 1) from "TABLE1" + TEST(PGSQL, + Select(Substr(COL, 1)).From(TABLE1), + "select SUBSTR(\"COL\", 1) from \"TABLE1\""); // select SUBSTR("COL", 1) from "TABLE1" + TEST(FIREBIRD, + Select(Substr(COL, 1)).From(TABLE1), + "select SUBSTR(\"COL\", 1) from \"TABLE1\""); // select SUBSTR("COL", 1) from "TABLE1" + TEST(DB2, + Select(Substr(COL, 1)).From(TABLE1), + "select SUBSTR(\"COL\", 1) from \"TABLE1\""); // select SUBSTR("COL", 1) from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(Substr(COL, 2, 1)).From(TABLE1), + "select SUBSTR(`COL`, 2, 1) from `TABLE1`"); // select SUBSTR(`COL`, 2, 1) from `TABLE1` + TEST(SQLITE3, + Select(Substr(COL, 2, 1)).From(TABLE1), + "select SUBSTR(\"COL\", 2, 1) from \"TABLE1\""); // select SUBSTR("COL", 2, 1) from "TABLE1" + TEST(ORACLE, + Select(Substr(COL, 2, 1)).From(TABLE1), + "select SUBSTR(\"COL\", 2, 1) from \"TABLE1\""); // select SUBSTR("COL", 2, 1) from "TABLE1" + TEST(MSSQL, + Select(Substr(COL, 2, 1)).From(TABLE1), + "select SUBSTR(\"COL\", 2, 1) from \"TABLE1\""); // select SUBSTR("COL", 2, 1) from "TABLE1" + TEST(PGSQL, + Select(Substr(COL, 2, 1)).From(TABLE1), + "select SUBSTR(\"COL\", 2, 1) from \"TABLE1\""); // select SUBSTR("COL", 2, 1) from "TABLE1" + TEST(FIREBIRD, + Select(Substr(COL, 2, 1)).From(TABLE1), + "select SUBSTR(\"COL\", 2, 1) from \"TABLE1\""); // select SUBSTR("COL", 2, 1) from "TABLE1" + TEST(DB2, + Select(Substr(COL, 2, 1)).From(TABLE1), + "select SUBSTR(\"COL\", 2, 1) from \"TABLE1\""); // select SUBSTR("COL", 2, 1) from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(Instr(COL, "hello")).From(TABLE1), + "select INSTR(`COL`, 'hello') from `TABLE1`"); // select INSTR(`COL`, 'hello') from `TABLE1` + TEST(SQLITE3, + Select(Instr(COL, "hello")).From(TABLE1), + "select INSTR(\"COL\", 'hello') from \"TABLE1\""); // select INSTR("COL", 'hello') from "TABLE1" + TEST(ORACLE, + Select(Instr(COL, "hello")).From(TABLE1), + "select INSTR(\"COL\", 'hello') from \"TABLE1\""); // select INSTR("COL", 'hello') from "TABLE1" + TEST(MSSQL, + Select(Instr(COL, "hello")).From(TABLE1), + "select INSTR(\"COL\", 'hello') from \"TABLE1\""); // select INSTR("COL", 'hello') from "TABLE1" + TEST(PGSQL, + Select(Instr(COL, "hello")).From(TABLE1), + "select INSTR(\"COL\", E'hello') from \"TABLE1\""); // select INSTR("COL", E'hello') from "TABLE1" + TEST(FIREBIRD, + Select(Instr(COL, "hello")).From(TABLE1), + "select INSTR(\"COL\", 'hello') from \"TABLE1\""); // select INSTR("COL", 'hello') from "TABLE1" + TEST(DB2, + Select(Instr(COL, "hello")).From(TABLE1), + "select INSTR(\"COL\", 'hello') from \"TABLE1\""); // select INSTR("COL", 'hello') from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(SqlNvl(COLUMN1, COLUMN2)).From(TABLE1), + "select ifnull(`COLUMN1`, `COLUMN2`) from `TABLE1`"); // select ifnull(`COLUMN1`, `COLUMN2`) from `TABLE1` + TEST(SQLITE3, + Select(SqlNvl(COLUMN1, COLUMN2)).From(TABLE1), + "select ifnull(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select ifnull("COLUMN1", "COLUMN2") from "TABLE1" + TEST(ORACLE, + Select(SqlNvl(COLUMN1, COLUMN2)).From(TABLE1), + "select nvl(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select nvl("COLUMN1", "COLUMN2") from "TABLE1" + TEST(MSSQL, + Select(SqlNvl(COLUMN1, COLUMN2)).From(TABLE1), + "select isnull(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select isnull("COLUMN1", "COLUMN2") from "TABLE1" + TEST(PGSQL, + Select(SqlNvl(COLUMN1, COLUMN2)).From(TABLE1), + "select coalesce(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select coalesce("COLUMN1", "COLUMN2") from "TABLE1" + TEST(FIREBIRD, + Select(SqlNvl(COLUMN1, COLUMN2)).From(TABLE1), + "select nvl(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select nvl("COLUMN1", "COLUMN2") from "TABLE1" + TEST(DB2, + Select(SqlNvl(COLUMN1, COLUMN2)).From(TABLE1), + "select nvl(\"COLUMN1\", \"COLUMN2\") from \"TABLE1\""); // select nvl("COLUMN1", "COLUMN2") from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(NextVal(SEQ)).Get(), + "select `SEQ`.NEXTVAL"); // select `SEQ`.NEXTVAL + TEST(SQLITE3, + Select(NextVal(SEQ)).Get(), + "select \"SEQ\".NEXTVAL"); // select "SEQ".NEXTVAL + TEST(ORACLE, + Select(NextVal(SEQ)).Get(), + "select \"SEQ\".NEXTVAL from DUAL"); // select "SEQ".NEXTVAL from DUAL + TEST(MSSQL, + Select(NextVal(SEQ)).Get(), + "select \"SEQ\".NEXTVAL"); // select "SEQ".NEXTVAL + TEST(PGSQL, + Select(NextVal(SEQ)).Get(), + "select nextval('SEQ')"); // select nextval('SEQ') + TEST(FIREBIRD, + Select(NextVal(SEQ)).Get(), + "select \"SEQ\".NEXTVAL"); // select "SEQ".NEXTVAL + TEST(DB2, + Select(NextVal(SEQ)).Get(), + "select \"SEQ\".NEXTVAL"); // select "SEQ".NEXTVAL +// --------------------------------- + TEST(MY_SQL, + Select(CurrVal(SEQ)).Get(), + "select `SEQ`.CURRVAL"); // select `SEQ`.CURRVAL + TEST(SQLITE3, + Select(CurrVal(SEQ)).Get(), + "select \"SEQ\".CURRVAL"); // select "SEQ".CURRVAL + TEST(ORACLE, + Select(CurrVal(SEQ)).Get(), + "select \"SEQ\".CURRVAL from DUAL"); // select "SEQ".CURRVAL from DUAL + TEST(MSSQL, + Select(CurrVal(SEQ)).Get(), + "select \"SEQ\".CURRVAL"); // select "SEQ".CURRVAL + TEST(PGSQL, + Select(CurrVal(SEQ)).Get(), + "select currval('SEQ')"); // select currval('SEQ') + TEST(FIREBIRD, + Select(CurrVal(SEQ)).Get(), + "select \"SEQ\".CURRVAL"); // select "SEQ".CURRVAL + TEST(DB2, + Select(CurrVal(SEQ)).Get(), + "select \"SEQ\".CURRVAL"); // select "SEQ".CURRVAL +// --------------------------------- + TEST(MY_SQL, + Select(SqlArg()).From(TABLE1), + "select ? from `TABLE1`"); // select ? from `TABLE1` + TEST(SQLITE3, + Select(SqlArg()).From(TABLE1), + "select ? from \"TABLE1\""); // select ? from "TABLE1" + TEST(ORACLE, + Select(SqlArg()).From(TABLE1), + "select ? from \"TABLE1\""); // select ? from "TABLE1" + TEST(MSSQL, + Select(SqlArg()).From(TABLE1), + "select ? from \"TABLE1\""); // select ? from "TABLE1" + TEST(PGSQL, + Select(SqlArg()).From(TABLE1), + "select ? from \"TABLE1\""); // select ? from "TABLE1" + TEST(FIREBIRD, + Select(SqlArg()).From(TABLE1), + "select ? from \"TABLE1\""); // select ? from "TABLE1" + TEST(DB2, + Select(SqlArg()).From(TABLE1), + "select ? from \"TABLE1\""); // select ? from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(Coalesce(COLUMN1, "_")).From(TABLE1), + "select coalesce(`COLUMN1`, '_') from `TABLE1`"); // select coalesce(`COLUMN1`, '_') from `TABLE1` + TEST(SQLITE3, + Select(Coalesce(COLUMN1, "_")).From(TABLE1), + "select coalesce(\"COLUMN1\", '_') from \"TABLE1\""); // select coalesce("COLUMN1", '_') from "TABLE1" + TEST(ORACLE, + Select(Coalesce(COLUMN1, "_")).From(TABLE1), + "select coalesce(\"COLUMN1\", '_') from \"TABLE1\""); // select coalesce("COLUMN1", '_') from "TABLE1" + TEST(MSSQL, + Select(Coalesce(COLUMN1, "_")).From(TABLE1), + "select coalesce(\"COLUMN1\", '_') from \"TABLE1\""); // select coalesce("COLUMN1", '_') from "TABLE1" + TEST(PGSQL, + Select(Coalesce(COLUMN1, "_")).From(TABLE1), + "select coalesce(\"COLUMN1\", E'_') from \"TABLE1\""); // select coalesce("COLUMN1", E'_') from "TABLE1" + TEST(FIREBIRD, + Select(Coalesce(COLUMN1, "_")).From(TABLE1), + "select coalesce(\"COLUMN1\", '_') from \"TABLE1\""); // select coalesce("COLUMN1", '_') from "TABLE1" + TEST(DB2, + Select(Coalesce(COLUMN1, "_")).From(TABLE1), + "select coalesce(\"COLUMN1\", '_') from \"TABLE1\""); // select coalesce("COLUMN1", '_') from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(Coalesce(COLUMN1, "_").As("H")).From(TABLE1), + "select coalesce(`COLUMN1`, '_') `H` from `TABLE1`"); // select coalesce(`COLUMN1`, '_') `H` from `TABLE1` + TEST(SQLITE3, + Select(Coalesce(COLUMN1, "_").As("H")).From(TABLE1), + "select coalesce(\"COLUMN1\", '_') \"H\" from \"TABLE1\""); // select coalesce("COLUMN1", '_') "H" from "TABLE1" + TEST(ORACLE, + Select(Coalesce(COLUMN1, "_").As("H")).From(TABLE1), + "select coalesce(\"COLUMN1\", '_') \"H\" from \"TABLE1\""); // select coalesce("COLUMN1", '_') "H" from "TABLE1" + TEST(MSSQL, + Select(Coalesce(COLUMN1, "_").As("H")).From(TABLE1), + "select coalesce(\"COLUMN1\", '_') as \"H\" from \"TABLE1\""); // select coalesce("COLUMN1", '_') as "H" from "TABLE1" + TEST(PGSQL, + Select(Coalesce(COLUMN1, "_").As("H")).From(TABLE1), + "select coalesce(\"COLUMN1\", E'_') as \"H\" from \"TABLE1\""); // select coalesce("COLUMN1", E'_') as "H" from "TABLE1" + TEST(FIREBIRD, + Select(Coalesce(COLUMN1, "_").As("H")).From(TABLE1), + "select coalesce(\"COLUMN1\", '_') \"H\" from \"TABLE1\""); // select coalesce("COLUMN1", '_') "H" from "TABLE1" + TEST(DB2, + Select(Coalesce(COLUMN1, "_").As("H")).From(TABLE1), + "select coalesce(\"COLUMN1\", '_') \"H\" from \"TABLE1\""); // select coalesce("COLUMN1", '_') "H" from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(Coalesce(COLUMN1, "_").As(COLUMN2)).From(TABLE1), + "select coalesce(`COLUMN1`, '_') `COLUMN2` from `TABLE1`"); // select coalesce(`COLUMN1`, '_') `COLUMN2` from `TABLE1` + TEST(SQLITE3, + Select(Coalesce(COLUMN1, "_").As(COLUMN2)).From(TABLE1), + "select coalesce(\"COLUMN1\", '_') \"COLUMN2\" from \"TABLE1\""); // select coalesce("COLUMN1", '_') "COLUMN2" from "TABLE1" + TEST(ORACLE, + Select(Coalesce(COLUMN1, "_").As(COLUMN2)).From(TABLE1), + "select coalesce(\"COLUMN1\", '_') \"COLUMN2\" from \"TABLE1\""); // select coalesce("COLUMN1", '_') "COLUMN2" from "TABLE1" + TEST(MSSQL, + Select(Coalesce(COLUMN1, "_").As(COLUMN2)).From(TABLE1), + "select coalesce(\"COLUMN1\", '_') as \"COLUMN2\" from \"TABLE1\""); // select coalesce("COLUMN1", '_') as "COLUMN2" from "TABLE1" + TEST(PGSQL, + Select(Coalesce(COLUMN1, "_").As(COLUMN2)).From(TABLE1), + "select coalesce(\"COLUMN1\", E'_') as \"COLUMN2\" from \"TABLE1\""); // select coalesce("COLUMN1", E'_') as "COLUMN2" from "TABLE1" + TEST(FIREBIRD, + Select(Coalesce(COLUMN1, "_").As(COLUMN2)).From(TABLE1), + "select coalesce(\"COLUMN1\", '_') \"COLUMN2\" from \"TABLE1\""); // select coalesce("COLUMN1", '_') "COLUMN2" from "TABLE1" + TEST(DB2, + Select(Coalesce(COLUMN1, "_").As(COLUMN2)).From(TABLE1), + "select coalesce(\"COLUMN1\", '_') \"COLUMN2\" from \"TABLE1\""); // select coalesce("COLUMN1", '_') "COLUMN2" from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).Where(COL / 2 > 1 && COLUMN1 == "A" || COLUMN2 == Date(2006, 1, 1)), + "select `COL` from `TABLE1` where `COL` / 2 > 1 and `COLUMN1` = 'A' or `COLUMN2` = '2006-01-01'"); // select `COL` from `TABLE1` where `COL` / 2 > 1 and `COLUMN1` = 'A' or `COLUMN2` = '2006-01-01' + TEST(SQLITE3, + Select(COL).From(TABLE1).Where(COL / 2 > 1 && COLUMN1 == "A" || COLUMN2 == Date(2006, 1, 1)), + "select \"COL\" from \"TABLE1\" where \"COL\" / 2 > 1 and \"COLUMN1\" = 'A' or \"COLUMN2\" = '2006-01-01'"); // select "COL" from "TABLE1" where "COL" / 2 > 1 and "COLUMN1" = 'A' or "COLUMN2" = '2006-01-01' + TEST(ORACLE, + Select(COL).From(TABLE1).Where(COL / 2 > 1 && COLUMN1 == "A" || COLUMN2 == Date(2006, 1, 1)), + "select \"COL\" from \"TABLE1\" where \"COL\" / 2 > 1 and \"COLUMN1\" = 'A' or \"COLUMN2\" = to_date('2006/1/1', 'SYYYY/MM/DD')"); // select "COL" from "TABLE1" where "COL" / 2 > 1 and "COLUMN1" = 'A' or "COLUMN2" = to_date('2006/1/1', 'SYYYY/MM/DD') + TEST(MSSQL, + Select(COL).From(TABLE1).Where(COL / 2 > 1 && COLUMN1 == "A" || COLUMN2 == Date(2006, 1, 1)), + "select \"COL\" from \"TABLE1\" where \"COL\" / 2 > 1 and \"COLUMN1\" = 'A' or \"COLUMN2\" = convert(datetime, '2006/1/1', 120)"); // select "COL" from "TABLE1" where "COL" / 2 > 1 and "COLUMN1" = 'A' or "COLUMN2" = convert(datetime, '2006/1/1', 120) + TEST(PGSQL, + Select(COL).From(TABLE1).Where(COL / 2 > 1 && COLUMN1 == "A" || COLUMN2 == Date(2006, 1, 1)), + "select \"COL\" from \"TABLE1\" where \"COL\" / 2 > 1 and \"COLUMN1\" = E'A' or \"COLUMN2\" = date '2006-01-01'"); // select "COL" from "TABLE1" where "COL" / 2 > 1 and "COLUMN1" = E'A' or "COLUMN2" = date '2006-01-01' + TEST(FIREBIRD, + Select(COL).From(TABLE1).Where(COL / 2 > 1 && COLUMN1 == "A" || COLUMN2 == Date(2006, 1, 1)), + "select \"COL\" from \"TABLE1\" where \"COL\" / 2 > 1 and \"COLUMN1\" = 'A' or \"COLUMN2\" = '2006-01-01'"); // select "COL" from "TABLE1" where "COL" / 2 > 1 and "COLUMN1" = 'A' or "COLUMN2" = '2006-01-01' + TEST(DB2, + Select(COL).From(TABLE1).Where(COL / 2 > 1 && COLUMN1 == "A" || COLUMN2 == Date(2006, 1, 1)), + "select \"COL\" from \"TABLE1\" where \"COL\" / 2 > 1 and \"COLUMN1\" = 'A' or \"COLUMN2\" = '2006-01-01'"); // select "COL" from "TABLE1" where "COL" / 2 > 1 and "COLUMN1" = 'A' or "COLUMN2" = '2006-01-01' +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).Where(!(COL == 1)), + "select `COL` from `TABLE1` where not (`COL` = 1)"); // select `COL` from `TABLE1` where not (`COL` = 1) + TEST(SQLITE3, + Select(COL).From(TABLE1).Where(!(COL == 1)), + "select \"COL\" from \"TABLE1\" where not (\"COL\" = 1)"); // select "COL" from "TABLE1" where not ("COL" = 1) + TEST(ORACLE, + Select(COL).From(TABLE1).Where(!(COL == 1)), + "select \"COL\" from \"TABLE1\" where not (\"COL\" = 1)"); // select "COL" from "TABLE1" where not ("COL" = 1) + TEST(MSSQL, + Select(COL).From(TABLE1).Where(!(COL == 1)), + "select \"COL\" from \"TABLE1\" where not (\"COL\" = 1)"); // select "COL" from "TABLE1" where not ("COL" = 1) + TEST(PGSQL, + Select(COL).From(TABLE1).Where(!(COL == 1)), + "select \"COL\" from \"TABLE1\" where not (\"COL\" = 1)"); // select "COL" from "TABLE1" where not ("COL" = 1) + TEST(FIREBIRD, + Select(COL).From(TABLE1).Where(!(COL == 1)), + "select \"COL\" from \"TABLE1\" where not (\"COL\" = 1)"); // select "COL" from "TABLE1" where not ("COL" = 1) + TEST(DB2, + Select(COL).From(TABLE1).Where(!(COL == 1)), + "select \"COL\" from \"TABLE1\" where not (\"COL\" = 1)"); // select "COL" from "TABLE1" where not ("COL" = 1) +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).Where((COLUMN1 == 1) - (COLUMN2 == 1)), + "select `COL` from `TABLE1` where `COLUMN1` = 1 and not `COLUMN2` = 1"); // select `COL` from `TABLE1` where `COLUMN1` = 1 and not `COLUMN2` = 1 + TEST(SQLITE3, + Select(COL).From(TABLE1).Where((COLUMN1 == 1) - (COLUMN2 == 1)), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" = 1 and not \"COLUMN2\" = 1"); // select "COL" from "TABLE1" where "COLUMN1" = 1 and not "COLUMN2" = 1 + TEST(ORACLE, + Select(COL).From(TABLE1).Where((COLUMN1 == 1) - (COLUMN2 == 1)), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" = 1 and not \"COLUMN2\" = 1"); // select "COL" from "TABLE1" where "COLUMN1" = 1 and not "COLUMN2" = 1 + TEST(MSSQL, + Select(COL).From(TABLE1).Where((COLUMN1 == 1) - (COLUMN2 == 1)), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" = 1 and not \"COLUMN2\" = 1"); // select "COL" from "TABLE1" where "COLUMN1" = 1 and not "COLUMN2" = 1 + TEST(PGSQL, + Select(COL).From(TABLE1).Where((COLUMN1 == 1) - (COLUMN2 == 1)), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" = 1 and not \"COLUMN2\" = 1"); // select "COL" from "TABLE1" where "COLUMN1" = 1 and not "COLUMN2" = 1 + TEST(FIREBIRD, + Select(COL).From(TABLE1).Where((COLUMN1 == 1) - (COLUMN2 == 1)), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" = 1 and not \"COLUMN2\" = 1"); // select "COL" from "TABLE1" where "COLUMN1" = 1 and not "COLUMN2" = 1 + TEST(DB2, + Select(COL).From(TABLE1).Where((COLUMN1 == 1) - (COLUMN2 == 1)), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" = 1 and not \"COLUMN2\" = 1"); // select "COL" from "TABLE1" where "COLUMN1" = 1 and not "COLUMN2" = 1 +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).Where(IsNull(COLUMN1)), + "select `COL` from `TABLE1` where `COLUMN1` is NULL"); // select `COL` from `TABLE1` where `COLUMN1` is NULL + TEST(SQLITE3, + Select(COL).From(TABLE1).Where(IsNull(COLUMN1)), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" is NULL"); // select "COL" from "TABLE1" where "COLUMN1" is NULL + TEST(ORACLE, + Select(COL).From(TABLE1).Where(IsNull(COLUMN1)), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" is NULL"); // select "COL" from "TABLE1" where "COLUMN1" is NULL + TEST(MSSQL, + Select(COL).From(TABLE1).Where(IsNull(COLUMN1)), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" is NULL"); // select "COL" from "TABLE1" where "COLUMN1" is NULL + TEST(PGSQL, + Select(COL).From(TABLE1).Where(IsNull(COLUMN1)), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" is NULL"); // select "COL" from "TABLE1" where "COLUMN1" is NULL + TEST(FIREBIRD, + Select(COL).From(TABLE1).Where(IsNull(COLUMN1)), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" is NULL"); // select "COL" from "TABLE1" where "COLUMN1" is NULL + TEST(DB2, + Select(COL).From(TABLE1).Where(IsNull(COLUMN1)), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" is NULL"); // select "COL" from "TABLE1" where "COLUMN1" is NULL +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).Where(NotNull(COLUMN1)), + "select `COL` from `TABLE1` where `COLUMN1` is not NULL"); // select `COL` from `TABLE1` where `COLUMN1` is not NULL + TEST(SQLITE3, + Select(COL).From(TABLE1).Where(NotNull(COLUMN1)), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" is not NULL"); // select "COL" from "TABLE1" where "COLUMN1" is not NULL + TEST(ORACLE, + Select(COL).From(TABLE1).Where(NotNull(COLUMN1)), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" is not NULL"); // select "COL" from "TABLE1" where "COLUMN1" is not NULL + TEST(MSSQL, + Select(COL).From(TABLE1).Where(NotNull(COLUMN1)), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" is not NULL"); // select "COL" from "TABLE1" where "COLUMN1" is not NULL + TEST(PGSQL, + Select(COL).From(TABLE1).Where(NotNull(COLUMN1)), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" is not NULL"); // select "COL" from "TABLE1" where "COLUMN1" is not NULL + TEST(FIREBIRD, + Select(COL).From(TABLE1).Where(NotNull(COLUMN1)), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" is not NULL"); // select "COL" from "TABLE1" where "COLUMN1" is not NULL + TEST(DB2, + Select(COL).From(TABLE1).Where(NotNull(COLUMN1)), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" is not NULL"); // select "COL" from "TABLE1" where "COLUMN1" is not NULL +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).Where(Like(COLUMN1, Wild("A*"))), + "select `COL` from `TABLE1` where `COLUMN1` like binary 'A%%'"); // select `COL` from `TABLE1` where `COLUMN1` like binary 'A%%' + TEST(SQLITE3, + Select(COL).From(TABLE1).Where(Like(COLUMN1, Wild("A*"))), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" like 'A%%'"); // select "COL" from "TABLE1" where "COLUMN1" like 'A%%' + TEST(ORACLE, + Select(COL).From(TABLE1).Where(Like(COLUMN1, Wild("A*"))), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" like 'A%%'"); // select "COL" from "TABLE1" where "COLUMN1" like 'A%%' + TEST(MSSQL, + Select(COL).From(TABLE1).Where(Like(COLUMN1, Wild("A*"))), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" like 'A%%'"); // select "COL" from "TABLE1" where "COLUMN1" like 'A%%' + TEST(PGSQL, + Select(COL).From(TABLE1).Where(Like(COLUMN1, Wild("A*"))), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" like E'A%%'"); // select "COL" from "TABLE1" where "COLUMN1" like E'A%%' + TEST(FIREBIRD, + Select(COL).From(TABLE1).Where(Like(COLUMN1, Wild("A*"))), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" like 'A%%'"); // select "COL" from "TABLE1" where "COLUMN1" like 'A%%' + TEST(DB2, + Select(COL).From(TABLE1).Where(Like(COLUMN1, Wild("A*"))), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" like 'A%%'"); // select "COL" from "TABLE1" where "COLUMN1" like 'A%%' +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).Where(NotLike(COLUMN1, Wild("A*"))), + "select `COL` from `TABLE1` where `COLUMN1` not like 'A%%'"); // select `COL` from `TABLE1` where `COLUMN1` not like 'A%%' + TEST(SQLITE3, + Select(COL).From(TABLE1).Where(NotLike(COLUMN1, Wild("A*"))), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" not like 'A%%'"); // select "COL" from "TABLE1" where "COLUMN1" not like 'A%%' + TEST(ORACLE, + Select(COL).From(TABLE1).Where(NotLike(COLUMN1, Wild("A*"))), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" not like 'A%%'"); // select "COL" from "TABLE1" where "COLUMN1" not like 'A%%' + TEST(MSSQL, + Select(COL).From(TABLE1).Where(NotLike(COLUMN1, Wild("A*"))), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" not like 'A%%'"); // select "COL" from "TABLE1" where "COLUMN1" not like 'A%%' + TEST(PGSQL, + Select(COL).From(TABLE1).Where(NotLike(COLUMN1, Wild("A*"))), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" not like E'A%%'"); // select "COL" from "TABLE1" where "COLUMN1" not like E'A%%' + TEST(FIREBIRD, + Select(COL).From(TABLE1).Where(NotLike(COLUMN1, Wild("A*"))), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" not like 'A%%'"); // select "COL" from "TABLE1" where "COLUMN1" not like 'A%%' + TEST(DB2, + Select(COL).From(TABLE1).Where(NotLike(COLUMN1, Wild("A*"))), + "select \"COL\" from \"TABLE1\" where \"COLUMN1\" not like 'A%%'"); // select "COL" from "TABLE1" where "COLUMN1" not like 'A%%' +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).Where(In(COL, Select(COL).From(TABLE1))), + "select `COL` from `TABLE1` where `COL` in (select `COL` from `TABLE1`)"); // select `COL` from `TABLE1` where `COL` in (select `COL` from `TABLE1`) + TEST(SQLITE3, + Select(COL).From(TABLE1).Where(In(COL, Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" in (select "COL" from "TABLE1") + TEST(ORACLE, + Select(COL).From(TABLE1).Where(In(COL, Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" in (select "COL" from "TABLE1") + TEST(MSSQL, + Select(COL).From(TABLE1).Where(In(COL, Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" in (select "COL" from "TABLE1") + TEST(PGSQL, + Select(COL).From(TABLE1).Where(In(COL, Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" in (select "COL" from "TABLE1") + TEST(FIREBIRD, + Select(COL).From(TABLE1).Where(In(COL, Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" in (select "COL" from "TABLE1") + TEST(DB2, + Select(COL).From(TABLE1).Where(In(COL, Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" in (select "COL" from "TABLE1") +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).Where(COL == Select(COL).From(TABLE1)), + "select `COL` from `TABLE1` where `COL` in (select `COL` from `TABLE1`)"); // select `COL` from `TABLE1` where `COL` in (select `COL` from `TABLE1`) + TEST(SQLITE3, + Select(COL).From(TABLE1).Where(COL == Select(COL).From(TABLE1)), + "select \"COL\" from \"TABLE1\" where \"COL\" in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" in (select "COL" from "TABLE1") + TEST(ORACLE, + Select(COL).From(TABLE1).Where(COL == Select(COL).From(TABLE1)), + "select \"COL\" from \"TABLE1\" where \"COL\" in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" in (select "COL" from "TABLE1") + TEST(MSSQL, + Select(COL).From(TABLE1).Where(COL == Select(COL).From(TABLE1)), + "select \"COL\" from \"TABLE1\" where \"COL\" in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" in (select "COL" from "TABLE1") + TEST(PGSQL, + Select(COL).From(TABLE1).Where(COL == Select(COL).From(TABLE1)), + "select \"COL\" from \"TABLE1\" where \"COL\" in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" in (select "COL" from "TABLE1") + TEST(FIREBIRD, + Select(COL).From(TABLE1).Where(COL == Select(COL).From(TABLE1)), + "select \"COL\" from \"TABLE1\" where \"COL\" in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" in (select "COL" from "TABLE1") + TEST(DB2, + Select(COL).From(TABLE1).Where(COL == Select(COL).From(TABLE1)), + "select \"COL\" from \"TABLE1\" where \"COL\" in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" in (select "COL" from "TABLE1") +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).Where(COL == Select(COL).From(TABLE1).AsValue()), + "select `COL` from `TABLE1` where `COL` = ((select `COL` from `TABLE1`))"); // select `COL` from `TABLE1` where `COL` = ((select `COL` from `TABLE1`)) + TEST(SQLITE3, + Select(COL).From(TABLE1).Where(COL == Select(COL).From(TABLE1).AsValue()), + "select \"COL\" from \"TABLE1\" where \"COL\" = ((select \"COL\" from \"TABLE1\"))"); // select "COL" from "TABLE1" where "COL" = ((select "COL" from "TABLE1")) + TEST(ORACLE, + Select(COL).From(TABLE1).Where(COL == Select(COL).From(TABLE1).AsValue()), + "select \"COL\" from \"TABLE1\" where \"COL\" = ((select \"COL\" from \"TABLE1\"))"); // select "COL" from "TABLE1" where "COL" = ((select "COL" from "TABLE1")) + TEST(MSSQL, + Select(COL).From(TABLE1).Where(COL == Select(COL).From(TABLE1).AsValue()), + "select \"COL\" from \"TABLE1\" where \"COL\" = ((select \"COL\" from \"TABLE1\"))"); // select "COL" from "TABLE1" where "COL" = ((select "COL" from "TABLE1")) + TEST(PGSQL, + Select(COL).From(TABLE1).Where(COL == Select(COL).From(TABLE1).AsValue()), + "select \"COL\" from \"TABLE1\" where \"COL\" = ((select \"COL\" from \"TABLE1\"))"); // select "COL" from "TABLE1" where "COL" = ((select "COL" from "TABLE1")) + TEST(FIREBIRD, + Select(COL).From(TABLE1).Where(COL == Select(COL).From(TABLE1).AsValue()), + "select \"COL\" from \"TABLE1\" where \"COL\" = ((select \"COL\" from \"TABLE1\"))"); // select "COL" from "TABLE1" where "COL" = ((select "COL" from "TABLE1")) + TEST(DB2, + Select(COL).From(TABLE1).Where(COL == Select(COL).From(TABLE1).AsValue()), + "select \"COL\" from \"TABLE1\" where \"COL\" = ((select \"COL\" from \"TABLE1\"))"); // select "COL" from "TABLE1" where "COL" = ((select "COL" from "TABLE1")) +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).Where(NotIn(COL, Select(COL).From(TABLE1))), + "select `COL` from `TABLE1` where `COL` not in (select `COL` from `TABLE1`)"); // select `COL` from `TABLE1` where `COL` not in (select `COL` from `TABLE1`) + TEST(SQLITE3, + Select(COL).From(TABLE1).Where(NotIn(COL, Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where \"COL\" not in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" not in (select "COL" from "TABLE1") + TEST(ORACLE, + Select(COL).From(TABLE1).Where(NotIn(COL, Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where \"COL\" not in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" not in (select "COL" from "TABLE1") + TEST(MSSQL, + Select(COL).From(TABLE1).Where(NotIn(COL, Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where \"COL\" not in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" not in (select "COL" from "TABLE1") + TEST(PGSQL, + Select(COL).From(TABLE1).Where(NotIn(COL, Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where \"COL\" not in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" not in (select "COL" from "TABLE1") + TEST(FIREBIRD, + Select(COL).From(TABLE1).Where(NotIn(COL, Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where \"COL\" not in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" not in (select "COL" from "TABLE1") + TEST(DB2, + Select(COL).From(TABLE1).Where(NotIn(COL, Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where \"COL\" not in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" not in (select "COL" from "TABLE1") +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).Where(COL != Select(COL).From(TABLE1)), + "select `COL` from `TABLE1` where `COL` not in (select `COL` from `TABLE1`)"); // select `COL` from `TABLE1` where `COL` not in (select `COL` from `TABLE1`) + TEST(SQLITE3, + Select(COL).From(TABLE1).Where(COL != Select(COL).From(TABLE1)), + "select \"COL\" from \"TABLE1\" where \"COL\" not in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" not in (select "COL" from "TABLE1") + TEST(ORACLE, + Select(COL).From(TABLE1).Where(COL != Select(COL).From(TABLE1)), + "select \"COL\" from \"TABLE1\" where \"COL\" not in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" not in (select "COL" from "TABLE1") + TEST(MSSQL, + Select(COL).From(TABLE1).Where(COL != Select(COL).From(TABLE1)), + "select \"COL\" from \"TABLE1\" where \"COL\" not in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" not in (select "COL" from "TABLE1") + TEST(PGSQL, + Select(COL).From(TABLE1).Where(COL != Select(COL).From(TABLE1)), + "select \"COL\" from \"TABLE1\" where \"COL\" not in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" not in (select "COL" from "TABLE1") + TEST(FIREBIRD, + Select(COL).From(TABLE1).Where(COL != Select(COL).From(TABLE1)), + "select \"COL\" from \"TABLE1\" where \"COL\" not in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" not in (select "COL" from "TABLE1") + TEST(DB2, + Select(COL).From(TABLE1).Where(COL != Select(COL).From(TABLE1)), + "select \"COL\" from \"TABLE1\" where \"COL\" not in (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where "COL" not in (select "COL" from "TABLE1") +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).Where(Exists(Select(COL).From(TABLE1))), + "select `COL` from `TABLE1` where exists (select `COL` from `TABLE1`)"); // select `COL` from `TABLE1` where exists (select `COL` from `TABLE1`) + TEST(SQLITE3, + Select(COL).From(TABLE1).Where(Exists(Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where exists (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where exists (select "COL" from "TABLE1") + TEST(ORACLE, + Select(COL).From(TABLE1).Where(Exists(Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where exists (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where exists (select "COL" from "TABLE1") + TEST(MSSQL, + Select(COL).From(TABLE1).Where(Exists(Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where exists (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where exists (select "COL" from "TABLE1") + TEST(PGSQL, + Select(COL).From(TABLE1).Where(Exists(Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where exists (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where exists (select "COL" from "TABLE1") + TEST(FIREBIRD, + Select(COL).From(TABLE1).Where(Exists(Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where exists (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where exists (select "COL" from "TABLE1") + TEST(DB2, + Select(COL).From(TABLE1).Where(Exists(Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where exists (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where exists (select "COL" from "TABLE1") +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).Where(NotExists(Select(COL).From(TABLE1))), + "select `COL` from `TABLE1` where not exists (select `COL` from `TABLE1`)"); // select `COL` from `TABLE1` where not exists (select `COL` from `TABLE1`) + TEST(SQLITE3, + Select(COL).From(TABLE1).Where(NotExists(Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where not exists (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where not exists (select "COL" from "TABLE1") + TEST(ORACLE, + Select(COL).From(TABLE1).Where(NotExists(Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where not exists (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where not exists (select "COL" from "TABLE1") + TEST(MSSQL, + Select(COL).From(TABLE1).Where(NotExists(Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where not exists (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where not exists (select "COL" from "TABLE1") + TEST(PGSQL, + Select(COL).From(TABLE1).Where(NotExists(Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where not exists (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where not exists (select "COL" from "TABLE1") + TEST(FIREBIRD, + Select(COL).From(TABLE1).Where(NotExists(Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where not exists (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where not exists (select "COL" from "TABLE1") + TEST(DB2, + Select(COL).From(TABLE1).Where(NotExists(Select(COL).From(TABLE1))), + "select \"COL\" from \"TABLE1\" where not exists (select \"COL\" from \"TABLE1\")"); // select "COL" from "TABLE1" where not exists (select "COL" from "TABLE1") +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) | Select(COLUMN2).From(TABLE2))), + "select `COL` from `TABLE1` where `COL` in (((select `COLUMN1` from `TABLE1`) union (select `COLUMN2` from `TABLE2`)))"); // select `COL` from `TABLE1` where `COL` in (((select `COLUMN1` from `TABLE1`) union (select `COLUMN2` from `TABLE2`))) + TEST(SQLITE3, + Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) | Select(COLUMN2).From(TABLE2))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (select \"COLUMN1\" from \"TABLE1\" union select \"COLUMN2\" from \"TABLE2\")"); // select "COL" from "TABLE1" where "COL" in (select "COLUMN1" from "TABLE1" union select "COLUMN2" from "TABLE2") + TEST(ORACLE, + Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) | Select(COLUMN2).From(TABLE2))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (((select \"COLUMN1\" from \"TABLE1\") union (select \"COLUMN2\" from \"TABLE2\")))"); // select "COL" from "TABLE1" where "COL" in (((select "COLUMN1" from "TABLE1") union (select "COLUMN2" from "TABLE2"))) + TEST(MSSQL, + Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) | Select(COLUMN2).From(TABLE2))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (((select \"COLUMN1\" from \"TABLE1\") union (select \"COLUMN2\" from \"TABLE2\")))"); // select "COL" from "TABLE1" where "COL" in (((select "COLUMN1" from "TABLE1") union (select "COLUMN2" from "TABLE2"))) + TEST(PGSQL, + Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) | Select(COLUMN2).From(TABLE2))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (((select \"COLUMN1\" from \"TABLE1\") union (select \"COLUMN2\" from \"TABLE2\")))"); // select "COL" from "TABLE1" where "COL" in (((select "COLUMN1" from "TABLE1") union (select "COLUMN2" from "TABLE2"))) + TEST(FIREBIRD, + Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) | Select(COLUMN2).From(TABLE2))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (((select \"COLUMN1\" from \"TABLE1\") union (select \"COLUMN2\" from \"TABLE2\")))"); // select "COL" from "TABLE1" where "COL" in (((select "COLUMN1" from "TABLE1") union (select "COLUMN2" from "TABLE2"))) + TEST(DB2, + Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) | Select(COLUMN2).From(TABLE2))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (((select \"COLUMN1\" from \"TABLE1\") union (select \"COLUMN2\" from \"TABLE2\")))"); // select "COL" from "TABLE1" where "COL" in (((select "COLUMN1" from "TABLE1") union (select "COLUMN2" from "TABLE2"))) +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) & Select(COLUMN2).From(TABLE2))), + "select `COL` from `TABLE1` where `COL` in (((select `COLUMN1` from `TABLE1`) intersect (select `COLUMN2` from `TABLE2`)))"); // select `COL` from `TABLE1` where `COL` in (((select `COLUMN1` from `TABLE1`) intersect (select `COLUMN2` from `TABLE2`))) + TEST(SQLITE3, + Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) & Select(COLUMN2).From(TABLE2))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (select \"COLUMN1\" from \"TABLE1\" intersect select \"COLUMN2\" from \"TABLE2\")"); // select "COL" from "TABLE1" where "COL" in (select "COLUMN1" from "TABLE1" intersect select "COLUMN2" from "TABLE2") + TEST(ORACLE, + Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) & Select(COLUMN2).From(TABLE2))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (((select \"COLUMN1\" from \"TABLE1\") intersect (select \"COLUMN2\" from \"TABLE2\")))"); // select "COL" from "TABLE1" where "COL" in (((select "COLUMN1" from "TABLE1") intersect (select "COLUMN2" from "TABLE2"))) + TEST(MSSQL, + Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) & Select(COLUMN2).From(TABLE2))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (((select \"COLUMN1\" from \"TABLE1\") intersect (select \"COLUMN2\" from \"TABLE2\")))"); // select "COL" from "TABLE1" where "COL" in (((select "COLUMN1" from "TABLE1") intersect (select "COLUMN2" from "TABLE2"))) + TEST(PGSQL, + Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) & Select(COLUMN2).From(TABLE2))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (((select \"COLUMN1\" from \"TABLE1\") intersect (select \"COLUMN2\" from \"TABLE2\")))"); // select "COL" from "TABLE1" where "COL" in (((select "COLUMN1" from "TABLE1") intersect (select "COLUMN2" from "TABLE2"))) + TEST(FIREBIRD, + Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) & Select(COLUMN2).From(TABLE2))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (((select \"COLUMN1\" from \"TABLE1\") intersect (select \"COLUMN2\" from \"TABLE2\")))"); // select "COL" from "TABLE1" where "COL" in (((select "COLUMN1" from "TABLE1") intersect (select "COLUMN2" from "TABLE2"))) + TEST(DB2, + Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) & Select(COLUMN2).From(TABLE2))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (((select \"COLUMN1\" from \"TABLE1\") intersect (select \"COLUMN2\" from \"TABLE2\")))"); // select "COL" from "TABLE1" where "COL" in (((select "COLUMN1" from "TABLE1") intersect (select "COLUMN2" from "TABLE2"))) +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) - Select(COLUMN2).From(TABLE2))), + "select `COL` from `TABLE1` where `COL` in (((select `COLUMN1` from `TABLE1`) minus (select `COLUMN2` from `TABLE2`)))"); // select `COL` from `TABLE1` where `COL` in (((select `COLUMN1` from `TABLE1`) minus (select `COLUMN2` from `TABLE2`))) + TEST(SQLITE3, + Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) - Select(COLUMN2).From(TABLE2))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (select \"COLUMN1\" from \"TABLE1\" except select \"COLUMN2\" from \"TABLE2\")"); // select "COL" from "TABLE1" where "COL" in (select "COLUMN1" from "TABLE1" except select "COLUMN2" from "TABLE2") + TEST(ORACLE, + Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) - Select(COLUMN2).From(TABLE2))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (((select \"COLUMN1\" from \"TABLE1\") minus (select \"COLUMN2\" from \"TABLE2\")))"); // select "COL" from "TABLE1" where "COL" in (((select "COLUMN1" from "TABLE1") minus (select "COLUMN2" from "TABLE2"))) + TEST(MSSQL, + Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) - Select(COLUMN2).From(TABLE2))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (((select \"COLUMN1\" from \"TABLE1\") except (select \"COLUMN2\" from \"TABLE2\")))"); // select "COL" from "TABLE1" where "COL" in (((select "COLUMN1" from "TABLE1") except (select "COLUMN2" from "TABLE2"))) + TEST(PGSQL, + Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) - Select(COLUMN2).From(TABLE2))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (((select \"COLUMN1\" from \"TABLE1\") except (select \"COLUMN2\" from \"TABLE2\")))"); // select "COL" from "TABLE1" where "COL" in (((select "COLUMN1" from "TABLE1") except (select "COLUMN2" from "TABLE2"))) + TEST(FIREBIRD, + Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) - Select(COLUMN2).From(TABLE2))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (((select \"COLUMN1\" from \"TABLE1\") minus (select \"COLUMN2\" from \"TABLE2\")))"); // select "COL" from "TABLE1" where "COL" in (((select "COLUMN1" from "TABLE1") minus (select "COLUMN2" from "TABLE2"))) + TEST(DB2, + Select(COL).From(TABLE1).Where(COL == (Select(COLUMN1).From(TABLE1) - Select(COLUMN2).From(TABLE2))), + "select \"COL\" from \"TABLE1\" where \"COL\" in (((select \"COLUMN1\" from \"TABLE1\") minus (select \"COLUMN2\" from \"TABLE2\")))"); // select "COL" from "TABLE1" where "COL" in (((select "COLUMN1" from "TABLE1") minus (select "COLUMN2" from "TABLE2"))) +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).Where(COL == 0).GroupBy(COL).Having(COL == 0).OrderBy(Descending(COL)), + "select `COL` from `TABLE1` where `COL` = 0 group by `COL` having `COL` = 0 order by `COL` desc"); // select `COL` from `TABLE1` where `COL` = 0 group by `COL` having `COL` = 0 order by `COL` desc + TEST(SQLITE3, + Select(COL).From(TABLE1).Where(COL == 0).GroupBy(COL).Having(COL == 0).OrderBy(Descending(COL)), + "select \"COL\" from \"TABLE1\" where \"COL\" = 0 group by \"COL\" having \"COL\" = 0 order by \"COL\" desc"); // select "COL" from "TABLE1" where "COL" = 0 group by "COL" having "COL" = 0 order by "COL" desc + TEST(ORACLE, + Select(COL).From(TABLE1).Where(COL == 0).GroupBy(COL).Having(COL == 0).OrderBy(Descending(COL)), + "select \"COL\" from \"TABLE1\" where \"COL\" = 0 group by \"COL\" having \"COL\" = 0 order by \"COL\" desc"); // select "COL" from "TABLE1" where "COL" = 0 group by "COL" having "COL" = 0 order by "COL" desc + TEST(MSSQL, + Select(COL).From(TABLE1).Where(COL == 0).GroupBy(COL).Having(COL == 0).OrderBy(Descending(COL)), + "select \"COL\" from \"TABLE1\" where \"COL\" = 0 group by \"COL\" having \"COL\" = 0 order by \"COL\" desc"); // select "COL" from "TABLE1" where "COL" = 0 group by "COL" having "COL" = 0 order by "COL" desc + TEST(PGSQL, + Select(COL).From(TABLE1).Where(COL == 0).GroupBy(COL).Having(COL == 0).OrderBy(Descending(COL)), + "select \"COL\" from \"TABLE1\" where \"COL\" = 0 group by \"COL\" having \"COL\" = 0 order by \"COL\" desc"); // select "COL" from "TABLE1" where "COL" = 0 group by "COL" having "COL" = 0 order by "COL" desc + TEST(FIREBIRD, + Select(COL).From(TABLE1).Where(COL == 0).GroupBy(COL).Having(COL == 0).OrderBy(Descending(COL)), + "select \"COL\" from \"TABLE1\" where \"COL\" = 0 group by \"COL\" having \"COL\" = 0 order by \"COL\" desc"); // select "COL" from "TABLE1" where "COL" = 0 group by "COL" having "COL" = 0 order by "COL" desc + TEST(DB2, + Select(COL).From(TABLE1).Where(COL == 0).GroupBy(COL).Having(COL == 0).OrderBy(Descending(COL)), + "select \"COL\" from \"TABLE1\" where \"COL\" = 0 group by \"COL\" having \"COL\" = 0 order by \"COL\" desc"); // select "COL" from "TABLE1" where "COL" = 0 group by "COL" having "COL" = 0 order by "COL" desc +// --------------------------------- + TEST(MY_SQL, + Select(COL, Count(Select(SqlAll()).From(TABLE1))).From(TABLE1).Where(COL == 0).GroupBy(COL) .Having(COL == 0).OrderBy(Descending(COL)), + "select `COL`, count(select * from `TABLE1`) from `TABLE1` where `COL` = 0 group by `COL` having `COL` = 0 order by `COL` desc"); // select `COL`, count(select * from `TABLE1`) from `TABLE1` where `COL` = 0 group by `COL` having `COL` = 0 order by `COL` desc + TEST(SQLITE3, + Select(COL, Count(Select(SqlAll()).From(TABLE1))).From(TABLE1).Where(COL == 0).GroupBy(COL) .Having(COL == 0).OrderBy(Descending(COL)), + "select \"COL\", count(select * from \"TABLE1\") from \"TABLE1\" where \"COL\" = 0 group by \"COL\" having \"COL\" = 0 order by \"COL\" desc"); // select "COL", count(select * from "TABLE1") from "TABLE1" where "COL" = 0 group by "COL" having "COL" = 0 order by "COL" desc + TEST(ORACLE, + Select(COL, Count(Select(SqlAll()).From(TABLE1))).From(TABLE1).Where(COL == 0).GroupBy(COL) .Having(COL == 0).OrderBy(Descending(COL)), + "select \"COL\", count(select * from \"TABLE1\") from \"TABLE1\" where \"COL\" = 0 group by \"COL\" having \"COL\" = 0 order by \"COL\" desc"); // select "COL", count(select * from "TABLE1") from "TABLE1" where "COL" = 0 group by "COL" having "COL" = 0 order by "COL" desc + TEST(MSSQL, + Select(COL, Count(Select(SqlAll()).From(TABLE1))).From(TABLE1).Where(COL == 0).GroupBy(COL) .Having(COL == 0).OrderBy(Descending(COL)), + "select \"COL\", count(select * from \"TABLE1\") from \"TABLE1\" where \"COL\" = 0 group by \"COL\" having \"COL\" = 0 order by \"COL\" desc"); // select "COL", count(select * from "TABLE1") from "TABLE1" where "COL" = 0 group by "COL" having "COL" = 0 order by "COL" desc + TEST(PGSQL, + Select(COL, Count(Select(SqlAll()).From(TABLE1))).From(TABLE1).Where(COL == 0).GroupBy(COL) .Having(COL == 0).OrderBy(Descending(COL)), + "select \"COL\", count(select * from \"TABLE1\") from \"TABLE1\" where \"COL\" = 0 group by \"COL\" having \"COL\" = 0 order by \"COL\" desc"); // select "COL", count(select * from "TABLE1") from "TABLE1" where "COL" = 0 group by "COL" having "COL" = 0 order by "COL" desc + TEST(FIREBIRD, + Select(COL, Count(Select(SqlAll()).From(TABLE1))).From(TABLE1).Where(COL == 0).GroupBy(COL) .Having(COL == 0).OrderBy(Descending(COL)), + "select \"COL\", count(select * from \"TABLE1\") from \"TABLE1\" where \"COL\" = 0 group by \"COL\" having \"COL\" = 0 order by \"COL\" desc"); // select "COL", count(select * from "TABLE1") from "TABLE1" where "COL" = 0 group by "COL" having "COL" = 0 order by "COL" desc + TEST(DB2, + Select(COL, Count(Select(SqlAll()).From(TABLE1))).From(TABLE1).Where(COL == 0).GroupBy(COL) .Having(COL == 0).OrderBy(Descending(COL)), + "select \"COL\", count(select * from \"TABLE1\") from \"TABLE1\" where \"COL\" = 0 group by \"COL\" having \"COL\" = 0 order by \"COL\" desc"); // select "COL", count(select * from "TABLE1") from "TABLE1" where "COL" = 0 group by "COL" having "COL" = 0 order by "COL" desc +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).Limit(100), + "select `COL` from `TABLE1` limit 100"); // select `COL` from `TABLE1` limit 100 + TEST(SQLITE3, + Select(COL).From(TABLE1).Limit(100), + "select \"COL\" from \"TABLE1\" limit 100"); // select "COL" from "TABLE1" limit 100 + TEST(ORACLE, + Select(COL).From(TABLE1).Limit(100), + "select \"COL\" from \"TABLE1\" limit 100"); // select "COL" from "TABLE1" limit 100 + TEST(MSSQL, + Select(COL).From(TABLE1).Limit(100), + "select \"COL\" from \"TABLE1\" limit 100"); // select "COL" from "TABLE1" limit 100 + TEST(PGSQL, + Select(COL).From(TABLE1).Limit(100), + "select \"COL\" from \"TABLE1\" limit 100"); // select "COL" from "TABLE1" limit 100 + TEST(FIREBIRD, + Select(COL).From(TABLE1).Limit(100), + "select \"COL\" from \"TABLE1\" limit 100"); // select "COL" from "TABLE1" limit 100 + TEST(DB2, + Select(COL).From(TABLE1).Limit(100), + "select \"COL\" from \"TABLE1\" limit 100"); // select "COL" from "TABLE1" limit 100 +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).Limit(100, 10), + "select `COL` from `TABLE1` limit 100, 10"); // select `COL` from `TABLE1` limit 100, 10 + TEST(SQLITE3, + Select(COL).From(TABLE1).Limit(100, 10), + "select \"COL\" from \"TABLE1\" limit 100, 10"); // select "COL" from "TABLE1" limit 100, 10 + TEST(ORACLE, + Select(COL).From(TABLE1).Limit(100, 10), + "select \"COL\" from \"TABLE1\" limit 100, 10"); // select "COL" from "TABLE1" limit 100, 10 + TEST(MSSQL, + Select(COL).From(TABLE1).Limit(100, 10), + "select \"COL\" from \"TABLE1\" limit 100, 10"); // select "COL" from "TABLE1" limit 100, 10 + TEST(PGSQL, + Select(COL).From(TABLE1).Limit(100, 10), + "select \"COL\" from \"TABLE1\" limit 100, 10"); // select "COL" from "TABLE1" limit 100, 10 + TEST(FIREBIRD, + Select(COL).From(TABLE1).Limit(100, 10), + "select \"COL\" from \"TABLE1\" limit 100, 10"); // select "COL" from "TABLE1" limit 100, 10 + TEST(DB2, + Select(COL).From(TABLE1).Limit(100, 10), + "select \"COL\" from \"TABLE1\" limit 100, 10"); // select "COL" from "TABLE1" limit 100, 10 +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).Offset(20), + "select `COL` from `TABLE1` offset 20"); // select `COL` from `TABLE1` offset 20 + TEST(SQLITE3, + Select(COL).From(TABLE1).Offset(20), + "select \"COL\" from \"TABLE1\" offset 20"); // select "COL" from "TABLE1" offset 20 + TEST(ORACLE, + Select(COL).From(TABLE1).Offset(20), + "select \"COL\" from \"TABLE1\" offset 20"); // select "COL" from "TABLE1" offset 20 + TEST(MSSQL, + Select(COL).From(TABLE1).Offset(20), + "select \"COL\" from \"TABLE1\" offset 20"); // select "COL" from "TABLE1" offset 20 + TEST(PGSQL, + Select(COL).From(TABLE1).Offset(20), + "select \"COL\" from \"TABLE1\" offset 20"); // select "COL" from "TABLE1" offset 20 + TEST(FIREBIRD, + Select(COL).From(TABLE1).Offset(20), + "select \"COL\" from \"TABLE1\" offset 20"); // select "COL" from "TABLE1" offset 20 + TEST(DB2, + Select(COL).From(TABLE1).Offset(20), + "select \"COL\" from \"TABLE1\" offset 20"); // select "COL" from "TABLE1" offset 20 +// --------------------------------- + TEST(MY_SQL, + Select(25 * 34).Get(), + "select 850"); // select 850 + TEST(SQLITE3, + Select(25 * 34).Get(), + "select 850"); // select 850 + TEST(ORACLE, + Select(25 * 34).Get(), + "select 850 from DUAL"); // select 850 from DUAL + TEST(MSSQL, + Select(25 * 34).Get(), + "select 850"); // select 850 + TEST(PGSQL, + Select(25 * 34).Get(), + "select 850"); // select 850 + TEST(FIREBIRD, + Select(25 * 34).Get(), + "select 850"); // select 850 + TEST(DB2, + Select(25 * 34).Get(), + "select 850"); // select 850 +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).Hint("hint"), + "/*+ hint */ select `COL` from `TABLE1`"); // /*+ hint */ select `COL` from `TABLE1` + TEST(SQLITE3, + Select(COL).From(TABLE1).Hint("hint"), + "/*+ hint */ select \"COL\" from \"TABLE1\""); // /*+ hint */ select "COL" from "TABLE1" + TEST(ORACLE, + Select(COL).From(TABLE1).Hint("hint"), + "/*+ hint */ select \"COL\" from \"TABLE1\""); // /*+ hint */ select "COL" from "TABLE1" + TEST(MSSQL, + Select(COL).From(TABLE1).Hint("hint"), + "/*+ hint */ select \"COL\" from \"TABLE1\""); // /*+ hint */ select "COL" from "TABLE1" + TEST(PGSQL, + Select(COL).From(TABLE1).Hint("hint"), + "/*+ hint */ select \"COL\" from \"TABLE1\""); // /*+ hint */ select "COL" from "TABLE1" + TEST(FIREBIRD, + Select(COL).From(TABLE1).Hint("hint"), + "/*+ hint */ select \"COL\" from \"TABLE1\""); // /*+ hint */ select "COL" from "TABLE1" + TEST(DB2, + Select(COL).From(TABLE1).Hint("hint"), + "/*+ hint */ select \"COL\" from \"TABLE1\""); // /*+ hint */ select "COL" from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).InnerJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select `COL` from `TABLE1` inner join `TABLE1` on `TABLE1`.`COL` = `TABLE1`.`COLUMN1`"); // select `COL` from `TABLE1` inner join `TABLE1` on `TABLE1`.`COL` = `TABLE1`.`COLUMN1` + TEST(SQLITE3, + Select(COL).From(TABLE1).InnerJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" inner join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" inner join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(ORACLE, + Select(COL).From(TABLE1).InnerJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" inner join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" inner join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(MSSQL, + Select(COL).From(TABLE1).InnerJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" inner join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" inner join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(PGSQL, + Select(COL).From(TABLE1).InnerJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" inner join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" inner join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(FIREBIRD, + Select(COL).From(TABLE1).InnerJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" inner join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" inner join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(DB2, + Select(COL).From(TABLE1).InnerJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" inner join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" inner join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).LeftJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select `COL` from `TABLE1` left outer join `TABLE1` on `TABLE1`.`COL` = `TABLE1`.`COLUMN1`"); // select `COL` from `TABLE1` left outer join `TABLE1` on `TABLE1`.`COL` = `TABLE1`.`COLUMN1` + TEST(SQLITE3, + Select(COL).From(TABLE1).LeftJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" left outer join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" left outer join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(ORACLE, + Select(COL).From(TABLE1).LeftJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" left outer join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" left outer join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(MSSQL, + Select(COL).From(TABLE1).LeftJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" left outer join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" left outer join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(PGSQL, + Select(COL).From(TABLE1).LeftJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" left outer join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" left outer join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(FIREBIRD, + Select(COL).From(TABLE1).LeftJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" left outer join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" left outer join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(DB2, + Select(COL).From(TABLE1).LeftJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" left outer join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" left outer join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).RightJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select `COL` from `TABLE1` right outer join `TABLE1` on `TABLE1`.`COL` = `TABLE1`.`COLUMN1`"); // select `COL` from `TABLE1` right outer join `TABLE1` on `TABLE1`.`COL` = `TABLE1`.`COLUMN1` + TEST(SQLITE3, + Select(COL).From(TABLE1).RightJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" right outer join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" right outer join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(ORACLE, + Select(COL).From(TABLE1).RightJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" right outer join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" right outer join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(MSSQL, + Select(COL).From(TABLE1).RightJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" right outer join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" right outer join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(PGSQL, + Select(COL).From(TABLE1).RightJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" right outer join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" right outer join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(FIREBIRD, + Select(COL).From(TABLE1).RightJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" right outer join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" right outer join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(DB2, + Select(COL).From(TABLE1).RightJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" right outer join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" right outer join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).FullJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select `COL` from `TABLE1` full outer join `TABLE1` on `TABLE1`.`COL` = `TABLE1`.`COLUMN1`"); // select `COL` from `TABLE1` full outer join `TABLE1` on `TABLE1`.`COL` = `TABLE1`.`COLUMN1` + TEST(SQLITE3, + Select(COL).From(TABLE1).FullJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" full outer join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" full outer join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(ORACLE, + Select(COL).From(TABLE1).FullJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" full outer join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" full outer join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(MSSQL, + Select(COL).From(TABLE1).FullJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" full outer join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" full outer join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(PGSQL, + Select(COL).From(TABLE1).FullJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" full outer join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" full outer join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(FIREBIRD, + Select(COL).From(TABLE1).FullJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" full outer join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" full outer join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(DB2, + Select(COL).From(TABLE1).FullJoin(TABLE1).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" full outer join \"TABLE1\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" full outer join "TABLE1" on "TABLE1"."COL" = "TABLE1"."COLUMN1" +// --------------------------------- + TEST(MY_SQL, + Delete(TABLE1).Where(COL < 0), + "delete from `TABLE1` where `COL` < 0"); // delete from `TABLE1` where `COL` < 0 + TEST(SQLITE3, + Delete(TABLE1).Where(COL < 0), + "delete from \"TABLE1\" where \"COL\" < 0"); // delete from "TABLE1" where "COL" < 0 + TEST(ORACLE, + Delete(TABLE1).Where(COL < 0), + "delete from \"TABLE1\" where \"COL\" < 0"); // delete from "TABLE1" where "COL" < 0 + TEST(MSSQL, + Delete(TABLE1).Where(COL < 0), + "delete from \"TABLE1\" where \"COL\" < 0"); // delete from "TABLE1" where "COL" < 0 + TEST(PGSQL, + Delete(TABLE1).Where(COL < 0), + "delete from \"TABLE1\" where \"COL\" < 0"); // delete from "TABLE1" where "COL" < 0 + TEST(FIREBIRD, + Delete(TABLE1).Where(COL < 0), + "delete from \"TABLE1\" where \"COL\" < 0"); // delete from "TABLE1" where "COL" < 0 + TEST(DB2, + Delete(TABLE1).Where(COL < 0), + "delete from \"TABLE1\" where \"COL\" < 0"); // delete from "TABLE1" where "COL" < 0 +// --------------------------------- + TEST(MY_SQL, + Insert(TABLE1)(COLUMN1, 12)(COLUMN2, "hello")(COL, Date(2007, 1, 1)), + "insert into `TABLE1`(`COLUMN1`, `COLUMN2`, `COL`) values (12, 'hello', '2007-01-01')"); // insert into `TABLE1`(`COLUMN1`, `COLUMN2`, `COL`) values (12, 'hello', '2007-01-01') + TEST(SQLITE3, + Insert(TABLE1)(COLUMN1, 12)(COLUMN2, "hello")(COL, Date(2007, 1, 1)), + "insert into \"TABLE1\"(\"COLUMN1\", \"COLUMN2\", \"COL\") values (12, 'hello', '2007-01-01')"); // insert into "TABLE1"("COLUMN1", "COLUMN2", "COL") values (12, 'hello', '2007-01-01') + TEST(ORACLE, + Insert(TABLE1)(COLUMN1, 12)(COLUMN2, "hello")(COL, Date(2007, 1, 1)), + "insert into \"TABLE1\"(\"COLUMN1\", \"COLUMN2\", \"COL\") values (12, 'hello', to_date('2007/1/1', 'SYYYY/MM/DD'))"); // insert into "TABLE1"("COLUMN1", "COLUMN2", "COL") values (12, 'hello', to_date('2007/1/1', 'SYYYY/MM/DD')) + TEST(MSSQL, + Insert(TABLE1)(COLUMN1, 12)(COLUMN2, "hello")(COL, Date(2007, 1, 1)), + "insert into \"TABLE1\"(\"COLUMN1\", \"COLUMN2\", \"COL\") values (12, 'hello', convert(datetime, '2007/1/1', 120))"); // insert into "TABLE1"("COLUMN1", "COLUMN2", "COL") values (12, 'hello', convert(datetime, '2007/1/1', 120)) + TEST(PGSQL, + Insert(TABLE1)(COLUMN1, 12)(COLUMN2, "hello")(COL, Date(2007, 1, 1)), + "insert into \"TABLE1\"(\"COLUMN1\", \"COLUMN2\", \"COL\") values (12, E'hello', date '2007-01-01')"); // insert into "TABLE1"("COLUMN1", "COLUMN2", "COL") values (12, E'hello', date '2007-01-01') + TEST(FIREBIRD, + Insert(TABLE1)(COLUMN1, 12)(COLUMN2, "hello")(COL, Date(2007, 1, 1)), + "insert into \"TABLE1\"(\"COLUMN1\", \"COLUMN2\", \"COL\") values (12, 'hello', '2007-01-01')"); // insert into "TABLE1"("COLUMN1", "COLUMN2", "COL") values (12, 'hello', '2007-01-01') + TEST(DB2, + Insert(TABLE1)(COLUMN1, 12)(COLUMN2, "hello")(COL, Date(2007, 1, 1)), + "insert into \"TABLE1\"(\"COLUMN1\", \"COLUMN2\", \"COL\") values (12, 'hello', '2007-01-01')"); // insert into "TABLE1"("COLUMN1", "COLUMN2", "COL") values (12, 'hello', '2007-01-01') +// --------------------------------- + TEST(MY_SQL, + Insert(TABLE1)(COLUMN1, 12)(COLUMN2)(COL).From(TABLE1).Where(COL >= 0), + "insert into `TABLE1`(`COLUMN1`, `COLUMN2`, `COL`) select 12, `COLUMN2`, `COL` from `TABLE1` where `COL` >= 0"); // insert into `TABLE1`(`COLUMN1`, `COLUMN2`, `COL`) select 12, `COLUMN2`, `COL` from `TABLE1` where `COL` >= 0 + TEST(SQLITE3, + Insert(TABLE1)(COLUMN1, 12)(COLUMN2)(COL).From(TABLE1).Where(COL >= 0), + "insert into \"TABLE1\"(\"COLUMN1\", \"COLUMN2\", \"COL\") select 12, \"COLUMN2\", \"COL\" from \"TABLE1\" where \"COL\" >= 0"); // insert into "TABLE1"("COLUMN1", "COLUMN2", "COL") select 12, "COLUMN2", "COL" from "TABLE1" where "COL" >= 0 + TEST(ORACLE, + Insert(TABLE1)(COLUMN1, 12)(COLUMN2)(COL).From(TABLE1).Where(COL >= 0), + "insert into \"TABLE1\"(\"COLUMN1\", \"COLUMN2\", \"COL\") select 12, \"COLUMN2\", \"COL\" from \"TABLE1\" where \"COL\" >= 0"); // insert into "TABLE1"("COLUMN1", "COLUMN2", "COL") select 12, "COLUMN2", "COL" from "TABLE1" where "COL" >= 0 + TEST(MSSQL, + Insert(TABLE1)(COLUMN1, 12)(COLUMN2)(COL).From(TABLE1).Where(COL >= 0), + "insert into \"TABLE1\"(\"COLUMN1\", \"COLUMN2\", \"COL\") select 12, \"COLUMN2\", \"COL\" from \"TABLE1\" where \"COL\" >= 0"); // insert into "TABLE1"("COLUMN1", "COLUMN2", "COL") select 12, "COLUMN2", "COL" from "TABLE1" where "COL" >= 0 + TEST(PGSQL, + Insert(TABLE1)(COLUMN1, 12)(COLUMN2)(COL).From(TABLE1).Where(COL >= 0), + "insert into \"TABLE1\"(\"COLUMN1\", \"COLUMN2\", \"COL\") select 12, \"COLUMN2\", \"COL\" from \"TABLE1\" where \"COL\" >= 0"); // insert into "TABLE1"("COLUMN1", "COLUMN2", "COL") select 12, "COLUMN2", "COL" from "TABLE1" where "COL" >= 0 + TEST(FIREBIRD, + Insert(TABLE1)(COLUMN1, 12)(COLUMN2)(COL).From(TABLE1).Where(COL >= 0), + "insert into \"TABLE1\"(\"COLUMN1\", \"COLUMN2\", \"COL\") select 12, \"COLUMN2\", \"COL\" from \"TABLE1\" where \"COL\" >= 0"); // insert into "TABLE1"("COLUMN1", "COLUMN2", "COL") select 12, "COLUMN2", "COL" from "TABLE1" where "COL" >= 0 + TEST(DB2, + Insert(TABLE1)(COLUMN1, 12)(COLUMN2)(COL).From(TABLE1).Where(COL >= 0), + "insert into \"TABLE1\"(\"COLUMN1\", \"COLUMN2\", \"COL\") select 12, \"COLUMN2\", \"COL\" from \"TABLE1\" where \"COL\" >= 0"); // insert into "TABLE1"("COLUMN1", "COLUMN2", "COL") select 12, "COLUMN2", "COL" from "TABLE1" where "COL" >= 0 +// --------------------------------- + TEST(MY_SQL, + Insert(TABLE1)(COLUMN1, 1).Where(NotExists(Select(ID).From(TABLE1).Where(COLUMN1 == 1))), + "insert into `TABLE1`(`COLUMN1`) select 1 where not exists (select `ID` from `TABLE1` where `COLUMN1` = 1)"); // insert into `TABLE1`(`COLUMN1`) select 1 where not exists (select `ID` from `TABLE1` where `COLUMN1` = 1) + TEST(SQLITE3, + Insert(TABLE1)(COLUMN1, 1).Where(NotExists(Select(ID).From(TABLE1).Where(COLUMN1 == 1))), + "insert into \"TABLE1\"(\"COLUMN1\") select 1 where not exists (select \"ID\" from \"TABLE1\" where \"COLUMN1\" = 1)"); // insert into "TABLE1"("COLUMN1") select 1 where not exists (select "ID" from "TABLE1" where "COLUMN1" = 1) + TEST(ORACLE, + Insert(TABLE1)(COLUMN1, 1).Where(NotExists(Select(ID).From(TABLE1).Where(COLUMN1 == 1))), + "insert into \"TABLE1\"(\"COLUMN1\") select 1 from DUAL where not exists (select \"ID\" from \"TABLE1\" where \"COLUMN1\" = 1)"); // insert into "TABLE1"("COLUMN1") select 1 from DUAL where not exists (select "ID" from "TABLE1" where "COLUMN1" = 1) + TEST(MSSQL, + Insert(TABLE1)(COLUMN1, 1).Where(NotExists(Select(ID).From(TABLE1).Where(COLUMN1 == 1))), + "insert into \"TABLE1\"(\"COLUMN1\") select 1 where not exists (select \"ID\" from \"TABLE1\" where \"COLUMN1\" = 1)"); // insert into "TABLE1"("COLUMN1") select 1 where not exists (select "ID" from "TABLE1" where "COLUMN1" = 1) + TEST(PGSQL, + Insert(TABLE1)(COLUMN1, 1).Where(NotExists(Select(ID).From(TABLE1).Where(COLUMN1 == 1))), + "insert into \"TABLE1\"(\"COLUMN1\") select 1 where not exists (select \"ID\" from \"TABLE1\" where \"COLUMN1\" = 1)"); // insert into "TABLE1"("COLUMN1") select 1 where not exists (select "ID" from "TABLE1" where "COLUMN1" = 1) + TEST(FIREBIRD, + Insert(TABLE1)(COLUMN1, 1).Where(NotExists(Select(ID).From(TABLE1).Where(COLUMN1 == 1))), + "insert into \"TABLE1\"(\"COLUMN1\") select 1 where not exists (select \"ID\" from \"TABLE1\" where \"COLUMN1\" = 1)"); // insert into "TABLE1"("COLUMN1") select 1 where not exists (select "ID" from "TABLE1" where "COLUMN1" = 1) + TEST(DB2, + Insert(TABLE1)(COLUMN1, 1).Where(NotExists(Select(ID).From(TABLE1).Where(COLUMN1 == 1))), + "insert into \"TABLE1\"(\"COLUMN1\") select 1 where not exists (select \"ID\" from \"TABLE1\" where \"COLUMN1\" = 1)"); // insert into "TABLE1"("COLUMN1") select 1 where not exists (select "ID" from "TABLE1" where "COLUMN1" = 1) +// --------------------------------- + TEST(MY_SQL, + Update(TABLE1)(COLUMN1, 13)(COLUMN2, "world").Where(COL > Date(2007, 1, 1)), + "update `TABLE1` set `COLUMN1` = 13, `COLUMN2` = 'world' where `COL` > '2007-01-01'"); // update `TABLE1` set `COLUMN1` = 13, `COLUMN2` = 'world' where `COL` > '2007-01-01' + TEST(SQLITE3, + Update(TABLE1)(COLUMN1, 13)(COLUMN2, "world").Where(COL > Date(2007, 1, 1)), + "update \"TABLE1\" set \"COLUMN1\" = 13, \"COLUMN2\" = 'world' where \"COL\" > '2007-01-01'"); // update "TABLE1" set "COLUMN1" = 13, "COLUMN2" = 'world' where "COL" > '2007-01-01' + TEST(ORACLE, + Update(TABLE1)(COLUMN1, 13)(COLUMN2, "world").Where(COL > Date(2007, 1, 1)), + "update \"TABLE1\" set \"COLUMN1\" = 13, \"COLUMN2\" = 'world' where \"COL\" > to_date('2007/1/1', 'SYYYY/MM/DD')"); // update "TABLE1" set "COLUMN1" = 13, "COLUMN2" = 'world' where "COL" > to_date('2007/1/1', 'SYYYY/MM/DD') + TEST(MSSQL, + Update(TABLE1)(COLUMN1, 13)(COLUMN2, "world").Where(COL > Date(2007, 1, 1)), + "update \"TABLE1\" set \"COLUMN1\" = 13, \"COLUMN2\" = 'world' where \"COL\" > convert(datetime, '2007/1/1', 120)"); // update "TABLE1" set "COLUMN1" = 13, "COLUMN2" = 'world' where "COL" > convert(datetime, '2007/1/1', 120) + TEST(PGSQL, + Update(TABLE1)(COLUMN1, 13)(COLUMN2, "world").Where(COL > Date(2007, 1, 1)), + "update \"TABLE1\" set \"COLUMN1\" = 13, \"COLUMN2\" = E'world' where \"COL\" > date '2007-01-01'"); // update "TABLE1" set "COLUMN1" = 13, "COLUMN2" = E'world' where "COL" > date '2007-01-01' + TEST(FIREBIRD, + Update(TABLE1)(COLUMN1, 13)(COLUMN2, "world").Where(COL > Date(2007, 1, 1)), + "update \"TABLE1\" set \"COLUMN1\" = 13, \"COLUMN2\" = 'world' where \"COL\" > '2007-01-01'"); // update "TABLE1" set "COLUMN1" = 13, "COLUMN2" = 'world' where "COL" > '2007-01-01' + TEST(DB2, + Update(TABLE1)(COLUMN1, 13)(COLUMN2, "world").Where(COL > Date(2007, 1, 1)), + "update \"TABLE1\" set \"COLUMN1\" = 13, \"COLUMN2\" = 'world' where \"COL\" > '2007-01-01'"); // update "TABLE1" set "COLUMN1" = 13, "COLUMN2" = 'world' where "COL" > '2007-01-01' +// --------------------------------- + TEST(MY_SQL, + Insert(TABLE1)(COL, Select(COLUMN1).From(TABLE1).Where(COLUMN2 == 21).AsValue()), + "insert into `TABLE1`(`COL`) values ((select `COLUMN1` from `TABLE1` where `COLUMN2` = 21))"); // insert into `TABLE1`(`COL`) values ((select `COLUMN1` from `TABLE1` where `COLUMN2` = 21)) + TEST(SQLITE3, + Insert(TABLE1)(COL, Select(COLUMN1).From(TABLE1).Where(COLUMN2 == 21).AsValue()), + "insert into \"TABLE1\"(\"COL\") values ((select \"COLUMN1\" from \"TABLE1\" where \"COLUMN2\" = 21))"); // insert into "TABLE1"("COL") values ((select "COLUMN1" from "TABLE1" where "COLUMN2" = 21)) + TEST(ORACLE, + Insert(TABLE1)(COL, Select(COLUMN1).From(TABLE1).Where(COLUMN2 == 21).AsValue()), + "insert into \"TABLE1\"(\"COL\") values ((select \"COLUMN1\" from \"TABLE1\" where \"COLUMN2\" = 21))"); // insert into "TABLE1"("COL") values ((select "COLUMN1" from "TABLE1" where "COLUMN2" = 21)) + TEST(MSSQL, + Insert(TABLE1)(COL, Select(COLUMN1).From(TABLE1).Where(COLUMN2 == 21).AsValue()), + "insert into \"TABLE1\"(\"COL\") values ((select \"COLUMN1\" from \"TABLE1\" where \"COLUMN2\" = 21))"); // insert into "TABLE1"("COL") values ((select "COLUMN1" from "TABLE1" where "COLUMN2" = 21)) + TEST(PGSQL, + Insert(TABLE1)(COL, Select(COLUMN1).From(TABLE1).Where(COLUMN2 == 21).AsValue()), + "insert into \"TABLE1\"(\"COL\") values ((select \"COLUMN1\" from \"TABLE1\" where \"COLUMN2\" = 21))"); // insert into "TABLE1"("COL") values ((select "COLUMN1" from "TABLE1" where "COLUMN2" = 21)) + TEST(FIREBIRD, + Insert(TABLE1)(COL, Select(COLUMN1).From(TABLE1).Where(COLUMN2 == 21).AsValue()), + "insert into \"TABLE1\"(\"COL\") values ((select \"COLUMN1\" from \"TABLE1\" where \"COLUMN2\" = 21))"); // insert into "TABLE1"("COL") values ((select "COLUMN1" from "TABLE1" where "COLUMN2" = 21)) + TEST(DB2, + Insert(TABLE1)(COL, Select(COLUMN1).From(TABLE1).Where(COLUMN2 == 21).AsValue()), + "insert into \"TABLE1\"(\"COL\") values ((select \"COLUMN1\" from \"TABLE1\" where \"COLUMN2\" = 21))"); // insert into "TABLE1"("COL") values ((select "COLUMN1" from "TABLE1" where "COLUMN2" = 21)) +// --------------------------------- + TEST(MY_SQL, + Insert(TABLE1)(COLUMN1)(COL, SqlSum(COLUMN2)).From(TABLE1).Where(COL >= 0).GroupBy(COLUMN1), + "insert into `TABLE1`(`COLUMN1`, `COL`) select `COLUMN1`, sum(`COLUMN2`) from `TABLE1` where `COL` >= 0 group by `COLUMN1`"); // insert into `TABLE1`(`COLUMN1`, `COL`) select `COLUMN1`, sum(`COLUMN2`) from `TABLE1` where `COL` >= 0 group by `COLUMN1` + TEST(SQLITE3, + Insert(TABLE1)(COLUMN1)(COL, SqlSum(COLUMN2)).From(TABLE1).Where(COL >= 0).GroupBy(COLUMN1), + "insert into \"TABLE1\"(\"COLUMN1\", \"COL\") select \"COLUMN1\", sum(\"COLUMN2\") from \"TABLE1\" where \"COL\" >= 0 group by \"COLUMN1\""); // insert into "TABLE1"("COLUMN1", "COL") select "COLUMN1", sum("COLUMN2") from "TABLE1" where "COL" >= 0 group by "COLUMN1" + TEST(ORACLE, + Insert(TABLE1)(COLUMN1)(COL, SqlSum(COLUMN2)).From(TABLE1).Where(COL >= 0).GroupBy(COLUMN1), + "insert into \"TABLE1\"(\"COLUMN1\", \"COL\") select \"COLUMN1\", sum(\"COLUMN2\") from \"TABLE1\" where \"COL\" >= 0 group by \"COLUMN1\""); // insert into "TABLE1"("COLUMN1", "COL") select "COLUMN1", sum("COLUMN2") from "TABLE1" where "COL" >= 0 group by "COLUMN1" + TEST(MSSQL, + Insert(TABLE1)(COLUMN1)(COL, SqlSum(COLUMN2)).From(TABLE1).Where(COL >= 0).GroupBy(COLUMN1), + "insert into \"TABLE1\"(\"COLUMN1\", \"COL\") select \"COLUMN1\", sum(\"COLUMN2\") from \"TABLE1\" where \"COL\" >= 0 group by \"COLUMN1\""); // insert into "TABLE1"("COLUMN1", "COL") select "COLUMN1", sum("COLUMN2") from "TABLE1" where "COL" >= 0 group by "COLUMN1" + TEST(PGSQL, + Insert(TABLE1)(COLUMN1)(COL, SqlSum(COLUMN2)).From(TABLE1).Where(COL >= 0).GroupBy(COLUMN1), + "insert into \"TABLE1\"(\"COLUMN1\", \"COL\") select \"COLUMN1\", sum(\"COLUMN2\") from \"TABLE1\" where \"COL\" >= 0 group by \"COLUMN1\""); // insert into "TABLE1"("COLUMN1", "COL") select "COLUMN1", sum("COLUMN2") from "TABLE1" where "COL" >= 0 group by "COLUMN1" + TEST(FIREBIRD, + Insert(TABLE1)(COLUMN1)(COL, SqlSum(COLUMN2)).From(TABLE1).Where(COL >= 0).GroupBy(COLUMN1), + "insert into \"TABLE1\"(\"COLUMN1\", \"COL\") select \"COLUMN1\", sum(\"COLUMN2\") from \"TABLE1\" where \"COL\" >= 0 group by \"COLUMN1\""); // insert into "TABLE1"("COLUMN1", "COL") select "COLUMN1", sum("COLUMN2") from "TABLE1" where "COL" >= 0 group by "COLUMN1" + TEST(DB2, + Insert(TABLE1)(COLUMN1)(COL, SqlSum(COLUMN2)).From(TABLE1).Where(COL >= 0).GroupBy(COLUMN1), + "insert into \"TABLE1\"(\"COLUMN1\", \"COL\") select \"COLUMN1\", sum(\"COLUMN2\") from \"TABLE1\" where \"COL\" >= 0 group by \"COLUMN1\""); // insert into "TABLE1"("COLUMN1", "COL") select "COLUMN1", sum("COLUMN2") from "TABLE1" where "COL" >= 0 group by "COLUMN1" +// --------------------------------- + TEST(MY_SQL, + Insert(TABLE1)(COLUMN1)(COL, SqlSum(COLUMN2)).From(TABLE1).Where(COL >= 0).GroupBy(COLUMN1).Having(COLUMN2 > 10), + "insert into `TABLE1`(`COLUMN1`, `COL`) select `COLUMN1`, sum(`COLUMN2`) from `TABLE1` where `COL` >= 0 group by `COLUMN1` having `COLUMN2` > 10"); // insert into `TABLE1`(`COLUMN1`, `COL`) select `COLUMN1`, sum(`COLUMN2`) from `TABLE1` where `COL` >= 0 group by `COLUMN1` having `COLUMN2` > 10 + TEST(SQLITE3, + Insert(TABLE1)(COLUMN1)(COL, SqlSum(COLUMN2)).From(TABLE1).Where(COL >= 0).GroupBy(COLUMN1).Having(COLUMN2 > 10), + "insert into \"TABLE1\"(\"COLUMN1\", \"COL\") select \"COLUMN1\", sum(\"COLUMN2\") from \"TABLE1\" where \"COL\" >= 0 group by \"COLUMN1\" having \"COLUMN2\" > 10"); // insert into "TABLE1"("COLUMN1", "COL") select "COLUMN1", sum("COLUMN2") from "TABLE1" where "COL" >= 0 group by "COLUMN1" having "COLUMN2" > 10 + TEST(ORACLE, + Insert(TABLE1)(COLUMN1)(COL, SqlSum(COLUMN2)).From(TABLE1).Where(COL >= 0).GroupBy(COLUMN1).Having(COLUMN2 > 10), + "insert into \"TABLE1\"(\"COLUMN1\", \"COL\") select \"COLUMN1\", sum(\"COLUMN2\") from \"TABLE1\" where \"COL\" >= 0 group by \"COLUMN1\" having \"COLUMN2\" > 10"); // insert into "TABLE1"("COLUMN1", "COL") select "COLUMN1", sum("COLUMN2") from "TABLE1" where "COL" >= 0 group by "COLUMN1" having "COLUMN2" > 10 + TEST(MSSQL, + Insert(TABLE1)(COLUMN1)(COL, SqlSum(COLUMN2)).From(TABLE1).Where(COL >= 0).GroupBy(COLUMN1).Having(COLUMN2 > 10), + "insert into \"TABLE1\"(\"COLUMN1\", \"COL\") select \"COLUMN1\", sum(\"COLUMN2\") from \"TABLE1\" where \"COL\" >= 0 group by \"COLUMN1\" having \"COLUMN2\" > 10"); // insert into "TABLE1"("COLUMN1", "COL") select "COLUMN1", sum("COLUMN2") from "TABLE1" where "COL" >= 0 group by "COLUMN1" having "COLUMN2" > 10 + TEST(PGSQL, + Insert(TABLE1)(COLUMN1)(COL, SqlSum(COLUMN2)).From(TABLE1).Where(COL >= 0).GroupBy(COLUMN1).Having(COLUMN2 > 10), + "insert into \"TABLE1\"(\"COLUMN1\", \"COL\") select \"COLUMN1\", sum(\"COLUMN2\") from \"TABLE1\" where \"COL\" >= 0 group by \"COLUMN1\" having \"COLUMN2\" > 10"); // insert into "TABLE1"("COLUMN1", "COL") select "COLUMN1", sum("COLUMN2") from "TABLE1" where "COL" >= 0 group by "COLUMN1" having "COLUMN2" > 10 + TEST(FIREBIRD, + Insert(TABLE1)(COLUMN1)(COL, SqlSum(COLUMN2)).From(TABLE1).Where(COL >= 0).GroupBy(COLUMN1).Having(COLUMN2 > 10), + "insert into \"TABLE1\"(\"COLUMN1\", \"COL\") select \"COLUMN1\", sum(\"COLUMN2\") from \"TABLE1\" where \"COL\" >= 0 group by \"COLUMN1\" having \"COLUMN2\" > 10"); // insert into "TABLE1"("COLUMN1", "COL") select "COLUMN1", sum("COLUMN2") from "TABLE1" where "COL" >= 0 group by "COLUMN1" having "COLUMN2" > 10 + TEST(DB2, + Insert(TABLE1)(COLUMN1)(COL, SqlSum(COLUMN2)).From(TABLE1).Where(COL >= 0).GroupBy(COLUMN1).Having(COLUMN2 > 10), + "insert into \"TABLE1\"(\"COLUMN1\", \"COL\") select \"COLUMN1\", sum(\"COLUMN2\") from \"TABLE1\" where \"COL\" >= 0 group by \"COLUMN1\" having \"COLUMN2\" > 10"); // insert into "TABLE1"("COLUMN1", "COL") select "COLUMN1", sum("COLUMN2") from "TABLE1" where "COL" >= 0 group by "COLUMN1" having "COLUMN2" > 10 +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(Select(COL).From(TABLE1)), + "select `COL` from (select `COL` from `TABLE1`)"); // select `COL` from (select `COL` from `TABLE1`) + TEST(SQLITE3, + Select(COL).From(Select(COL).From(TABLE1)), + "select \"COL\" from (select \"COL\" from \"TABLE1\")"); // select "COL" from (select "COL" from "TABLE1") + TEST(ORACLE, + Select(COL).From(Select(COL).From(TABLE1)), + "select \"COL\" from (select \"COL\" from \"TABLE1\")"); // select "COL" from (select "COL" from "TABLE1") + TEST(MSSQL, + Select(COL).From(Select(COL).From(TABLE1)), + "select \"COL\" from (select \"COL\" from \"TABLE1\")"); // select "COL" from (select "COL" from "TABLE1") + TEST(PGSQL, + Select(COL).From(Select(COL).From(TABLE1)), + "select \"COL\" from (select \"COL\" from \"TABLE1\")"); // select "COL" from (select "COL" from "TABLE1") + TEST(FIREBIRD, + Select(COL).From(Select(COL).From(TABLE1)), + "select \"COL\" from (select \"COL\" from \"TABLE1\")"); // select "COL" from (select "COL" from "TABLE1") + TEST(DB2, + Select(COL).From(Select(COL).From(TABLE1)), + "select \"COL\" from (select \"COL\" from \"TABLE1\")"); // select "COL" from (select "COL" from "TABLE1") +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(Select(COL).From(TABLE1).AsTable(TABLE2)), + "select `COL` from ((select `COL` from `TABLE1`) as `TABLE2`)"); // select `COL` from ((select `COL` from `TABLE1`) as `TABLE2`) + TEST(SQLITE3, + Select(COL).From(Select(COL).From(TABLE1).AsTable(TABLE2)), + "select \"COL\" from ((select \"COL\" from \"TABLE1\") as \"TABLE2\")"); // select "COL" from ((select "COL" from "TABLE1") as "TABLE2") + TEST(ORACLE, + Select(COL).From(Select(COL).From(TABLE1).AsTable(TABLE2)), + "select \"COL\" from ((select \"COL\" from \"TABLE1\") as \"TABLE2\")"); // select "COL" from ((select "COL" from "TABLE1") as "TABLE2") + TEST(MSSQL, + Select(COL).From(Select(COL).From(TABLE1).AsTable(TABLE2)), + "select \"COL\" from (select \"COL\" from \"TABLE1\") as \"TABLE2\""); // select "COL" from (select "COL" from "TABLE1") as "TABLE2" + TEST(PGSQL, + Select(COL).From(Select(COL).From(TABLE1).AsTable(TABLE2)), + "select \"COL\" from (select \"COL\" from \"TABLE1\") as \"TABLE2\""); // select "COL" from (select "COL" from "TABLE1") as "TABLE2" + TEST(FIREBIRD, + Select(COL).From(Select(COL).From(TABLE1).AsTable(TABLE2)), + "select \"COL\" from ((select \"COL\" from \"TABLE1\") as \"TABLE2\")"); // select "COL" from ((select "COL" from "TABLE1") as "TABLE2") + TEST(DB2, + Select(COL).From(Select(COL).From(TABLE1).AsTable(TABLE2)), + "select \"COL\" from ((select \"COL\" from \"TABLE1\") as \"TABLE2\")"); // select "COL" from ((select "COL" from "TABLE1") as "TABLE2") +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).LeftJoin(Select(COL).From(TABLE1)).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select `COL` from `TABLE1` left outer join (select `COL` from `TABLE1`) on `TABLE1`.`COL` = `TABLE1`.`COLUMN1`"); // select `COL` from `TABLE1` left outer join (select `COL` from `TABLE1`) on `TABLE1`.`COL` = `TABLE1`.`COLUMN1` + TEST(SQLITE3, + Select(COL).From(TABLE1).LeftJoin(Select(COL).From(TABLE1)).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" left outer join (select \"COL\" from \"TABLE1\") on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" left outer join (select "COL" from "TABLE1") on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(ORACLE, + Select(COL).From(TABLE1).LeftJoin(Select(COL).From(TABLE1)).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" left outer join (select \"COL\" from \"TABLE1\") on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" left outer join (select "COL" from "TABLE1") on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(MSSQL, + Select(COL).From(TABLE1).LeftJoin(Select(COL).From(TABLE1)).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" left outer join (select \"COL\" from \"TABLE1\") on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" left outer join (select "COL" from "TABLE1") on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(PGSQL, + Select(COL).From(TABLE1).LeftJoin(Select(COL).From(TABLE1)).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" left outer join (select \"COL\" from \"TABLE1\") on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" left outer join (select "COL" from "TABLE1") on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(FIREBIRD, + Select(COL).From(TABLE1).LeftJoin(Select(COL).From(TABLE1)).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" left outer join (select \"COL\" from \"TABLE1\") on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" left outer join (select "COL" from "TABLE1") on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(DB2, + Select(COL).From(TABLE1).LeftJoin(Select(COL).From(TABLE1)).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" left outer join (select \"COL\" from \"TABLE1\") on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" left outer join (select "COL" from "TABLE1") on "TABLE1"."COL" = "TABLE1"."COLUMN1" +// --------------------------------- + TEST(MY_SQL, + Select(COL).From(TABLE1).LeftJoin(Select(COL).From(TABLE1).AsTable(TABLE2)).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select `COL` from `TABLE1` left outer join ((select `COL` from `TABLE1`) as `TABLE2`) on `TABLE1`.`COL` = `TABLE1`.`COLUMN1`"); // select `COL` from `TABLE1` left outer join ((select `COL` from `TABLE1`) as `TABLE2`) on `TABLE1`.`COL` = `TABLE1`.`COLUMN1` + TEST(SQLITE3, + Select(COL).From(TABLE1).LeftJoin(Select(COL).From(TABLE1).AsTable(TABLE2)).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" left outer join ((select \"COL\" from \"TABLE1\") as \"TABLE2\") on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" left outer join ((select "COL" from "TABLE1") as "TABLE2") on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(ORACLE, + Select(COL).From(TABLE1).LeftJoin(Select(COL).From(TABLE1).AsTable(TABLE2)).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" left outer join ((select \"COL\" from \"TABLE1\") as \"TABLE2\") on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" left outer join ((select "COL" from "TABLE1") as "TABLE2") on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(MSSQL, + Select(COL).From(TABLE1).LeftJoin(Select(COL).From(TABLE1).AsTable(TABLE2)).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" left outer join (select \"COL\" from \"TABLE1\") as \"TABLE2\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" left outer join (select "COL" from "TABLE1") as "TABLE2" on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(PGSQL, + Select(COL).From(TABLE1).LeftJoin(Select(COL).From(TABLE1).AsTable(TABLE2)).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" left outer join (select \"COL\" from \"TABLE1\") as \"TABLE2\" on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" left outer join (select "COL" from "TABLE1") as "TABLE2" on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(FIREBIRD, + Select(COL).From(TABLE1).LeftJoin(Select(COL).From(TABLE1).AsTable(TABLE2)).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" left outer join ((select \"COL\" from \"TABLE1\") as \"TABLE2\") on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" left outer join ((select "COL" from "TABLE1") as "TABLE2") on "TABLE1"."COL" = "TABLE1"."COLUMN1" + TEST(DB2, + Select(COL).From(TABLE1).LeftJoin(Select(COL).From(TABLE1).AsTable(TABLE2)).On(COL.Of(TABLE1) == COLUMN1.Of(TABLE1)), + "select \"COL\" from \"TABLE1\" left outer join ((select \"COL\" from \"TABLE1\") as \"TABLE2\") on \"TABLE1\".\"COL\" = \"TABLE1\".\"COLUMN1\""); // select "COL" from "TABLE1" left outer join ((select "COL" from "TABLE1") as "TABLE2") on "TABLE1"."COL" = "TABLE1"."COLUMN1" +// --------------------------------- + TEST(MY_SQL, + Select(TABLE1(COL, COLUMN1)).From(TABLE1), + "select `TABLE1`.`COL`, `TABLE1`.`COLUMN1` from `TABLE1`"); // select `TABLE1`.`COL`, `TABLE1`.`COLUMN1` from `TABLE1` + TEST(SQLITE3, + Select(TABLE1(COL, COLUMN1)).From(TABLE1), + "select \"TABLE1\".\"COL\", \"TABLE1\".\"COLUMN1\" from \"TABLE1\""); // select "TABLE1"."COL", "TABLE1"."COLUMN1" from "TABLE1" + TEST(ORACLE, + Select(TABLE1(COL, COLUMN1)).From(TABLE1), + "select \"TABLE1\".\"COL\", \"TABLE1\".\"COLUMN1\" from \"TABLE1\""); // select "TABLE1"."COL", "TABLE1"."COLUMN1" from "TABLE1" + TEST(MSSQL, + Select(TABLE1(COL, COLUMN1)).From(TABLE1), + "select \"TABLE1\".\"COL\", \"TABLE1\".\"COLUMN1\" from \"TABLE1\""); // select "TABLE1"."COL", "TABLE1"."COLUMN1" from "TABLE1" + TEST(PGSQL, + Select(TABLE1(COL, COLUMN1)).From(TABLE1), + "select \"TABLE1\".\"COL\", \"TABLE1\".\"COLUMN1\" from \"TABLE1\""); // select "TABLE1"."COL", "TABLE1"."COLUMN1" from "TABLE1" + TEST(FIREBIRD, + Select(TABLE1(COL, COLUMN1)).From(TABLE1), + "select \"TABLE1\".\"COL\", \"TABLE1\".\"COLUMN1\" from \"TABLE1\""); // select "TABLE1"."COL", "TABLE1"."COLUMN1" from "TABLE1" + TEST(DB2, + Select(TABLE1(COL, COLUMN1)).From(TABLE1), + "select \"TABLE1\".\"COL\", \"TABLE1\".\"COLUMN1\" from \"TABLE1\""); // select "TABLE1"."COL", "TABLE1"."COLUMN1" from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(ID(ID, NAME, LASTNAME)).From(TABLE1).LeftJoinRef(TABLE2).Where(BDATE == Date(2011, 12, 9)), + "select `ID`.`ID`, `ID`.`NAME`, `ID`.`LASTNAME` from `TABLE1` left outer join `TABLE2` on `TABLE2`.`TABLE1_ID` = `TABLE1`.`NAME` where `BDATE` = '2011-12-09'"); // select `ID`.`ID`, `ID`.`NAME`, `ID`.`LASTNAME` from `TABLE1` left outer join `TABLE2` on `TABLE2`.`TABLE1_ID` = `TABLE1`.`NAME` where `BDATE` = '2011-12-09' + TEST(SQLITE3, + Select(ID(ID, NAME, LASTNAME)).From(TABLE1).LeftJoinRef(TABLE2).Where(BDATE == Date(2011, 12, 9)), + "select \"ID\".\"ID\", \"ID\".\"NAME\", \"ID\".\"LASTNAME\" from \"TABLE1\" left outer join \"TABLE2\" on \"TABLE2\".\"TABLE1_ID\" = \"TABLE1\".\"NAME\" where \"BDATE\" = '2011-12-09'"); // select "ID"."ID", "ID"."NAME", "ID"."LASTNAME" from "TABLE1" left outer join "TABLE2" on "TABLE2"."TABLE1_ID" = "TABLE1"."NAME" where "BDATE" = '2011-12-09' + TEST(ORACLE, + Select(ID(ID, NAME, LASTNAME)).From(TABLE1).LeftJoinRef(TABLE2).Where(BDATE == Date(2011, 12, 9)), + "select \"ID\".\"ID\", \"ID\".\"NAME\", \"ID\".\"LASTNAME\" from \"TABLE1\" left outer join \"TABLE2\" on \"TABLE2\".\"TABLE1_ID\" = \"TABLE1\".\"NAME\" where \"BDATE\" = to_date('2011/12/9', 'SYYYY/MM/DD')"); // select "ID"."ID", "ID"."NAME", "ID"."LASTNAME" from "TABLE1" left outer join "TABLE2" on "TABLE2"."TABLE1_ID" = "TABLE1"."NAME" where "BDATE" = to_date('2011/12/9', 'SYYYY/MM/DD') + TEST(MSSQL, + Select(ID(ID, NAME, LASTNAME)).From(TABLE1).LeftJoinRef(TABLE2).Where(BDATE == Date(2011, 12, 9)), + "select \"ID\".\"ID\", \"ID\".\"NAME\", \"ID\".\"LASTNAME\" from \"TABLE1\" left outer join \"TABLE2\" on \"TABLE2\".\"TABLE1_ID\" = \"TABLE1\".\"NAME\" where \"BDATE\" = convert(datetime, '2011/12/9', 120)"); // select "ID"."ID", "ID"."NAME", "ID"."LASTNAME" from "TABLE1" left outer join "TABLE2" on "TABLE2"."TABLE1_ID" = "TABLE1"."NAME" where "BDATE" = convert(datetime, '2011/12/9', 120) + TEST(PGSQL, + Select(ID(ID, NAME, LASTNAME)).From(TABLE1).LeftJoinRef(TABLE2).Where(BDATE == Date(2011, 12, 9)), + "select \"ID\".\"ID\", \"ID\".\"NAME\", \"ID\".\"LASTNAME\" from \"TABLE1\" left outer join \"TABLE2\" on \"TABLE2\".\"TABLE1_ID\" = \"TABLE1\".\"NAME\" where \"BDATE\" = date '2011-12-09'"); // select "ID"."ID", "ID"."NAME", "ID"."LASTNAME" from "TABLE1" left outer join "TABLE2" on "TABLE2"."TABLE1_ID" = "TABLE1"."NAME" where "BDATE" = date '2011-12-09' + TEST(FIREBIRD, + Select(ID(ID, NAME, LASTNAME)).From(TABLE1).LeftJoinRef(TABLE2).Where(BDATE == Date(2011, 12, 9)), + "select \"ID\".\"ID\", \"ID\".\"NAME\", \"ID\".\"LASTNAME\" from \"TABLE1\" left outer join \"TABLE2\" on \"TABLE2\".\"TABLE1_ID\" = \"TABLE1\".\"NAME\" where \"BDATE\" = '2011-12-09'"); // select "ID"."ID", "ID"."NAME", "ID"."LASTNAME" from "TABLE1" left outer join "TABLE2" on "TABLE2"."TABLE1_ID" = "TABLE1"."NAME" where "BDATE" = '2011-12-09' + TEST(DB2, + Select(ID(ID, NAME, LASTNAME)).From(TABLE1).LeftJoinRef(TABLE2).Where(BDATE == Date(2011, 12, 9)), + "select \"ID\".\"ID\", \"ID\".\"NAME\", \"ID\".\"LASTNAME\" from \"TABLE1\" left outer join \"TABLE2\" on \"TABLE2\".\"TABLE1_ID\" = \"TABLE1\".\"NAME\" where \"BDATE\" = '2011-12-09'"); // select "ID"."ID", "ID"."NAME", "ID"."LASTNAME" from "TABLE1" left outer join "TABLE2" on "TABLE2"."TABLE1_ID" = "TABLE1"."NAME" where "BDATE" = '2011-12-09' +// --------------------------------- + TEST(MY_SQL, + Select(ID(ID, NAME, LASTNAME)).From(TABLE1).LeftJoinRef(TABLE2).On(IsNull(BDATE)).Where(BDATE == Date(2011, 12, 9)), + "select `ID`.`ID`, `ID`.`NAME`, `ID`.`LASTNAME` from `TABLE1` left outer join `TABLE2` on `TABLE2`.`TABLE1_ID` = `TABLE1`.`NAME` and `BDATE` is NULL where `BDATE` = '2011-12-09'"); // select `ID`.`ID`, `ID`.`NAME`, `ID`.`LASTNAME` from `TABLE1` left outer join `TABLE2` on `TABLE2`.`TABLE1_ID` = `TABLE1`.`NAME` and `BDATE` is NULL where `BDATE` = '2011-12-09' + TEST(SQLITE3, + Select(ID(ID, NAME, LASTNAME)).From(TABLE1).LeftJoinRef(TABLE2).On(IsNull(BDATE)).Where(BDATE == Date(2011, 12, 9)), + "select \"ID\".\"ID\", \"ID\".\"NAME\", \"ID\".\"LASTNAME\" from \"TABLE1\" left outer join \"TABLE2\" on \"TABLE2\".\"TABLE1_ID\" = \"TABLE1\".\"NAME\" and \"BDATE\" is NULL where \"BDATE\" = '2011-12-09'"); // select "ID"."ID", "ID"."NAME", "ID"."LASTNAME" from "TABLE1" left outer join "TABLE2" on "TABLE2"."TABLE1_ID" = "TABLE1"."NAME" and "BDATE" is NULL where "BDATE" = '2011-12-09' + TEST(ORACLE, + Select(ID(ID, NAME, LASTNAME)).From(TABLE1).LeftJoinRef(TABLE2).On(IsNull(BDATE)).Where(BDATE == Date(2011, 12, 9)), + "select \"ID\".\"ID\", \"ID\".\"NAME\", \"ID\".\"LASTNAME\" from \"TABLE1\" left outer join \"TABLE2\" on \"TABLE2\".\"TABLE1_ID\" = \"TABLE1\".\"NAME\" and \"BDATE\" is NULL where \"BDATE\" = to_date('2011/12/9', 'SYYYY/MM/DD')"); // select "ID"."ID", "ID"."NAME", "ID"."LASTNAME" from "TABLE1" left outer join "TABLE2" on "TABLE2"."TABLE1_ID" = "TABLE1"."NAME" and "BDATE" is NULL where "BDATE" = to_date('2011/12/9', 'SYYYY/MM/DD') + TEST(MSSQL, + Select(ID(ID, NAME, LASTNAME)).From(TABLE1).LeftJoinRef(TABLE2).On(IsNull(BDATE)).Where(BDATE == Date(2011, 12, 9)), + "select \"ID\".\"ID\", \"ID\".\"NAME\", \"ID\".\"LASTNAME\" from \"TABLE1\" left outer join \"TABLE2\" on \"TABLE2\".\"TABLE1_ID\" = \"TABLE1\".\"NAME\" and \"BDATE\" is NULL where \"BDATE\" = convert(datetime, '2011/12/9', 120)"); // select "ID"."ID", "ID"."NAME", "ID"."LASTNAME" from "TABLE1" left outer join "TABLE2" on "TABLE2"."TABLE1_ID" = "TABLE1"."NAME" and "BDATE" is NULL where "BDATE" = convert(datetime, '2011/12/9', 120) + TEST(PGSQL, + Select(ID(ID, NAME, LASTNAME)).From(TABLE1).LeftJoinRef(TABLE2).On(IsNull(BDATE)).Where(BDATE == Date(2011, 12, 9)), + "select \"ID\".\"ID\", \"ID\".\"NAME\", \"ID\".\"LASTNAME\" from \"TABLE1\" left outer join \"TABLE2\" on \"TABLE2\".\"TABLE1_ID\" = \"TABLE1\".\"NAME\" and \"BDATE\" is NULL where \"BDATE\" = date '2011-12-09'"); // select "ID"."ID", "ID"."NAME", "ID"."LASTNAME" from "TABLE1" left outer join "TABLE2" on "TABLE2"."TABLE1_ID" = "TABLE1"."NAME" and "BDATE" is NULL where "BDATE" = date '2011-12-09' + TEST(FIREBIRD, + Select(ID(ID, NAME, LASTNAME)).From(TABLE1).LeftJoinRef(TABLE2).On(IsNull(BDATE)).Where(BDATE == Date(2011, 12, 9)), + "select \"ID\".\"ID\", \"ID\".\"NAME\", \"ID\".\"LASTNAME\" from \"TABLE1\" left outer join \"TABLE2\" on \"TABLE2\".\"TABLE1_ID\" = \"TABLE1\".\"NAME\" and \"BDATE\" is NULL where \"BDATE\" = '2011-12-09'"); // select "ID"."ID", "ID"."NAME", "ID"."LASTNAME" from "TABLE1" left outer join "TABLE2" on "TABLE2"."TABLE1_ID" = "TABLE1"."NAME" and "BDATE" is NULL where "BDATE" = '2011-12-09' + TEST(DB2, + Select(ID(ID, NAME, LASTNAME)).From(TABLE1).LeftJoinRef(TABLE2).On(IsNull(BDATE)).Where(BDATE == Date(2011, 12, 9)), + "select \"ID\".\"ID\", \"ID\".\"NAME\", \"ID\".\"LASTNAME\" from \"TABLE1\" left outer join \"TABLE2\" on \"TABLE2\".\"TABLE1_ID\" = \"TABLE1\".\"NAME\" and \"BDATE\" is NULL where \"BDATE\" = '2011-12-09'"); // select "ID"."ID", "ID"."NAME", "ID"."LASTNAME" from "TABLE1" left outer join "TABLE2" on "TABLE2"."TABLE1_ID" = "TABLE1"."NAME" and "BDATE" is NULL where "BDATE" = '2011-12-09' +// --------------------------------- + TEST(MY_SQL, + Select(SqlAll().Of(TABLE1)).From(TABLE1), + "select `TABLE1`.* from `TABLE1`"); // select `TABLE1`.* from `TABLE1` + TEST(SQLITE3, + Select(SqlAll().Of(TABLE1)).From(TABLE1), + "select \"TABLE1\".* from \"TABLE1\""); // select "TABLE1".* from "TABLE1" + TEST(ORACLE, + Select(SqlAll().Of(TABLE1)).From(TABLE1), + "select \"TABLE1\".* from \"TABLE1\""); // select "TABLE1".* from "TABLE1" + TEST(MSSQL, + Select(SqlAll().Of(TABLE1)).From(TABLE1), + "select \"TABLE1\".* from \"TABLE1\""); // select "TABLE1".* from "TABLE1" + TEST(PGSQL, + Select(SqlAll().Of(TABLE1)).From(TABLE1), + "select \"TABLE1\".* from \"TABLE1\""); // select "TABLE1".* from "TABLE1" + TEST(FIREBIRD, + Select(SqlAll().Of(TABLE1)).From(TABLE1), + "select \"TABLE1\".* from \"TABLE1\""); // select "TABLE1".* from "TABLE1" + TEST(DB2, + Select(SqlAll().Of(TABLE1)).From(TABLE1), + "select \"TABLE1\".* from \"TABLE1\""); // select "TABLE1".* from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(SqlTxt("TEST.*")).From(TABLE1), + "select TEST.* from `TABLE1`"); // select TEST.* from `TABLE1` + TEST(SQLITE3, + Select(SqlTxt("TEST.*")).From(TABLE1), + "select TEST.* from \"TABLE1\""); // select TEST.* from "TABLE1" + TEST(ORACLE, + Select(SqlTxt("TEST.*")).From(TABLE1), + "select TEST.* from \"TABLE1\""); // select TEST.* from "TABLE1" + TEST(MSSQL, + Select(SqlTxt("TEST.*")).From(TABLE1), + "select TEST.* from \"TABLE1\""); // select TEST.* from "TABLE1" + TEST(PGSQL, + Select(SqlTxt("TEST.*")).From(TABLE1), + "select TEST.* from \"TABLE1\""); // select TEST.* from "TABLE1" + TEST(FIREBIRD, + Select(SqlTxt("TEST.*")).From(TABLE1), + "select TEST.* from \"TABLE1\""); // select TEST.* from "TABLE1" + TEST(DB2, + Select(SqlTxt("TEST.*")).From(TABLE1), + "select TEST.* from \"TABLE1\""); // select TEST.* from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(SqlTxt("123")).From(TABLE1), + "select 123 from `TABLE1`"); // select 123 from `TABLE1` + TEST(SQLITE3, + Select(SqlTxt("123")).From(TABLE1), + "select 123 from \"TABLE1\""); // select 123 from "TABLE1" + TEST(ORACLE, + Select(SqlTxt("123")).From(TABLE1), + "select 123 from \"TABLE1\""); // select 123 from "TABLE1" + TEST(MSSQL, + Select(SqlTxt("123")).From(TABLE1), + "select 123 from \"TABLE1\""); // select 123 from "TABLE1" + TEST(PGSQL, + Select(SqlTxt("123")).From(TABLE1), + "select 123 from \"TABLE1\""); // select 123 from "TABLE1" + TEST(FIREBIRD, + Select(SqlTxt("123")).From(TABLE1), + "select 123 from \"TABLE1\""); // select 123 from "TABLE1" + TEST(DB2, + Select(SqlTxt("123")).From(TABLE1), + "select 123 from \"TABLE1\""); // select 123 from "TABLE1" +// --------------------------------- + TEST(MY_SQL, + Select(ID).From(TABLE1).Where(ID == SqlSetFrom(m)), + "select `ID` from `TABLE1` where `ID` in ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')"); // select `ID` from `TABLE1` where `ID` in ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9') + TEST(SQLITE3, + Select(ID).From(TABLE1).Where(ID == SqlSetFrom(m)), + "select \"ID\" from \"TABLE1\" where \"ID\" in ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')"); // select "ID" from "TABLE1" where "ID" in ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9') + TEST(ORACLE, + Select(ID).From(TABLE1).Where(ID == SqlSetFrom(m)), + "select \"ID\" from \"TABLE1\" where \"ID\" in ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')"); // select "ID" from "TABLE1" where "ID" in ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9') + TEST(MSSQL, + Select(ID).From(TABLE1).Where(ID == SqlSetFrom(m)), + "select \"ID\" from \"TABLE1\" where \"ID\" in ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')"); // select "ID" from "TABLE1" where "ID" in ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9') + TEST(PGSQL, + Select(ID).From(TABLE1).Where(ID == SqlSetFrom(m)), + "select \"ID\" from \"TABLE1\" where \"ID\" in (E'0', E'1', E'2', E'3', E'4', E'5', E'6', E'7', E'8', E'9')"); // select "ID" from "TABLE1" where "ID" in (E'0', E'1', E'2', E'3', E'4', E'5', E'6', E'7', E'8', E'9') + TEST(FIREBIRD, + Select(ID).From(TABLE1).Where(ID == SqlSetFrom(m)), + "select \"ID\" from \"TABLE1\" where \"ID\" in ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')"); // select "ID" from "TABLE1" where "ID" in ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9') + TEST(DB2, + Select(ID).From(TABLE1).Where(ID == SqlSetFrom(m)), + "select \"ID\" from \"TABLE1\" where \"ID\" in ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')"); // select "ID" from "TABLE1" where "ID" in ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9') +// --------------------------------- diff --git a/autotest/SqlExp/init b/autotest/SqlExp/init new file mode 100644 index 000000000..0a19bac2c --- /dev/null +++ b/autotest/SqlExp/init @@ -0,0 +1,5 @@ +#ifndef _SqlExp_icpp_init_stub +#define _SqlExp_icpp_init_stub +#include "Core/init" +#include "Sql/init" +#endif diff --git a/autotest/StableSort/StableSort.cpp b/autotest/StableSort/StableSort.cpp new file mode 100644 index 000000000..99c5fe123 --- /dev/null +++ b/autotest/StableSort/StableSort.cpp @@ -0,0 +1,90 @@ +#include + +#include +#include + +using namespace Upp; + +#define LLOG(x) + +struct Item : Comparable { + String v; + int i; + + int Compare(const Item& b) const { return SgnCompare(v, b.v); } +}; + +void Benchmark(); + +void Check(int N, int M) +{ + Cout() << "LESS\n"; + for(int pass = 0; pass < 2; pass++) { + int i; + Vector k; + Vector v; + StableSort(k); + Cout() << "Testing " << N << ' ' << M << EOL; + for(i = 0; i < N; i++) { + k.Add(AsString(rand() % M)); + v.Add(i); + } + Cout() << " GetStableSortOrder..." << EOL; + Vector o = pass ? GetStableSortOrderCmp(k) : GetStableSortOrder(k); + i = 0; + while(i < o.GetCount()) { + LLOG(k[o[i]].v); + if(i > 0) + ASSERT(k[o[i]] >= k[o[i - 1]]); + int j = i; + while(++j < o.GetCount() && k[o[j]] == k[o[i]]) + ASSERT(o[j] > o[j - 1]); + i = j; + } + Cout() << " StableIndexSort..." << EOL; + if(pass) + StableIndexSortCmp(k, v); + else + StableIndexSort(k, v); + Cout() << " Testing..." << EOL; + for(i = 0; i < k.GetCount(); i++) + LLOG(k[i] << ' ' << v[i]); + LLOG("----------"); + i = 0; + while(i < k.GetCount()) { + LLOG(k[i] << ' ' << v[i]); + if(i > 0) + ASSERT(k[i] >= k[i - 1]); + int j = i; + while(++j < k.GetCount() && k[j] == k[i]) + ASSERT(v[j] > v[j - 1]); + i = j; + } + if(pass == 0) + Cout() << "CMP\n"; + } +} + +CONSOLE_APP_MAIN +{ + Check(1000, 100); + Check(1000000, 100); + Check(1000000, 10000); + Check(1000000, 1); + for(int i = 1; i < 30000; i += i) + Check(2000000, i); +} + +void CompileCheck() +{ + Vector x; + IndexSort(x, x); + IndexSort2(x, x, x); + IndexSort3(x, x, x, x); + StableIndexSort(x, x); + StableIndexSort2(x, x, x); + StableIndexSort3(x, x, x, x); + StableIndexSortCmp(x, x); + StableIndexSort2Cmp(x, x, x); + StableIndexSort3Cmp(x, x, x, x); +} diff --git a/autotest/StableSort/StableSort.upp b/autotest/StableSort/StableSort.upp new file mode 100644 index 000000000..0e78ff460 --- /dev/null +++ b/autotest/StableSort/StableSort.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + StableSort.cpp; + +mainconfig + "" = ""; + diff --git a/autotest/StableSort/init b/autotest/StableSort/init new file mode 100644 index 000000000..17461b7fe --- /dev/null +++ b/autotest/StableSort/init @@ -0,0 +1,4 @@ +#ifndef _StableSort_icpp_init_stub +#define _StableSort_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/StrToTime/StrToTime.cpp b/autotest/StrToTime/StrToTime.cpp new file mode 100644 index 000000000..3620a60b6 --- /dev/null +++ b/autotest/StrToTime/StrToTime.cpp @@ -0,0 +1,25 @@ +#include + +using namespace Upp; + +void Test(const char *text) +{ + Time tm; + const char *q = StrToTime(tm, text); + if(q) + LOG(text << " -> " << tm << ", follows: " << q); + else + LOG("FAILED: " << text); +} + +CONSOLE_APP_MAIN +{ + SetLanguage(LNG_CZECH); + Test("15.12.2005 23:10:20 hello!"); + Test("15.12.2005 hello!"); + Test("15.12.2005 12:10 foo!"); + Test("15.12.2005 12 foo!"); + Test("15.12.2005 foo!"); + Test("uck!"); +} + diff --git a/autotest/StrToTime/StrToTime.upp b/autotest/StrToTime/StrToTime.upp new file mode 100644 index 000000000..9acb74561 --- /dev/null +++ b/autotest/StrToTime/StrToTime.upp @@ -0,0 +1,11 @@ +description "String to time conversion test\377"; + +uses + Core; + +file + StrToTime.cpp; + +mainconfig + "" = ""; + diff --git a/autotest/StrToTime/init b/autotest/StrToTime/init new file mode 100644 index 000000000..fd5c6252a --- /dev/null +++ b/autotest/StrToTime/init @@ -0,0 +1,4 @@ +#ifndef _StrToTime_icpp_init_stub +#define _StrToTime_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/Stream64PutGet/Stream64PutGet.cpp b/autotest/Stream64PutGet/Stream64PutGet.cpp new file mode 100644 index 000000000..d274deb4c --- /dev/null +++ b/autotest/Stream64PutGet/Stream64PutGet.cpp @@ -0,0 +1,35 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_FILE|LOG_COUT); + const int64 sz = (int64)5 * 1000 * 1000 * 1000; + String path = GetHomeDirFile("test.bin"); + { + Buffer big(sz); + LOG("Allocated"); + for(int64 i = 0; i < sz; i++) { + big[i] = i % 123; + } + FileOut out(path); + out.Put64(big, sz); + LOG("Saved"); + } + { + FileIn in(path); + for(int64 i = 0; i < sz; i++) + ASSERT(in.Get() == i % 123); + LOG("Loaded by bytes"); + } + { + Buffer big(sz); + FileIn in(path); + ASSERT(in.GetAll64(big, sz)); + LOG("Loaded by GetAll64"); + for(int64 i = 0; i < sz; i++) + ASSERT(big[i] == i % 123); + } + LOG("Test passed OK"); +} diff --git a/autotest/Stream64PutGet/Stream64PutGet.upp b/autotest/Stream64PutGet/Stream64PutGet.upp new file mode 100644 index 000000000..704badf30 --- /dev/null +++ b/autotest/Stream64PutGet/Stream64PutGet.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + Stream64PutGet.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/Stream64PutGet/init b/autotest/Stream64PutGet/init new file mode 100644 index 000000000..d6a3a9c8c --- /dev/null +++ b/autotest/Stream64PutGet/init @@ -0,0 +1,4 @@ +#ifndef _Stream64PutGet_icpp_init_stub +#define _Stream64PutGet_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/String/String.cpp b/autotest/String/String.cpp new file mode 100644 index 000000000..a796cd266 --- /dev/null +++ b/autotest/String/String.cpp @@ -0,0 +1,292 @@ +#include + +#define LDUMP(x) // DUMP(x) + +using namespace Upp; + +#define STEPS 40000000 + +namespace Upp { +typedef wchar *HT; +template <> +String AsString(const HT& s) +{ + return WString(s).ToString(); +} +} + +template +class TStr { + Vector v; + bool isvoid; + +public: + const tchar *Begin() const { return v.Begin(); } + const tchar *operator~() const { return Begin(); } + operator const char *() const { return v.Begin(); } + + tchar *Begin() { return v.Begin(); } + tchar *operator~() { return Begin(); } + operator tchar *() { return v.Begin(); } + + + TStr& operator=(const TStr& s) { v <<= s.v; isvoid = s.isvoid; return *this; } + + void Init() { v.Add(0); isvoid = false; } + + TStr() { Init(); } + TStr(const tchar *s) { TStr h = *this; Init(); while(*s) Cat(*s++); } + TStr(const tchar *s, int count) { Init(); while(count--) Cat(*s++); } + TStr(const TStr& s) { Init(); v <<= s.v; isvoid = s.isvoid; } + + void Cat(int c) { v.Top() = c; v.Add(0); isvoid = false; } + + void Insert(int pos, const tchar *s, int count) { + Vector vv(v, 1); + vv.InsertN(pos, count); + while(count--) + vv[pos++] = *s++; + v = vv; + isvoid = false; + } + + void Cat(const tchar *s, int count) { + TStr h(*this); + while(count--) + h.Cat(*s++); + *this = h; + } + + void Remove(int pos, int count) { v.Remove(pos, count); v[GetCount()] = 0; isvoid = false; } + void Trim(int pos) { v.SetCount(pos + 1); v[pos] = 0; isvoid = false; } + void Set(int pos, int c) { v[pos] = c; isvoid = false; } + void Clear() { v.Clear(); Init(); } + + void Strlen() { + for(int i = 0; i < GetCount(); i++) + if(v[i] == 0) { + Trim(i); + break; + } + isvoid = false; + } + + void SetLength(int n) { v.SetCount(n + 1); v[n] = 0; isvoid = false; } + int GetLength() const { return v.GetCount() - 1; } + int GetCount() const { return v.GetCount() - 1; } + + tchar& operator[](int i) { return v[i]; } + + static TStr GetVoid() { TStr x; x.isvoid = true; return x; } + bool IsVoid() const { return isvoid; } + + String ToString() const { + String x; + for(int i = 0; i < v.GetCount(); i++) + x.Cat(v[i]); + return x; + } +}; + +template +void UnitTest() +{ + typedef TStr String; + typedef TStr StringBuffer; + String x; + for(int q = 4; q--;) + for(int c = 32; c < 128; c++) + x.Cat(c); + const tchar *ins = ~x; + String ss, css; + NewString ns, cns; + int size = 40 * 1024 * 1024; + int size2 = 600; + int maxlen = 0; + for(int n = 0; n < STEPS; n++) { + NewString zerotest; + if(n % 1000000 == 0) { + Cout() << n << ", maxlen: " << maxlen << "\r\n"; + maxlen = 0; + } + // if(n == 86) + // Cout() << "Now!"; + if(ss.GetCount() > maxlen) + maxlen = ss.GetCount(); + if(ss.GetCount() > size) { + ss.Clear(); + ns.Clear(); + if(rand() % 2000 == 0) { + ss = String::GetVoid(); + ns = NewString::GetVoid(); + } + Swap(size, size2); + } + int ch = rand() % 96 + 32; + int pos = rand() % (ss.GetCount() + 1); + int cpos = Upp::max(0, pos - 1); + int icount = rand() % 160; + int pos2 = rand() % (ss.GetCount() + 1); + int rcount = rand() % (ss.GetCount() - pos + 1); + int op = rand() % 30; + LDUMP(n); + LDUMP(op); + switch(op) { + default: + ss.Cat(ch); + ns.Cat(ch); + break; + case 1: + ss.Insert(pos, ins, icount); + ns.Insert(pos, ins, icount); + break; + case 2: + ss.Remove(pos, rcount); + ns.Remove(pos, rcount); + break; + case 8: + case 20: + case 21: + case 22: + case 23: + case 24: + case 25: + case 26: + ss.Insert(pos2, ~ss + pos, rcount); + ns.Insert(pos2, ~ns + pos, rcount); + break; + case 3: + ss.Cat(ins, icount); + ns.Cat(ins, icount); + break; + case 4: { + String sh = ss; + NewString nh = ns; + ss.Insert(pos, sh.Begin(), sh.GetCount()); + ns.Insert(pos, nh.Begin(), nh.GetCount()); + } + break; + case 5: + ss = String(ss.Begin() + pos, rcount); + ns = NewString(ns.Begin() + pos, rcount); + break; + case 6: + css = ss; + cns = ns; + break; + case 7: + ss = css; + ns = cns; + break; + case 9: + if(ss.GetLength()) { + ss.Set(cpos, ch); + ns.Set(cpos, ch); + } + break; + case 10: + ss.Trim(pos); + ns.Trim(pos); + break; + case 11: + if(ss.GetLength()) { + StringBuffer sb = ss; + sb[cpos] = 'X'; + ss = sb; + NewStringBuffer nb(ns); + nb[cpos] = 'X'; + ns = nb; + } + break; + case 12: + if(ss.GetLength()) { + String h = ss; + StringBuffer sb = ss; + sb.Cat(h.Begin() + pos, rcount); + ss = sb; + NewStringBuffer nb(ns); + nb.Cat(nb.Begin() + pos, rcount); + ns = nb; + } + break; + case 14: + ss = ss; + ns = ns; + break; + case 15: + ss = ~ss + pos; + ns = ~ns + pos; + break; + case 13: + NewStringBuffer nb; + StringBuffer sb; + nb.SetLength(1000); + sb.SetLength(1000); + const char *s = "Hello!"; + tchar *a = nb; + tchar *b = sb; + while(*s) { + *a++ = *s; + *b++ = *s; + s++; + } + *a = *b = 0; + nb.Strlen(); + sb.Strlen(); + ns = nb; + ss = sb; + break; + } + MemoryCheck(); + NewString s(~ns, ns.GetCount()); + MemoryCheck(); + LDUMP(ss.Begin()); + LDUMP(ns.Begin()); + LDUMP(ss.GetLength()); + LDUMP(ns.GetCount()); + LDUMP(css.GetLength()); + LDUMP(cns.GetCount()); + LDUMP(String(ns.Begin(), ns.GetCount())); + LDUMP(String(cns.Begin(), cns.GetCount())); + ASSERT(ns[ns.GetCount()] == 0); + ASSERT(cns[cns.GetCount()] == 0); + ASSERT(ss[ns.GetCount()] == 0); + ASSERT(memcmp(ns.Begin(), ss.Begin(), sizeof(tchar) * ns.GetCount() + 1) == 0); + ASSERT(memcmp(cns.Begin(), css.Begin(), sizeof(tchar) * cns.GetCount() + 1) == 0); + ASSERT(GetHashValue(ns) == GetHashValue(NewString(~ns, ns.GetCount()))); + ASSERT(ns.IsVoid() == ss.IsVoid()); + } + Cout() << "Passed"; + RLOG("Test passed"); +} + +template +void TestBufferCat() +{ + typedef TStr String; + for(int n = 0; n < 2000; n++) { + StringBuffer *b = new StringBuffer; + String ss; + for(int x = 0; x < n; x++) { + int c = rand(); + b->Cat(c); + ss.Cat(c); + b->Begin(); + } + NewString ns = *b; +// LOGHEXDUMP(ns.Begin(), ns.GetCount()); +// LOGHEXDUMP(ss.Begin(), ss.GetCount()); + ASSERT(ss.GetLength() == ns.GetLength()); + ASSERT(memcmp(ns.Begin(), ss.Begin(), sizeof(tchar) * ns.GetCount() + 1) == 0); + delete b; + } +} + +CONSOLE_APP_MAIN +{ + TestBufferCat(); + TestBufferCat(); +// ATest(); + UnitTest(); + UnitTest(); +} diff --git a/autotest/String/String.upp b/autotest/String/String.upp new file mode 100644 index 000000000..8b2c3dd0e --- /dev/null +++ b/autotest/String/String.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + String.cpp; + +mainconfig + "" = ""; + diff --git a/autotest/String/init b/autotest/String/init new file mode 100644 index 000000000..a7eb689bf --- /dev/null +++ b/autotest/String/init @@ -0,0 +1,4 @@ +#ifndef _String_icpp_init_stub +#define _String_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/StringCompare/StringCompare.cpp b/autotest/StringCompare/StringCompare.cpp new file mode 100644 index 000000000..82ab917f2 --- /dev/null +++ b/autotest/StringCompare/StringCompare.cpp @@ -0,0 +1,38 @@ +#include + +#define LDUMP(x) +#define LLOGHEXDUMP(a, b) + +using namespace Upp; + +#define N 10000000 + +CONSOLE_APP_MAIN +{ + for(int q = 0; q < N; q++) { + LDUMP(q); + if(q % 10000 == 0) + Cout() << q << '\n'; + int eq = rand() % 40; + int l1 = rand() % 40; + int l2 = rand() % 40; + String a, b; + for(int i = 0; i < eq; i++) + a.Cat(rand() % 254 + 1); + b = a; + ASSERT(a.Compare(b) == 0); + for(int i = 0; i < l1; i++) + a.Cat(rand() % 254 + 1); + for(int i = 0; i < l2; i++) + b.Cat(rand() % 254 + 1); + int l = min(l1, l2) + eq; + LLOGHEXDUMP(a, a.GetLength()); + LLOGHEXDUMP(b, b.GetLength()); + LDUMP(a.Compare(b)); + LDUMP(strcmp(a, b)); + LDUMP(strcmp(~a, ~b)); + ASSERT(sgn(strcmp(a, b)) == sgn(a.Compare(b))); + ASSERT(a.Compare(a) == 0); + ASSERT(b.Compare(b) == 0); + } +} diff --git a/autotest/StringCompare/StringCompare.upp b/autotest/StringCompare/StringCompare.upp new file mode 100644 index 000000000..6173beeb4 --- /dev/null +++ b/autotest/StringCompare/StringCompare.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + StringCompare.cpp; + +mainconfig + "" = ""; + diff --git a/autotest/StringFind/StringFind.cpp b/autotest/StringFind/StringFind.cpp new file mode 100644 index 000000000..c1e90d03b --- /dev/null +++ b/autotest/StringFind/StringFind.cpp @@ -0,0 +1,78 @@ +#include + +using namespace Upp; + +#define LDUMP(x) DUMP(x) + +template +void Check(T haystack, T needle, int pos) +{ + if(haystack.Find(needle) != pos) { + DUMP(haystack); + DUMP(needle); + DUMP(haystack.Find(needle)); + NEVER(); + } + if(haystack.Find(needle + '!') >= 0) { + DUMP(haystack); + DUMP(needle + '!'); + DUMP(haystack.Find(needle)); + NEVER(); + } + if(haystack.ReverseFind(needle) != pos) { + DUMP(haystack); + DUMP(needle); + DUMP(haystack.ReverseFind(needle)); + NEVER(); + } +} + +template +void Check() +{ + + for(int l = 0; l < 30; l++) { + for(int r = 0; r < 30; r++) { + LOG(l << ":" << r); + for(int nl = 0; nl < 30; nl++) + for(int nr = 0; nr < 30; nr++) + for(int nc = 1; nc < 30; nc++) { + T needle = T('a', nl) + T('x', nc) + T('a', nr); + Check(T('a', l) + needle + T('a', r), needle, l); + Check(T('b', l) + needle + T('c', r), needle, l); + } + } + } + + ASSERT(T("test").Find("x") < 0); +} + +template +void CheckReplace() +{ + T x("Just a test"); + x.Replace(" a ", " another "); + DUMP(x); + ASSERT(x == T("Just another test")); + + x = T('_', 5) + x + T('_', 5) + x + T('_', 5); + DUMP(x); + x.Replace("test", "run"); + DUMP(x); + T y("Just another run"); + ASSERT(x == T('_', 5) + y + T('_', 5) + y + T('_', 5)); +} + + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + + CheckReplace(); + CheckReplace(); + + Check(); + Check(); + + LOG("Everything OK"); +} diff --git a/autotest/StringFind/StringFind.upp b/autotest/StringFind/StringFind.upp new file mode 100644 index 000000000..16706db48 --- /dev/null +++ b/autotest/StringFind/StringFind.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + StringFind.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/StringFind/init b/autotest/StringFind/init new file mode 100644 index 000000000..042121e6c --- /dev/null +++ b/autotest/StringFind/init @@ -0,0 +1,4 @@ +#ifndef _StringFind_icpp_init_stub +#define _StringFind_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/StringMethods/StringMethods.cpp b/autotest/StringMethods/StringMethods.cpp new file mode 100644 index 000000000..b2cf173fa --- /dev/null +++ b/autotest/StringMethods/StringMethods.cpp @@ -0,0 +1,176 @@ +#include + +using namespace Upp; + +template +void ATest() +{ + Str x = "0123456789012345"; + ASSERT(x.FindFirstOf("654") == 4); + ASSERT(x.FindFirstOf("46") == 4); + ASSERT(x.FindFirstOf("32", 10) == 12); + ASSERT(x.FindFirstOf("23", 10) == 12); + ASSERT(x.FindFirstOf(x) == 0); + ASSERT(x.Mid(3, 4) == Str("3456")); + ASSERT(x.Mid(3) == Str("3456789012345")); + ASSERT(x.Left(2) == Str("01")); + ASSERT(x.Right(2) == Str("45")); + ASSERT(x.Find('3') == 3); + ASSERT(x.ReverseFind('3') == 13); + ASSERT(x.GetLength() == 16); + ASSERT(x.Begin() + x.GetLength() == x.End()); + ASSERT(x[0] == '0'); + x.Insert(1, 'a'); + ASSERT(x == Str("0a123456789012345")); + x.Insert(2, ~Str("bcd"), 2); + ASSERT(x == Str("0abc123456789012345")); + x.Insert(1, ~Str("_")); + ASSERT(x == Str("0_abc123456789012345")); + x.Insert(1, x); + ASSERT(x == Str("00_abc123456789012345_abc123456789012345")); + x.Remove(1, 24); + ASSERT(x == Str("0123456789012345")); + Str b = "013"; + ASSERT(x < b); + ASSERT(x <= b); + ASSERT(x <= x); + ASSERT(x == x); + ASSERT(b > x); + ASSERT(b >= x); + ASSERT(x >= x); + ASSERT(x != b); + ASSERT(x.Compare(b) < 0); + ASSERT(b.Compare(x) > 0); + Str hh = "013"; + const chart *s = hh; + ASSERT(x < s); + ASSERT(x <= s); + ASSERT(x <= x); + ASSERT(x == x); + ASSERT(s > x); + ASSERT(s >= x); + ASSERT(x >= x); + ASSERT(x != s); + ASSERT(s != x); + ASSERT(s == b); + ASSERT(b == s); + ASSERT(x.Compare(s) < 0); + ASSERT(b.Compare(s) == 0); + ASSERT(!b.IsEqual(x)); + ASSERT(b.IsEqual(b)); + ASSERT(b.IsEqual(s)); + ASSERT(!x.IsEqual(b)); + b.Cat("ab"); + ASSERT(b == Str("013ab")); + b.Cat("ABCD", 2); + ASSERT(b == Str("013abAB")); + b.Cat('x', 3); + ASSERT(b == Str("013abABxxx")); + x.Cat(b); + ASSERT(x == Str("0123456789012345013abABxxx")); + b.Cat(x, 4); + ASSERT(b == Str("013abABxxx0123")); + b.Cat(~x, ~x + 3); + ASSERT(b == Str("013abABxxx0123012")); + b.Cat((chart2 *)s, 2); + ASSERT(b == Str("013abABxxx012301201")); + ASSERT(b.Find(2, ~Str("ABc"), 1) == 5); + ASSERT(b.Find(2, ~Str("ABc"), 6) < 0); + ASSERT(b.Find(~Str("AB"), 0) == 5); + ASSERT(b.Find("AB", 6) == -1); + ASSERT(b.Find(b) == 0); + ASSERT(b.Find(b, 1) < 0); + ASSERT(b.StartsWith("013")); + ASSERT(b.StartsWith(Str("013"))); + ASSERT(!b.StartsWith(~Str("012"))); + ASSERT(!b.StartsWith(Str("012"))); + ASSERT(b.StartsWith(~Str("012"), 2)); + ASSERT(b.EndsWith(~Str("201"))); + ASSERT(b.EndsWith(Str("201"))); + ASSERT(!b.EndsWith(~Str("202"))); + ASSERT(!b.EndsWith(Str("202"))); + x = "ab"; + b = "12"; + ASSERT(x + b == Str("ab12")); + ASSERT(x + "xx" == Str("abxx")); + ASSERT("xx" + x == Str("xxab")); + ASSERT(x + 'z' == Str("abz")); + ASSERT('z' + x == Str("zab")); + Str xx = x; + Str bb = b; + Swap(b, x); + ASSERT(xx == b); + ASSERT(bb == x); + StrBuf sb; + sb.Cat(~Str("a")); + sb.Cat(~Str("1234"), 3); + Str sx(sb); + ASSERT(sx == ~Str("a123")); + sb = bb; + sb[0] = 'a'; + bb = sb; + ASSERT(bb == ~Str("a2")); + + x = Str("beginneedneneneedleneneeneedletheend."); + + ASSERT(x.Find(~Str("")) == 0); + ASSERT(x.Find(~Str("xxx")) == -1); + ASSERT(x.Find(~Str("begin")) == 0); + ASSERT(x.Find(~Str("begi")) == 0); + ASSERT(x.Find(~Str("beg")) == 0); + ASSERT(x.Find(~Str("be")) == 0); + ASSERT(x.Find(~Str("b")) == 0); + ASSERT(x.Find(~Str("begin"), 1) == -1); + ASSERT(x.Find(~Str("begi"), 1) == -1); + ASSERT(x.Find(~Str("beg"), 1) == -1); + ASSERT(x.Find(~Str("be"), 1) == -1); + ASSERT(x.Find(~Str("b"), 1) == -1); + ASSERT(x.Find(~Str("theend.")) == 30); + ASSERT(x.Find(~Str("end.")) == 33); + ASSERT(x.Find(~Str("nd.")) == 34); + ASSERT(x.Find(~Str("d.")) == 35); + ASSERT(x.Find(~Str(".")) == 36); + ASSERT(x.Find(~Str("theend."), 34) == -1); + ASSERT(x.Find(~Str("end."), 34) == -1); + ASSERT(x.Find(~Str("nd."), 36) == -1); + ASSERT(x.Find(~Str("d."), 36) == -1); + ASSERT(x.Find(~Str("."), 37) == -1); + ASSERT(x.Find(~Str("needle")) == 13); + ASSERT(x.Find(~Str("needle"), 20) == 24); + ASSERT(x.ReverseFind(~Str("")) == 37); + ASSERT(x.ReverseFind(~Str("xxx")) == -1); + ASSERT(x.ReverseFind(~Str("begin")) == 0); + ASSERT(x.ReverseFind(~Str("begi")) == 0); + ASSERT(x.ReverseFind(~Str("beg")) == 0); + ASSERT(x.ReverseFind(~Str("be")) == 0); + ASSERT(x.ReverseFind(~Str("b")) == 0); + ASSERT(x.ReverseFind(~Str("begin"), 1) == -1); + ASSERT(x.ReverseFind(~Str("begi"), 1) == -1); + ASSERT(x.ReverseFind(~Str("beg"), 1) == -1); + ASSERT(x.ReverseFind(~Str("be"), 1) == 0); + ASSERT(x.ReverseFind(~Str("b"), 1) == 0); + ASSERT(x.ReverseFind(~Str("theend.")) == 30); + ASSERT(x.ReverseFind(~Str("end.")) == 33); + ASSERT(x.ReverseFind(~Str("nd.")) == 34); + ASSERT(x.ReverseFind(~Str("d.")) == 35); + ASSERT(x.ReverseFind(~Str(".")) == 36); + ASSERT(x.ReverseFind(~Str("theend."), 34) == -1); + ASSERT(x.ReverseFind(~Str("end."), 34) == -1); + ASSERT(x.ReverseFind(~Str("nd."), 36) == 34); + ASSERT(x.ReverseFind(~Str("d."), 36) == 35); + ASSERT(x.ReverseFind(~Str("."), 37) == -1); + ASSERT(x.ReverseFind(~Str("needle")) == 24); + ASSERT(x.ReverseFind(~Str("needle"), 20) == 13); +} + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + + ATest(); + ASSERT((String().Cat() << 123) == "123"); + + ATest(); + + LOG("======== Everything OK"); +} diff --git a/autotest/StringMethods/StringMethods.upp b/autotest/StringMethods/StringMethods.upp new file mode 100644 index 000000000..fc77a4cc5 --- /dev/null +++ b/autotest/StringMethods/StringMethods.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + StringMethods.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/StringMethods/init b/autotest/StringMethods/init new file mode 100644 index 000000000..dcca6e163 --- /dev/null +++ b/autotest/StringMethods/init @@ -0,0 +1,4 @@ +#ifndef _StringMethods_icpp_init_stub +#define _StringMethods_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/StringStream/StringStream.cpp b/autotest/StringStream/StringStream.cpp new file mode 100644 index 000000000..77c8b4e7e --- /dev/null +++ b/autotest/StringStream/StringStream.cpp @@ -0,0 +1,35 @@ +#include + +using namespace Upp; + +String RandomString(int n) +{ + String h; + while(n-- > 0) + h.Cat((byte)Random()); + return h; +} + +CONSOLE_APP_MAIN +{ + StringStream ss; + String es; + for(int i = 0; i < 100000000; i++) { + if(i % 10000 == 0) + Cout() << i << "\r\n"; + int p = Random(1000); + String h = RandomString(p); + ss.Put(h); + es.Cat(h); + + if(Random(15) == 0) { + h = ss.GetResult(); + ASSERT(h == es); + } + if(Random(15) == 0) { + ss.Create(); + es.Clear(); + } +// LOGHEXDUMP(es, es.GetCount()); + } +} diff --git a/autotest/StringStream/StringStream.upp b/autotest/StringStream/StringStream.upp new file mode 100644 index 000000000..f17c9dc1d --- /dev/null +++ b/autotest/StringStream/StringStream.upp @@ -0,0 +1,11 @@ +description "String stream unit testing\377"; + +uses + Core; + +file + StringStream.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/StringStream/init b/autotest/StringStream/init new file mode 100644 index 000000000..28b4bb1a3 --- /dev/null +++ b/autotest/StringStream/init @@ -0,0 +1,4 @@ +#ifndef _StringStream_icpp_init_stub +#define _StringStream_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/StringTest/StringTest.cpp b/autotest/StringTest/StringTest.cpp new file mode 100644 index 000000000..7aae13b45 --- /dev/null +++ b/autotest/StringTest/StringTest.cpp @@ -0,0 +1,124 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + String x = "0123456789012345"; + ASSERT(x.FindFirstOf("654") == 4); + ASSERT(x.FindFirstOf("46") == 4); + ASSERT(x.FindFirstOf("32", 10) == 12); + ASSERT(x.FindFirstOf("23", 10) == 12); + ASSERT(x.FindFirstOf(x) == 0); + ASSERT(x.Mid(3, 4) == String("3456")); + ASSERT(x.Mid(3) == String("3456789012345")); + ASSERT(x.Left(2) == String("01")); + ASSERT(x.Right(2) == String("45")); + ASSERT(x.Find('3') == 3); + ASSERT(x.ReverseFind('3') == 13); + ASSERT(x.GetLength() == 16); + ASSERT(x.Begin() + x.GetLength() == x.End()); + ASSERT(x[0] == '0'); + x.Insert(1, 'a'); + ASSERT(x == String("0a123456789012345")); + x.Insert(2, ~String("bcd"), 2); + ASSERT(x == String("0abc123456789012345")); + x.Insert(1, ~String("_")); + ASSERT(x == String("0_abc123456789012345")); + x.Insert(1, x); + ASSERT(x == String("00_abc123456789012345_abc123456789012345")); + x.Remove(1, 24); + ASSERT(x == String("0123456789012345")); + String b = "013"; + ASSERT(x < b); + ASSERT(x <= b); + ASSERT(x <= x); + ASSERT(x == x); + ASSERT(b > x); + ASSERT(b >= x); + ASSERT(x >= x); + ASSERT(x != b); + ASSERT(x.Compare(b) < 0); + ASSERT(b.Compare(x) > 0); + const char *s = "013"; + ASSERT(x < s); + ASSERT(x <= s); + ASSERT(x <= x); + ASSERT(x == x); + ASSERT(s > x); + ASSERT(s >= x); + ASSERT(x >= x); + ASSERT(x != s); + ASSERT(s != x); + ASSERT(s == b); + ASSERT(b == s); + ASSERT(x.Compare(s) < 0); + ASSERT(b.Compare(s) == 0); + ASSERT(!b.IsEqual(x)); + ASSERT(b.IsEqual(b)); + ASSERT(b.IsEqual(s)); + ASSERT(!x.IsEqual(b)); + b.Cat("ab"); + ASSERT(b == String("013ab")); + b.Cat("ABCD", 2); + ASSERT(b == String("013abAB")); + b.Cat('x', 3); + ASSERT(b == String("013abABxxx")); + x.Cat(b); + ASSERT(x == String("0123456789012345013abABxxx")); + b.Cat(x, 4); + ASSERT(b == String("013abABxxx0123")); + b.Cat(~x, ~x + 3); + ASSERT(b == String("013abABxxx0123012")); + b.Cat((byte *)s, 2); + ASSERT(b == String("013abABxxx012301201")); + ASSERT((String().Cat() << 123) == String("123")); + ASSERT(b.Find(2, "ABc", 1) == 5); + ASSERT(b.Find(2, "ABc", 6) < 0); + ASSERT(b.Find("AB", 0) == 5); + ASSERT(b.Find("AB", 6) == -1); + ASSERT(b.Find(b) == 0); + ASSERT(b.Find(b, 1) < 0); + ASSERT(b.StartsWith("013")); + ASSERT(b.StartsWith(String("013"))); + ASSERT(!b.StartsWith("012")); + ASSERT(!b.StartsWith(String("012"))); + ASSERT(b.StartsWith("012", 2)); + ASSERT(b.EndsWith("201")); + ASSERT(b.EndsWith(String("201"))); + ASSERT(!b.EndsWith("202")); + ASSERT(!b.EndsWith(String("202"))); + String rp = "abCCdd"; + String h; + (h = rp).Replace("CC", "0"); + ASSERT(h == "ab0dd"); + (h = rp).Replace("CC", String("0")); + ASSERT(h == "ab0dd"); + (h = rp).Replace(String("CC"), "0"); + ASSERT(h == "ab0dd"); + (h = rp).Replace(String("CC"), String("0")); + ASSERT(h == "ab0dd"); + x = "ab"; + b = "12"; + ASSERT(x + b == String("ab12")); + ASSERT(x + "xx" == String("abxx")); + ASSERT("xx" + x == String("xxab")); + ASSERT(x + 'z' == String("abz")); + ASSERT('z' + x == String("zab")); + ASSERT(x + (int)'z' == String("abz")); + ASSERT((int)'z' + x == String("zab")); + String xx = x; + String bb = b; + Swap(b, x); + ASSERT(xx == b); + ASSERT(bb == x); + StringBuffer sb; + sb.Cat("a"); + sb.Cat("1234", 3); + String sx(sb); + ASSERT(sx == "a123"); + sb = bb; + sb[0] = 'a'; + bb = sb; + ASSERT(bb == "a2"); +} diff --git a/autotest/StringTest/StringTest.upp b/autotest/StringTest/StringTest.upp new file mode 100644 index 000000000..e52056bbf --- /dev/null +++ b/autotest/StringTest/StringTest.upp @@ -0,0 +1,11 @@ +description "String unit test\377"; + +uses + Core; + +file + StringTest.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/StringTest/init b/autotest/StringTest/init new file mode 100644 index 000000000..ff6d9b596 --- /dev/null +++ b/autotest/StringTest/init @@ -0,0 +1,4 @@ +#ifndef _StringTest_icpp_init_stub +#define _StringTest_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/StringUtil/StringUtil.cpp b/autotest/StringUtil/StringUtil.cpp new file mode 100644 index 000000000..15b9fafe0 --- /dev/null +++ b/autotest/StringUtil/StringUtil.cpp @@ -0,0 +1,37 @@ +#include + +using namespace Upp; + +void TestTrimLeft(String what, String s, String r) +{ + for(int i = 0; i < 3; i++) { + ASSERT(TrimLeft(what, s) == r); + ASSERT(TrimLeft(~what, s) == r); + ASSERT(TrimLeft(~what, what.GetLength(), s) == r); + r = s; + what = i == 1 ? "" : ""; + } +} + +void TestTrimRight(String what, String s, String r) +{ + for(int i = 0; i < 3; i++) { + ASSERT(TrimRight(what, s) == r); + ASSERT(TrimRight(~what, s) == r); + ASSERT(TrimRight(~what, what.GetLength(), s) == r); + r = s; + what = i == 1 ? "" : ""; + } +} + +CONSOLE_APP_MAIN +{ + String h = "http://www.website.org"; + DDUMP(TrimLeft("test", h)); + DDUMP(TrimLeft("http://", h)); + DDUMP(TrimRight("test", h)); + DDUMP(TrimRight(".org", h)); + + TestTrimLeft("http://", "http://www.website.org", "www.website.org"); + TestTrimRight(".org", "www.website.org", "www.website"); +} diff --git a/autotest/StringUtil/StringUtil.upp b/autotest/StringUtil/StringUtil.upp new file mode 100644 index 000000000..f967f4257 --- /dev/null +++ b/autotest/StringUtil/StringUtil.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + StringUtil.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/StringUtil/init b/autotest/StringUtil/init new file mode 100644 index 000000000..908d9828b --- /dev/null +++ b/autotest/StringUtil/init @@ -0,0 +1,4 @@ +#ifndef _StringUtil_icpp_init_stub +#define _StringUtil_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/SvoValue/Checks.cpp b/autotest/SvoValue/Checks.cpp new file mode 100644 index 000000000..fe8f81d96 --- /dev/null +++ b/autotest/SvoValue/Checks.cpp @@ -0,0 +1,204 @@ +#include "SvoValue.h" + +void DumpNumber(const Value& v) +{ + RDUMP((int)v); + RDUMP((double)v); + RDUMP((int64)v); + RDUMP((bool)v); +} + +int xx; + +Value Opt0(); + +void Opt() { + Value v = Opt0(); + xx = v; +} + +void CheckString() +{ + Value v = "ahoj"; + for(int i = 0; i < 2; i++) { + String s = v; + RDUMP(s); + ASSERT(s == "ahoj"); + WString ws = v; + RDUMP(ws); + ASSERT(ws == WString("ahoj")); + v = ws; + } + v = String("ahoj"); + Value w = WString("ahoj"); + ASSERT(v == w); + RDUMP(GetHashValue(v)); + RDUMP(GetHashValue(w)); + ASSERT(GetHashValue(v) == GetHashValue(w)); +} + +void CheckDateTime() +{ + Time tm = GetSysTime(); + Date dt = tm; + + Value c; + Value v = tm; + RDUMP(v); + ASSERT((Date)v == dt); + Date xx = v; + ASSERT(xx == dt); + c = v; + RDUMP(c); + ASSERT((Date)c == dt); + Value cv = v; + RDUMP(cv); + ASSERT((Date)cv == dt); + + Value v2 = tm; + RDUMP(v2); + ASSERT(v2 == v); + c = v; + RDUMP(c); + ASSERT((Date)c == dt); + ASSERT(c == tm); + + v = dt; + tm = ToTime(dt); + v2 = tm; + + ASSERT(v == v2); + ASSERT(GetHashValue(v) == GetHashValue(v2)); + + ASSERT(IsDateTime(v)); + ASSERT(IsDateTime(c)); + + ASSERT(tm == v); + ASSERT(tm == v2); + ASSERT(dt == v); + ASSERT(dt == v2); +} + +void CheckValueMap() +{ + RLOG("------------------------------"); + RLOG("CheckValueMap"); + Value x = 123; + Value y = x; + ValueMap h; + h.Add("0", 123); + RDUMP(h["0"]); + h.Add("1", Date(2001, 12, 1)); + h.Add("2", "test"); + + Value v = h; + ASSERT(v.GetCount() == 3); + RDUMP(v["0"]); + ASSERT(v["0"] == 123); + ASSERT(v["1"] == Date(2001, 12, 1)); + ASSERT(v["2"] == "test"); + ASSERT(IsValueMap(v)); + ASSERT(IsValueArray(v)); + + ValueMap hh = v; + ASSERT(hh == h); + hh.Add(123, "foo"); + ASSERT(hh.GetCount() == 4); + ASSERT(v.GetCount() == 3); + ASSERT(hh[123] == "foo"); + + ValueArray va = v; + ASSERT(va.GetCount() == 3); + ASSERT(va[0] == 123); + ASSERT(va[1] == Date(2001, 12, 1)); + ASSERT(va[2] == "test"); +} + +void OtherChecks() +{ + Value c; + + ASSERT(c.IsVoid()); + RDUMP(c.IsVoid()); + + Value x = "Ahoj"; + String xx = x; + RDUMP(xx); + ASSERT(xx == "Ahoj"); + + Value xw = WString("Ahoj"); + RDUMP(xw); + RDUMP(xw == x); + + Value xc = x; + RDUMP(xc); + c = xc; + RDUMP(c); + + Value y = 123; + int yy = y; + RDUMP(yy); + + Value xn = (int)Null; + RDUMP(IsNull(xn)); + RDUMP(IsNull(yy)); + + Value yc = y; + RDUMP(y); + + c = y; + RDUMP(c); + + Value v2 = 123.0; + Value v3 = 123; + Value v4 = 125; + + RDUMP(v2 == y); + RDUMP(v3 == y); + RDUMP(v4 == y); + RDUMP(v4 == v2); + + ASSERT(v2 == v3); + ASSERT(v2 != v4); + ASSERT(v4 != x); + + Value uu = Uuid::Create(); + RDUMP(uu); + Value uuc = uu; + RDUMP(uuc); + + { + Color c = Blue; + Value v = c; + RDUMP(v); + Value v2 = v; + c = v2; + RDUMP(c); + } + + Value txt = "text"; + ASSERT(txt.GetCount() == 0); + ASSERT(txt["hhh"].IsError()); + ASSERT(txt[3].IsError()); + + ASSERT(txt != GetSysDate()); + ASSERT(txt == "text"); + ASSERT(txt == WString("text")); + ASSERT(txt != 123); + ASSERT(txt == String("text")); + + Value n = 123; + ASSERT(n != "ahoj"); + ASSERT(n == 123); + ASSERT(n == 123.0); + + Value d = 123.0; + ASSERT(d != "ahoj"); + ASSERT(d == 123); + ASSERT(d == 123.0); + + Value cc = Blue(); + ASSERT(cc != 123); + ASSERT(cc == Blue()); + ASSERT(cc != "Blue"); +} diff --git a/autotest/SvoValue/Raw.cpp b/autotest/SvoValue/Raw.cpp new file mode 100644 index 000000000..4ce9f8853 --- /dev/null +++ b/autotest/SvoValue/Raw.cpp @@ -0,0 +1,41 @@ +#include "SvoValue.h" + +void CheckRawValue() +{ + typedef Tuple2 T; + T x = MakeTuple(11, 22); + Value v = RawToValue(x); + const T& x2 = v.To(); + ASSERT(x2 == x); +} + +void CheckRawPickValue() +{ + Vector x; + x.Add(123); + Value v = RawPickToValue(pick(x)); + ASSERT(v.Is< Vector >()); + const Vector& xx = v.To< Vector >(); + ASSERT(xx.GetCount() == 1); + ASSERT(xx[0] == 123); + + x.Clear(); + x.Add(321); + v = RawDeepToValue(x); + const Vector& x2 = v.To< Vector >(); + ASSERT(x2.GetCount() == 1); + ASSERT(x2[0] == 321); + ASSERT(x.GetCount() == 1); + ASSERT(x[0] == 321); +} + +void CheckCreateRawValue() +{ + Value v; + Vector& x = CreateRawValue< Vector >(v); + x.Add(123); + ASSERT(v.Is< Vector >()); + const Vector& xx = v.To< Vector >(); + ASSERT(xx.GetCount() == 1); + ASSERT(xx[0] == 123); +} diff --git a/autotest/SvoValue/SvoValue.cpp b/autotest/SvoValue/SvoValue.cpp new file mode 100644 index 000000000..e73d79a07 --- /dev/null +++ b/autotest/SvoValue/SvoValue.cpp @@ -0,0 +1,124 @@ +#include "SvoValue.h" + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + +// temporary + Value ist = Opt0(); + if(ist.Is()) + RLOG("int"); + if(IsNumber(ist)) + RLOG("number"); +// + + + Value v; + ASSERT(v.IsVoid()); + + CheckType(Value()); + CheckType(String("ahoj"), true); + CheckType(String('a', 20), true); + CheckType(String('b', 200), true); + CheckType(WString("ahoj")); + CheckType(123); + CheckType(123.0); + CheckType(true); + CheckType((int64)123, true); + CheckType(Date(2012, 1, 1)); + CheckType(Time(2012, 1, 1, 15, 30), true); + CheckType(Complex(1, 2), true); + ValueArray va; + va.Add(123); + va.Add("ahoj"); + ASSERT(va.GetCount() == 2); + ASSERT(va[0] == 123); + ASSERT(va[1] == "ahoj"); + CheckType(va, true); + ValueMap map; + map.Add("1", 1); + map.Add("2", 2); + CheckType(map, true); + CheckType(Point(20, 20), true); + CheckType(Size(20, 20), true); + CheckType(Rect(0, 0, 123, 123), true); + CheckType(Point64(20, 20), true); + CheckType(Size64(20, 20), true); + CheckType(Rect64(0, 0, 123, 123), true); + CheckType(Pointf(20, 20), true); + CheckType(Sizef(20, 20), true); + CheckType(Rectf(0, 0, 123, 123), true); + CheckType(Blue(), true); + Uuid uuid; + uuid.a = 11234; + uuid.b = 321; + uuid.c = 1111; + uuid.d = 19999; + CheckType(uuid, true); + + CheckType(Arial(50).Bold().Strikeout(), true); + + { + DrawingDraw g(100, 100); + g.DrawText(0, 0, "Hello world"); + Drawing x = g.GetResult(); + CheckType(x); + } + + { + PaintingPainter g(100, 100); + g.DrawText(0, 0, "Hello world"); + Painting x = g.GetResult(); + CheckType(x); + } + + { + CheckType(CreateImage(Size(20, 20), Blue)); + } + + v = ErrorValue("error"); + CheckType(v, true); + ASSERT(v.IsVoid()); + ASSERT(v.IsError()); + ASSERT(!Value().IsError()); + RDUMP(GetErrorText(v)); + ASSERT(GetErrorText(v) == "error"); + + CheckValueMap(); + + CheckNumber(); + CheckNumber(); + CheckNumber(); + CheckNumber(); + + RLOG("------------------------------"); + RLOG("CheckString"); + CheckString(); + + RLOG("------------------------------"); + RLOG("CheckDateTime"); + CheckDateTime(); + + RLOG("------------------------------"); + RLOG("CheckValue"); + CheckRawValue(); + + RLOG("------------------------------"); + RLOG("CheckRawValue"); + CheckRawValue(); + + RLOG("------------------------------"); + RLOG("CheckRawPickValue"); + CheckRawPickValue(); + + RLOG("------------------------------"); + RLOG("CheckCreateRawValue"); + CheckCreateRawValue(); + + RLOG("------------------------------"); + RLOG("OtherChecks"); + OtherChecks(); + + RLOG("------------------------------"); + RLOG("######## Everything is OK"); +} diff --git a/autotest/SvoValue/SvoValue.h b/autotest/SvoValue/SvoValue.h new file mode 100644 index 000000000..c3be340e7 --- /dev/null +++ b/autotest/SvoValue/SvoValue.h @@ -0,0 +1,198 @@ +#ifndef _SvoValue_SvoValue_h_ +#define _SvoValue_SvoValue_h_ + +#include + +using namespace Upp; + +void DumpNumber(const Value& v); +Value Opt0(); +void Opt(); +void CheckString(); +void CheckDateTime(); +void CheckValueMap(); +void OtherChecks(); +void CheckRawPickValue(); +void CheckRawValue(); +void CheckCreateRawValue(); + +template +void CheckNumber() +{ + RLOG("========================================================"); + RLOG("CheckNumber " << typeid(T).name()); + Value v = (T)123; + Value v2 = (T)0; + Value vn = (T)Null; + Value dv = 123.0; + ASSERT(IsNumber(v)); + ASSERT(!IsError(v)); + ASSERT(!IsVoid(v)); + ASSERT(!IsString(v)); + ASSERT(!IsDateTime(v)); + ASSERT(vn.Is() || GetHashValue(v) == GetHashValue(dv)); + ASSERT(v != v2); + ASSERT(v != vn); + ASSERT(IsNull(vn) || vn.Is()); + DumpNumber(v); + DumpNumber(vn); + Value v1 = v; + RDUMP(v1); + RDUMP(v2); + RDUMP(v1 != v2); + ASSERT(v1 != v2); + v2 = v1; + RDUMP(v1); + RDUMP(v2); + RDUMP(v1 == v2); + ASSERT(v1 == v2); + Opt(); +} + +template +void CheckType(const T& x, bool checkhash = false) +{ + RLOG("========================================================"); + RLOG("CheckType " << typeid(T).name() << " = " << x); + String fn; + Value vf; + Value tt = x; + bool isvoid = tt.IsVoid(); + if(!isvoid) { + fn = ConfigFile(AsString(tt.GetType()) + ":" + AsString(x)); + if(FileExists(fn)) { + LoadFromFile(vf, fn); + if(IsValueMap(tt)) { + RDUMP(ValueMap(vf)); + ASSERT(ValueMap(vf) == ValueMap(x)); + } + else { + RDUMP(vf.To()); + ASSERT(vf.To() == x); + } + } + } + Value v = x; + RDUMP(v); + ASSERT((T)v == x); + ASSERT(isvoid ? v.IsVoid() : v.Is()); + if(!isvoid) { + StoreToFile(v, fn); + RDUMP(GetValueTypeNo()); + ASSERT(v.GetType() == GetValueTypeNo()); + if(!tt.Is() && !tt.Is()) + ASSERT(v.To() == x); + ASSERT((T)(v) == x); + if(!tt.Is() && !tt.Is() && !tt.Is()) { + Value hh; + for(int i = 0; i < 2; i++) { + ASSERT(IsNull(hh.Get())); + ASSERT(IsNull((T)hh)); + hh = (int)Null; + } + } + } + if(!vf.IsVoid()) + ASSERT(vf == v); + String h = StoreAsString(v); + Value vv; + LoadFromString(vv, h); + RDUMP(vv); + ASSERT(vv == v); + T xx = vv; + RDUMP(xx); + ASSERT(vv == v); + + RDUMP(GetHashValue(v)); + RDUMP(GetHashValue(xx)); + ASSERT(!checkhash || GetHashValue(v) == GetHashValue(xx)); + + Value vn = (T)Null; + ASSERT(IsNull(vn) || vn.Is()); + + DLOG("----------"); + RDUMP(v); + String xml = StoreAsXML(v, "test"); + RDUMP(xml); + vv = Null; + LoadFromXML(vv, xml); + RDUMP(vv); + ASSERT(vv == v); + + String json = StoreAsJson(v); + RDUMP(json); + vv = Null; + LoadFromJson(vv, json); + RDUMP(vv); + ASSERT(vv == v); + + if(!tt.Is()) { + DLOG("----------"); + v = Null; + + RDUMP(v); + String data = StoreAsString(v); + vv = x; + LoadFromString(vv, data); + RDUMP(vv); + ASSERT(IsNull(vv)); + + RDUMP(v); + xml = StoreAsXML(v, "test"); + RDUMP(xml); + vv = x; + LoadFromXML(vv, xml); + RDUMP(vv); + ASSERT(IsNull(vv)); + + json = StoreAsJson(v); + RDUMP(json); + vv = x; + LoadFromJson(vv, json); + RDUMP(vv); + ASSERT(IsNull(vv)); + + DLOG("----------"); + T tx = Null; + ASSERT(IsNull(tx)); + data = StoreAsString(tx); + T ty = x; + LoadFromString(ty, data); + RDUMP(ty); + ASSERT(IsNull(ty)); + + RDUMP(v); + xml = StoreAsXML(tx, "test"); + RDUMP(xml); + ty = x; + LoadFromXML(ty, xml); + RDUMP(ty); + ASSERT(IsNull(ty)); + + json = StoreAsJson(tx); + RDUMP(json); + ty = x; + LoadFromJson(ty, json); + RDUMP(ty); + ASSERT(IsNull(vv)); + + RDUMP(v); + tx = x; + xml = StoreAsXML(tx, "test"); + RDUMP(xml); + ty = Null; + LoadFromXML(ty, xml); + RDUMP(ty); + ASSERT(StoreAsXML(tx, "X") == StoreAsXML(x, "X")); + + json = StoreAsJson(tx); + RDUMP(json); + ty = Null; + LoadFromJson(ty, json); + RDUMP(ty); + ASSERT(StoreAsJson(tx) == StoreAsJson(x)); + ASSERT(IsNull(vv)); + } +} + +#endif diff --git a/autotest/SvoValue/SvoValue.upp b/autotest/SvoValue/SvoValue.upp new file mode 100644 index 000000000..da1fb42c6 --- /dev/null +++ b/autotest/SvoValue/SvoValue.upp @@ -0,0 +1,19 @@ +description "Value unit testing\377"; + +optimize_speed; + +uses + Core, + Painter, + Painter; + +file + SvoValue.h, + SvoValue2.cpp, + Checks.cpp, + Raw.cpp, + SvoValue.cpp optimize_speed; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/SvoValue/SvoValue2.cpp b/autotest/SvoValue/SvoValue2.cpp new file mode 100644 index 000000000..e0b6d186c --- /dev/null +++ b/autotest/SvoValue/SvoValue2.cpp @@ -0,0 +1,7 @@ +#include "SvoValue.h" + +Value Opt0() +{ + return 123; +} + diff --git a/autotest/SvoValue/init b/autotest/SvoValue/init new file mode 100644 index 000000000..a9410fc04 --- /dev/null +++ b/autotest/SvoValue/init @@ -0,0 +1,5 @@ +#ifndef _SvoValue_icpp_init_stub +#define _SvoValue_icpp_init_stub +#include "Core/init" +#include "Painter/init" +#endif diff --git a/autotest/Time/Time.cpp b/autotest/Time/Time.cpp new file mode 100644 index 000000000..b184ac568 --- /dev/null +++ b/autotest/Time/Time.cpp @@ -0,0 +1,48 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + + DUMP(GetTimeZoneText()); + + DUMP(GetTimeZone()); + Date d = GetSysDate(); + if(d < Date(d.year, 3, 20) && d > Date(d.year - 1, 10, 30)) { + LOG("Normaln CZ time"); + ASSERT(GetTimeZone() == 60); + ASSERT(ScanWwwTime("Tue, 25 Mar 2014 12:01:15 +1200") == Time(2014, 3, 25, 23, 1, 15)); + ASSERT(ScanWwwTime("Tue, 25 Mar 2014 12:01:15 +1000") == Time(2014, 3, 25, 21, 1, 15)); + ASSERT(ScanWwwTime("Tue, 25 Mar 2014 12:01:15 +0100") == Time(2014, 3, 25, 12, 1, 15)); + ASSERT(ScanWwwTime("Tue, 25 Mar 2014 12:01:15 +0000") == Time(2014, 3, 25, 11, 1, 15)); + ASSERT(ScanWwwTime("Tue, 25 Mar 2014 12:01:15 -0100") == Time(2014, 3, 25, 10, 1, 15)); + ASSERT(ScanWwwTime("Tue, 25 Mar 2014 12:01:15 -1000") == Time(2014, 3, 25, 1, 1, 15)); + ASSERT(ScanWwwTime("Tue, 25 Mar 2014 12:01:15 -1200") == Time(2014, 3, 24, 23, 1, 15)); + } + if(d > Date(d.year, 3, 30) && d > Date(d.year, 10, 20)) { + LOG("Daylight saving CZ time"); + ASSERT(GetTimeZone() == 120); + ASSERT(ScanWwwTime("Tue, 25 Mar 2014 12:01:15 +1200") == Time(2014, 3, 25, 22, 1, 15)); + ASSERT(ScanWwwTime("Tue, 25 Mar 2014 12:01:15 +1000") == Time(2014, 3, 25, 20, 1, 15)); + ASSERT(ScanWwwTime("Tue, 25 Mar 2014 12:01:15 +0100") == Time(2014, 3, 25, 11, 1, 15)); + ASSERT(ScanWwwTime("Tue, 25 Mar 2014 12:01:15 +0000") == Time(2014, 3, 25, 10, 1, 15)); + ASSERT(ScanWwwTime("Tue, 25 Mar 2014 12:01:15 -0100") == Time(2014, 3, 25, 9, 1, 15)); + ASSERT(ScanWwwTime("Tue, 25 Mar 2014 12:01:15 -1000") == Time(2014, 3, 25, 0, 1, 15)); + ASSERT(ScanWwwTime("Tue, 25 Mar 2014 12:01:15 -1200") == Time(2014, 3, 24, 22, 1, 15)); + } + ASSERT(ScanTimeZone("-1000") == -600); + DUMP(ScanTimeZone(GetTimeZoneText())); + ASSERT(ScanTimeZone("+1000") == 600); + DUMP(WwwFormat(GetSysTime())); + + for(int i = 0; i < 24 * 60 * 60 * 400; i += 133) { + if(i % 1000 * 133 == 0) + LOG("Done " << i); + Time tm = Time(2010, 1, 1) + i; + ASSERT(ScanWwwTime(WwwFormat(tm)) == tm); + } + + LOG("================== OK"); +} diff --git a/autotest/Time/Time.upp b/autotest/Time/Time.upp new file mode 100644 index 000000000..4c686b6ee --- /dev/null +++ b/autotest/Time/Time.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + Time.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/Time/init b/autotest/Time/init new file mode 100644 index 000000000..6a85ee4d6 --- /dev/null +++ b/autotest/Time/init @@ -0,0 +1,4 @@ +#ifndef _Time_icpp_init_stub +#define _Time_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/Utf8Format/Utf8Format.cpp b/autotest/Utf8Format/Utf8Format.cpp new file mode 100644 index 000000000..85f0c4602 --- /dev/null +++ b/autotest/Utf8Format/Utf8Format.cpp @@ -0,0 +1,70 @@ +#include + +using namespace Upp; + +String Sprntf(const char *fmt, ...) { + va_list argptr; + va_start(argptr, fmt); + return VFormat(fmt, argptr); +} + +CONSOLE_APP_MAIN +{ + DDUMP(String("lubäck").GetCharCount()); + DLOG("------------------"); + DDUMP(Sprntf("|%s|", "luback")); + DDUMP(Format("|%s|", "lubäck")); + DDUMP(Sprntf("|%40s|", "luback")); + DDUMP(Format("|%40s|", "lubäck")); + DDUMP(Sprntf("|%40s|", "luback")); + DDUMP(Format("|%40s|", "lubäck")); + DDUMP(Sprntf("|%40.40s|", "luback")); + DDUMP(Format("|%40.40s|", "lubäck")); + DDUMP(Sprntf("|%-40.40s|", "luback")); + DDUMP(Format("|%-40.40s|", "lubäck")); + DDUMP(Sprntf("|%40.5s|", "luback")); + DDUMP(Format("|%40.5s|", "lubäck")); + DDUMP(Sprntf("|%-40.5s|", "luback")); + DDUMP(Format("|%-40.5s|", "lubäck")); + DLOG("------------------"); + DDUMP(Sprntf("|%5s|", "luback")); + DDUMP(Format("|%5s|", "lubäck")); + DDUMP(Sprntf("|%5s|", "luback")); + DDUMP(Format("|%5s|", "lubäck")); + DDUMP(Sprntf("|%5.5s|", "luback")); + DDUMP(Format("|%5.5s|", "lubäck")); + DDUMP(Sprntf("|%-5.5s|", "luback")); + DDUMP(Format("|%-5.5s|", "lubäck")); + DDUMP(Sprntf("|%.5s|", "luback")); + DDUMP(Format("|%.5s|", "lubäck")); + DDUMP(Sprntf("|%-.5s|", "luback")); + DDUMP(Format("|%-.5s|", "lubäck")); + DLOG("------------------"); + DDUMP(Format("|%-40.40s|", "luback")); + DDUMP(Format("|%-40.40s|", "lubäck")); + DDUMP(Format("|%-40.40s|", "luback")); + DDUMP(Format("|%20s|", "lubäck")); + DDUMP(Format("|%20>s|", "luback")); + DLOG("------------------"); + DDUMP(Format("|%-4.4s|", "luback")); + DDUMP(Format("|%-4.4s|", "lubäck")); + DDUMP(Format("|%-4.4s|", "luback")); + DDUMP(Format("|%5s|", "lubäck")); + DDUMP(Format("|%5>s|", "luback")); + + DLOG("------------------"); + DDUMP(Sprintf("%d", 123)); + DDUMP(Format("%d", 123)); + + DLOG("------------------"); + SetDefaultCharset(CHARSET_WIN1250); + DDUMP(String("lubäck").GetCharCount()); +} diff --git a/autotest/Utf8Format/Utf8Format.upp b/autotest/Utf8Format/Utf8Format.upp new file mode 100644 index 000000000..cf70ac292 --- /dev/null +++ b/autotest/Utf8Format/Utf8Format.upp @@ -0,0 +1,11 @@ +description "Testing Format handling of utf8 texts (%s), also String::GetCharCount and Format(%d) optimization\377"; + +uses + Core; + +file + Utf8Format.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/ValueArrayInsert/ValueArrayInsert.cpp b/autotest/ValueArrayInsert/ValueArrayInsert.cpp new file mode 100644 index 000000000..688c3c6ab --- /dev/null +++ b/autotest/ValueArrayInsert/ValueArrayInsert.cpp @@ -0,0 +1,22 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + ValueArray va; + for(int i = 0; i < 10; i++) + va.Add(i); + LOG(va); + + ValueArray va2 = va; + va2.Remove(3, 3); + LOG(va2); + + va2.Insert(3, va2); + LOG(va2); + + va2.Append(va); + LOG(va2); +} + diff --git a/autotest/ValueArrayInsert/ValueArrayInsert.upp b/autotest/ValueArrayInsert/ValueArrayInsert.upp new file mode 100644 index 000000000..2d20bd1a3 --- /dev/null +++ b/autotest/ValueArrayInsert/ValueArrayInsert.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + ValueArrayInsert.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/ValueArrayInsert/init b/autotest/ValueArrayInsert/init new file mode 100644 index 000000000..cf20aef29 --- /dev/null +++ b/autotest/ValueArrayInsert/init @@ -0,0 +1,4 @@ +#ifndef _ValueArrayInsert_icpp_init_stub +#define _ValueArrayInsert_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/ValueCompare/ValueCompare.cpp b/autotest/ValueCompare/ValueCompare.cpp new file mode 100644 index 000000000..b47e36c6c --- /dev/null +++ b/autotest/ValueCompare/ValueCompare.cpp @@ -0,0 +1,99 @@ +#include + +using namespace Upp; + +template +void TestCompareT(T a, T b) +{ + LOG("==== TestCompare(" << a << " " << b << "): " << a.Compare(b)); + + ASSERT(sgn(a.Compare(b)) == -1); + ASSERT(sgn(b.Compare(a)) == 1); + ASSERT(a.Compare(a) == 0); + ASSERT(b.Compare(b) == 0); + + ASSERT(a > Null); + ASSERT(b > Null); + + ASSERT(a < b); + ASSERT(a <= a); + ASSERT(b <= b); + ASSERT(a <= b); + + ASSERT(b > a); + ASSERT(b >= a); + ASSERT(a >= a); + ASSERT(b >= b); + + ASSERT(a != b); + ASSERT(a == a); + ASSERT(b == b); +} + +void TestCompare(Value a, Value b) +{ + TestCompareT(a, b); +} + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_FILE|LOG_COUT); + + TestCompare("ahoj", "ahoj1"); + TestCompare(WString("ahoj"), WString("ahoj1")); + TestCompare(1, 2); + TestCompare(1.1, 1.2); + TestCompare(false, true); + TestCompare((int64)1, (int64)2); + TestCompare(GetSysTime(), GetSysTime() + 1); + TestCompare(GetSysDate(), GetSysDate() + 1); + + ValueArray va1; va1 << 1 << 2 << 3; + ValueArray va2; va2 << 1 << 2 << 4; + + TestCompareT(va1, va2); + TestCompare(va1, va2); + va2 = va1; + va2 << 0; + TestCompareT(va1, va2); + TestCompare(va1, va2); + + ValueMap m1; m1("a", 1)("b", 2); + ValueMap m2; m2("a", 1)("c", 2); + + TestCompareT(m1, m2); + + Value a = m1; + Value b = m2; + a.Compare(b); + + TestCompare(m1, m2); + + m2 = m1; + m2("b", 2); + + TestCompareT(m1, m2); + TestCompare(m1, m2); + + TestCompare((bool)false, 123); + TestCompare((bool)false, (int64)123); + TestCompare((bool)false, (double)123); + TestCompare((bool)false, (bool)true); + + TestCompare(12, 123); + TestCompare(12, (int64)123); + TestCompare(12, (double)123); + TestCompare(0, (bool)true); + + TestCompare((int64)12, 123); + TestCompare((int64)12, (int64)123); + TestCompare((int64)12, (double)123); + TestCompare((int64)0, (bool)true); + + TestCompare((double)12, 123); + TestCompare((double)12, (int64)123); + TestCompare((double)12, (double)123); + TestCompare((double)0, (bool)true); + + LOG("===== Everything is OK"); +} diff --git a/autotest/ValueCompare/ValueCompare.upp b/autotest/ValueCompare/ValueCompare.upp new file mode 100644 index 000000000..dde042b82 --- /dev/null +++ b/autotest/ValueCompare/ValueCompare.upp @@ -0,0 +1,11 @@ +description "Test of Value::Compare\377"; + +uses + Core; + +file + ValueCompare.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/ValueCompare/init b/autotest/ValueCompare/init new file mode 100644 index 000000000..d60caeddc --- /dev/null +++ b/autotest/ValueCompare/init @@ -0,0 +1,4 @@ +#ifndef _ValueCompare_icpp_init_stub +#define _ValueCompare_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/ValueIsSame/ValueIsSame.cpp b/autotest/ValueIsSame/ValueIsSame.cpp new file mode 100644 index 000000000..939eecd76 --- /dev/null +++ b/autotest/ValueIsSame/ValueIsSame.cpp @@ -0,0 +1,53 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + for(int pass = 0; pass < 3; pass++) { + ValueMap a; + a.Add(1, "1"); + a.Add(2, "2"); + + ValueMap b; + b.Add(2, "2"); + b.Add(1, "1"); + if(pass == 1) + b.Add(2, 2); + + ValueArray va1; + va1.Add(1); + va1.Add(a); + + ValueArray va2; + va2.Add(pass == 2 ? 2 : 1); + va2.Add(b); + + Value v1 = va1; + Value v2 = va2; + + LOG("--------------- " << pass); + DUMP(v1); + DUMP(v2); + DUMP(v1 == v2); + DUMP(v2 == v1); + DUMP(v1.IsSame(v2)); + DUMP(v2.IsSame(v1)); + + ASSERT(v1 != v2); + ASSERT(v2 != v1); + ASSERT(v1.IsSame(v2) == !pass); + ASSERT(v2.IsSame(v1) == !pass); + + LOG("---"); + + va2.Add(va1); + v2 = va2; + DUMP(v2); + DUMP(v1.IsSame(v2)); + DUMP(v2.IsSame(v1)); + + ASSERT(!v1.IsSame(v2)); + ASSERT(!v2.IsSame(v1)); + } +} diff --git a/autotest/ValueIsSame/ValueIsSame.upp b/autotest/ValueIsSame/ValueIsSame.upp new file mode 100644 index 000000000..d7156d95f --- /dev/null +++ b/autotest/ValueIsSame/ValueIsSame.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + ValueIsSame.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/ValueIsSame/init b/autotest/ValueIsSame/init new file mode 100644 index 000000000..ba284d34b --- /dev/null +++ b/autotest/ValueIsSame/init @@ -0,0 +1,4 @@ +#ifndef _ValueIsSame_icpp_init_stub +#define _ValueIsSame_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/Witz/Witz.upp b/autotest/Witz/Witz.upp new file mode 100644 index 000000000..db52e13f0 --- /dev/null +++ b/autotest/Witz/Witz.upp @@ -0,0 +1,14 @@ +description "Witz templates\377"; + +uses + Core, + Skylark; + +file + index.witz, + etalon, + main.cpp; + +mainconfig + "" = "SSE2 MT"; + diff --git a/autotest/Witz/etalon b/autotest/Witz/etalon new file mode 100644 index 000000000..654561d54 --- /dev/null +++ b/autotest/Witz/etalon @@ -0,0 +1,17 @@ +first value +second value +1 +Hello + + +Skylark test +# +Skylark test +#TITLE +#TITLE2 +## +## +

Skylark test

+some text +[ Skylark test Skylark test #NESTED ] +#aafe45 \ No newline at end of file diff --git a/autotest/Witz/index.witz b/autotest/Witz/index.witz new file mode 100644 index 000000000..0537ea5f6 --- /dev/null +++ b/autotest/Witz/index.witz @@ -0,0 +1,20 @@ +$MyMap["key1"] +$MyMap[1] +$MyArray[0] +$MyArray[1] +$MyArray[123] +$MyArray["hello"] +#TITLE +# +#TITLE +##TITLE +#TITLE2 +### +#### +

#TITLE

+some text +#NESTED +#aafe45 + +#define TITLE Skylark test +#define NESTED [ #TITLE #TITLE #NESTED ] diff --git a/autotest/Witz/init b/autotest/Witz/init new file mode 100644 index 000000000..bf6d9a350 --- /dev/null +++ b/autotest/Witz/init @@ -0,0 +1,5 @@ +#ifndef _Witz_icpp_init_stub +#define _Witz_icpp_init_stub +#include "Core/init" +#include "Skylark/init" +#endif diff --git a/autotest/Witz/main.cpp b/autotest/Witz/main.cpp new file mode 100644 index 000000000..094c12d6f --- /dev/null +++ b/autotest/Witz/main.cpp @@ -0,0 +1,62 @@ +#include + +using namespace Upp; + +SKYLARK(HomePage, "") +{ + ValueArray va; + va.Add(1); + va.Add("Hello"); + ValueMap m; + m.Add("key1", "first value"); + m.Add("key2", "second value"); + + http("MyValue", "some value") + ("MyRawValue", Raw("raw html")) + ("MyRawValue2", "another raw html") + ("MyArray", va) + ("MyMap", m) + .RenderResult("Skylark02/index"); +} + +struct MyApp : SkylarkApp { + MyApp() { + root = "myapp"; + #ifdef _DEBUG + prefork = 0; + use_caching = false; + #endif + } +}; + +CONSOLE_APP_MAIN +{ +#ifdef _DEBUG + StdLogSetup(LOG_FILE|LOG_COUT); + Ini::skylark_log = true; +#endif + + + MyApp app; + + Renderer http; + ValueArray va; + va.Add(1); + va.Add("Hello"); + ValueMap m; + m.Add("key1", "first value"); + m.Add("key2", "second value"); + + http("MyValue", "some value") + ("MyRawValue", Raw("raw html")) + ("MyRawValue2", "another raw html") + ("MyArray", va) + ("MyMap", m); + + String result = http.RenderString("Witz/index"); + + LOG("------------"); + LOG(result); + LOG("------------"); +// app.Run(); +} diff --git a/autotest/XmlNode/0.xml b/autotest/XmlNode/0.xml new file mode 100644 index 000000000..b8c37fc76 --- /dev/null +++ b/autotest/XmlNode/0.xml @@ -0,0 +1,9 @@ + + + + + + Some text + + + diff --git a/autotest/XmlNode/XmlNode.cpp b/autotest/XmlNode/XmlNode.cpp new file mode 100644 index 000000000..f271cf86b --- /dev/null +++ b/autotest/XmlNode/XmlNode.cpp @@ -0,0 +1,23 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + + XmlNode a = ParseXMLFile(GetDataFile("0.xml")); + XmlNode b = a; // pick copy + ASSERT(a.IsPicked()); + ASSERT(!b.IsPicked()); + + DDUMP(AsXML(b, XML_HEADER|XML_DOCTYPE)); + a <<= b; + ASSERT(!a.IsPicked()); + ASSERT(!b.IsPicked()); + DDUMP(AsXML(a, XML_HEADER|XML_DOCTYPE)); + DDUMP(AsXML(b, XML_HEADER|XML_DOCTYPE)); + AsXML(b, XML_HEADER|XML_DOCTYPE); + + DLOG("================ OK"); +} diff --git a/autotest/XmlNode/XmlNode.upp b/autotest/XmlNode/XmlNode.upp new file mode 100644 index 000000000..f2ea21adb --- /dev/null +++ b/autotest/XmlNode/XmlNode.upp @@ -0,0 +1,10 @@ +uses + Core; + +file + XmlNode.cpp, + 0.xml; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/XmlNode/init b/autotest/XmlNode/init new file mode 100644 index 000000000..279707b18 --- /dev/null +++ b/autotest/XmlNode/init @@ -0,0 +1,4 @@ +#ifndef _XmlNode_icpp_init_stub +#define _XmlNode_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/XmlStream/0.xml b/autotest/XmlStream/0.xml new file mode 100644 index 000000000..e8672ac79 --- /dev/null +++ b/autotest/XmlStream/0.xml @@ -0,0 +1,7 @@ + + +<12A-sx549d> + + + <4Al4tv13/> + diff --git a/autotest/XmlStream/1.xml b/autotest/XmlStream/1.xml new file mode 100644 index 000000000..b48027e72 --- /dev/null +++ b/autotest/XmlStream/1.xml @@ -0,0 +1,10 @@ + + + + + + + A410065 + + + diff --git a/autotest/XmlStream/2.xml b/autotest/XmlStream/2.xml new file mode 100644 index 000000000..8b5b63b87 --- /dev/null +++ b/autotest/XmlStream/2.xml @@ -0,0 +1 @@ +A410065 diff --git a/autotest/XmlStream/20130831_OB_536032_UZSZ.xml b/autotest/XmlStream/20130831_OB_536032_UZSZ.xml new file mode 100644 index 000000000..004e1da16 --- /dev/null +++ b/autotest/XmlStream/20130831_OB_536032_UZSZ.xml @@ -0,0 +1,1310 @@ + + + 1.1 + Platne + Plna + OB_UZSZ + 2013-09-01T05:17:12 + + 0 + 2012-06-29T01:36:44 + + + 321295 + 2013-08-31T23:58:32 + + + + 2013-08-30T11:28:44 + 2013-08-31T23:58:32 + + + + + + 536032 + Strýčice + 2 + + 3301 + + + 647 + + 2011-07-02T00:00:00 + 4217 + 125581 + + Strýčic + Strýčicím + Strýčice + Strýčicích + Strýčicemi + + CZ0311536032 + + + + + + -770353.00 -1159910.00 + + + + + + + + + + 138568 + Strýčice + + 536032 + + 2011-07-01T00:00:00 + 0 + 0 + + + + -770353.00 -1159910.00 + + + + + + + + 11723220 + + 1 + + + 5313044301 + + 1 + 7 + + 138568 + + 2011-07-01T00:00:00 + 0 + 0 + 735110301 + 1 + 8 + 8 + 9 + 9 + + + + -770364.45 -1159962.83 + + + + + + 11723238 + + 2 + + + 5313057301 + + 1 + 7 + + 138568 + + 2011-07-01T00:00:00 + 0 + 0 + 735061301 + 1 + 1 + 3 + 1 + 2 + 4 + + + + -770461.89 -1159993.08 + + + + + + 11723246 + + 3 + + + 5313047301 + + 1 + 7 + + 138568 + + 2011-07-01T00:00:00 + 0 + 0 + 735038301 + 1 + 8 + 8 + 9 + 9 + + + + -770445.89 -1159903.27 + + + + + + 11723254 + + 4 + + + 5313048301 + + 1 + 7 + + 138568 + + 2011-07-01T00:00:00 + 0 + 0 + 735033301 + 1 + 3 + 3 + 1 + 2 + 4 + + + + -770478.26 -1159861.18 + + + + + + 11723262 + + 5 + + + 5313049301 + + 1 + 7 + + 138568 + + 2011-07-01T00:00:00 + 0 + 0 + 735052301 + 1 + 3 + 3 + 1 + 2 + 4 + + + + -770416.89 -1159899.13 + + + + + + 11723271 + + 6 + + + 5313050301 + + 1 + 7 + + 138568 + + 2011-07-01T00:00:00 + 0 + 0 + 735074301 + 1 + 8 + 8 + 9 + 9 + + + + -770404.62 -1159905.69 + + + + + + 11723289 + + 7 + + + 5313053301 + + 1 + 7 + + 138568 + + 2011-07-01T00:00:00 + 0 + 0 + 735031301 + 1 + 1 + 3 + 1 + 2 + 1 + + + + -770372.90 -1159896.65 + + + + + + 11723297 + + 8 + + + 5313054301 + + 1 + 15 + + 138568 + + 2011-07-01T00:00:00 + 0 + 0 + 735103301 + 2 + 3 + 3 + 1 + 2 + 1 + + + + -770352.97 -1159918.38 + + + + + + 11723301 + + 9 + + + 5313051301 + + 1 + 7 + + 138568 + + 2011-07-01T00:00:00 + 0 + 0 + 735039301 + 2 + 3 + 3 + 1 + 2 + 1 + + + + -770388.11 -1159905.60 + + + + + + 11723319 + + 10 + + + 5313055301 + + 1 + 7 + + 138568 + + 2011-07-01T00:00:00 + 0 + 0 + 735104301 + 5 + 1 + 3 + 1 + 2 + 4 + + + + -770405.42 -1159990.62 + + + + + + 11723327 + + 11 + + 1 + + 138568 + + 2011-07-01T00:00:00 + 0 + 0 + 1 + 8 + 8 + 9 + 9 + + + + -770355.74 -1159942.43 + + + + + + 11723335 + + 12 + + + 5313046301 + + 1 + 7 + + 138568 + + 2011-07-01T00:00:00 + 0 + 0 + 735069301 + 1 + 3 + 3 + 1 + 2 + 1 + + + + -770433.29 -1159926.94 + + + + + + 11723343 + + 13 + + + 5313058301 + + 1 + 15 + + 138568 + + 2011-07-01T00:00:00 + 0 + 0 + 735105301 + 1 + 1 + 3 + 1 + 2 + 1 + + + + -770428.02 -1160143.53 + + + + + + 11723351 + + 14 + + + 5313059301 + + 1 + 7 + + 138568 + + 2011-07-01T00:00:00 + 0 + 0 + 735065301 + 3 + 3 + 3 + 1 + 2 + 1 + + + + -770381.18 -1160016.99 + + + + + + 11723360 + + 15 + + + 5313060301 + + 1 + 7 + + 138568 + + 2011-07-01T00:00:00 + 0 + 0 + 735068301 + 1 + 1 + 3 + 1 + 2 + 4 + + + + -770354.26 -1160027.07 + + + + + + 11723378 + + 16 + + + 5313061301 + + 1 + 7 + + 138568 + + 2011-07-01T00:00:00 + 0 + 0 + 735030301 + 2 + 3 + 3 + 1 + 2 + 1 + + + + -770515.05 -1159927.94 + + + + + + 11723386 + + 17 + + + 5313056301 + + 1 + 7 + + 138568 + + 2011-07-01T00:00:00 + 0 + 0 + 735079301 + 2 + 1 + 3 + 1 + 2 + 1 + + + + -770412.50 -1160027.35 + + + + + + 11723394 + + 18 + + + 5313066301 + + 1 + 7 + + 138568 + + 2011-07-01T00:00:00 + 0 + 0 + 735082301 + 1 + 1 + 3 + 1 + 2 + 1 + + + + -770419.17 -1160201.67 + + + + + + 11723408 + + 19 + + + 5313067301 + + 1 + 7 + + 138568 + + 2011-07-01T00:00:00 + 0 + 0 + 735083301 + 4 + 1 + 1 + 3 + 1 + 2 + 1 + + + + -770418.25 -1160207.94 + + + + + + 11723416 + + 20 + + + 5313068301 + + 1 + 7 + + 138568 + + 2011-07-01T00:00:00 + 0 + 0 + 735080301 + 1 + 8 + 8 + 9 + 9 + + + + -770418.17 -1160220.33 + + + + + + 11723424 + + 21 + + + 5313069301 + + 1 + 7 + + 138568 + + 2011-07-01T00:00:00 + 0 + 0 + 735081301 + 7 + 1 + 1 + 3 + 1 + 2 + 4 + + + + -770417.08 -1160226.23 + + + + + + 11723432 + + 1 + + 2 + + 138568 + + 2011-07-01T00:00:00 + 0 + 0 + 0 + + + + -771516.11 -1160898.63 + + + + + + + + 11790903 + 1 + 37341 + + 11723220 + + 2011-07-01T00:00:00 + 0 + 0 + + + + + -770364.45 -1159962.83 + + + + + + + 11790911 + 2 + 37341 + + 11723238 + + 2011-07-01T00:00:00 + 0 + 0 + + + + + -770461.89 -1159993.08 + + + + + + + 11790920 + 3 + 37341 + + 11723246 + + 2011-07-01T00:00:00 + 0 + 0 + + + + + -770445.89 -1159903.27 + + + + + + + 11790938 + 4 + 37341 + + 11723254 + + 2011-07-01T00:00:00 + 0 + 0 + + + + + -770478.26 -1159861.18 + + + + + + + 11790946 + 5 + 37341 + + 11723262 + + 2011-07-01T00:00:00 + 0 + 0 + + + + + -770416.89 -1159899.13 + + + + + + + 11790954 + 6 + 37341 + + 11723271 + + 2011-07-01T00:00:00 + 0 + 0 + + + + + -770404.62 -1159905.69 + + + + + + + 11790962 + 7 + 37341 + + 11723289 + + 2011-07-01T00:00:00 + 0 + 0 + + + + + -770372.90 -1159896.65 + + + + + + + 11790971 + 8 + 37341 + + 11723297 + + 2011-07-01T00:00:00 + 0 + 0 + + + + + -770352.97 -1159918.38 + + + + + + + 11790989 + 9 + 37341 + + 11723301 + + 2011-07-01T00:00:00 + 0 + 0 + + + + + -770388.11 -1159905.60 + + + + + + + 11790997 + 10 + 37341 + + 11723319 + + 2011-07-01T00:00:00 + 0 + 0 + + + + + -770405.42 -1159990.62 + + + + + + + 11791004 + 11 + 37341 + + 11723327 + + 2011-07-01T00:00:00 + 0 + 0 + + + + + -770355.74 -1159942.43 + + + + + + + 11791012 + 12 + 37341 + + 11723335 + + 2011-07-01T00:00:00 + 0 + 0 + + + + + -770433.29 -1159926.94 + + + + + + + 11791021 + 13 + 37341 + + 11723343 + + 2011-07-01T00:00:00 + 0 + 0 + + + + + -770428.02 -1160143.53 + + + + + + + 11791039 + 14 + 37341 + + 11723351 + + 2011-07-01T00:00:00 + 0 + 0 + + + + + -770381.18 -1160016.99 + + + + + + + 11791047 + 15 + 37341 + + 11723360 + + 2011-07-01T00:00:00 + 0 + 0 + + + + + -770354.26 -1160027.07 + + + + + + + 11791055 + 16 + 37341 + + 11723378 + + 2011-07-01T00:00:00 + 0 + 0 + + + + + -770515.05 -1159927.94 + + + + + + + 11791063 + 17 + 37341 + + 11723386 + + 2011-07-01T00:00:00 + 0 + 0 + + + + + -770412.50 -1160027.35 + + + + + + + 11791071 + 18 + 37341 + + 11723394 + + 2011-07-01T00:00:00 + 0 + 0 + + + + + -770419.17 -1160201.67 + + + + + + + 11791080 + 19 + 37341 + + 11723408 + + 2011-07-01T00:00:00 + 0 + 0 + + + + + -770418.25 -1160207.94 + + + + + + + 11791098 + 20 + 37341 + + 11723416 + + 2011-07-01T00:00:00 + 0 + 0 + + + + + -770418.17 -1160220.33 + + + + + + + 11791101 + 21 + 37341 + + 11723424 + + 2011-07-01T00:00:00 + 0 + 0 + + + + + -770417.08 -1160226.23 + + + + + + + 11791110 + 1 + 37341 + + 11723432 + + 2011-07-01T00:00:00 + 0 + 0 + + + + + -771516.11 -1160898.63 + + + + + + + + diff --git a/autotest/XmlStream/20131102_ST_ZZSZ.xml b/autotest/XmlStream/20131102_ST_ZZSZ.xml new file mode 100644 index 000000000..d705a9d05 --- /dev/null +++ b/autotest/XmlStream/20131102_ST_ZZSZ.xml @@ -0,0 +1,9 @@ + +1.1PlatnePrirustekST_ZZSZ2013-11-03T00:00:013841782013-11-02T01:01:003842012013-11-02T23:00:5920131101_ST_ZZSZ.xml.gz2013-11-02T23:00:592013-11-02T14:48:51930393Osinky u Krumsínatrue5929352013-11-02T00:00:0038419244946727812938010 \ No newline at end of file diff --git a/autotest/XmlStream/20131110_ST_ZZSZ.xml b/autotest/XmlStream/20131110_ST_ZZSZ.xml new file mode 100644 index 000000000..f347874b3 --- /dev/null +++ b/autotest/XmlStream/20131110_ST_ZZSZ.xml @@ -0,0 +1,9 @@ + +1.1PlatnePrirustekST_ZZSZ2013-11-11T00:00:013903622013-11-10T11:48:553903622013-11-10T11:48:5520131109_ST_ZZSZ.xml.gz2013-11-08T13:49:402013-11-10T11:48:55115972260329111331137478662013-11-10T00:00:0039036227444799010-637163.59 -1081122.9211597236032921501137478662013-11-10T00:00:0039036227444799010-637172.31 -1081105.051159782603122213257478662013-11-10T00:00:00390362274447990102213525043903622744479901027601153766603-637124.64 -1081119.555401763551159723603171478692011-07-01T00:00:0000194375603133121-637172.31 -1081102.45 \ No newline at end of file diff --git a/autotest/XmlStream/XmlStream.cpp b/autotest/XmlStream/XmlStream.cpp new file mode 100644 index 000000000..6b2fdc916 --- /dev/null +++ b/autotest/XmlStream/XmlStream.cpp @@ -0,0 +1,90 @@ +#include + +using namespace Upp; + +void Check0(const String& xml0, bool full) +{ + dword astyle = full ? 0 : XML_HEADER|XML_DOCTYPE; + dword pstyle = full ? 0 : XML_IGNORE_DECLS|XML_IGNORE_PIS|XML_IGNORE_COMMENTS; + String xml = AsXML(ParseXML(xml0, pstyle), astyle); + String p = GetHomeDirFile("XML.xml"); + SaveFile(p, xml); + XmlNode h = ParseXMLFile(p, pstyle); + AsXML(h); + String xml2 = AsXML(ParseXMLFile(p, pstyle), astyle); + SaveFile(GetHomeDirFile("XML2.xml"), xml2); + String xml1 = AsXML(ParseXML(xml, pstyle), astyle); + SaveFile(GetHomeDirFile("XML1.xml"), xml1); + + ASSERT(xml == xml1); + ASSERT(xml == xml2); +} + +void Check(const String& xml) +{ + Check0(xml, true); + String xml2 = AsXML(ParseXML(xml)); + Check0(xml2, false); +} + +String GenID() +{ + return "A" + AsString(Random(1000000)); +} + +void GenNode(XmlNode& n) +{ + bool doc = n.GetType() == XML_DOC; + XmlNode& nn = n.Add(); + nn.CreateTag(GenID()); + int N = Random(4); + for(int i = 0; i < N; i++) + nn.SetAttr(GenID(), AsString(Random())); + if(Random(10) == 0) + nn.Add().CreatePI(GenID()); + if(Random(10) == 0) + nn.Add().CreateComment(GenID()); + if(Random(10) == 0) + nn.Add().CreateDecl(GenID()); + N = Random(2) * Random(4); + if(nn.GetCount() == 0 && Random(3) == 0) + nn.Add().CreateText(GenID()); + else + for(int i = 0; i < N; i++) + GenNode(nn); +} + +void CheckFile(const char *path) +{ + LOG("======= " << path); + Check(AsXML(ParseXML(LoadFile(path), 0))); +} + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + + + for(FindFile ff(GetHomeDirFile("*.xml")); ff; ff.Next()) + CheckFile(ff.GetPath()); + + for(FindFile ff(GetDataFile("*.xml")); ff; ff.Next()) + CheckFile(ff.GetPath()); + + LOG("----- Fixed files OK"); + + SeedRandom(); + + for(int i = 0; i < 100; i++) { + LOG("* " << i); + XmlNode n; + XmlNode& nn = n.Add(); + nn.CreateTag(GenID()); + for(int i = 0; i < 100; i++) { + GenNode(nn); + String xml = AsXML(n); + Check(AsXML(n)); + } + } + +} diff --git a/autotest/XmlStream/XmlStream.upp b/autotest/XmlStream/XmlStream.upp new file mode 100644 index 000000000..12dc3f593 --- /dev/null +++ b/autotest/XmlStream/XmlStream.upp @@ -0,0 +1,12 @@ +uses + Core; + +file + XmlStream.cpp, + 0.xml, + 1.xml, + 2.xml; + +mainconfig + "" = "SSE2 TEST_XML"; + diff --git a/autotest/XmlStream/init b/autotest/XmlStream/init new file mode 100644 index 000000000..1c962d127 --- /dev/null +++ b/autotest/XmlStream/init @@ -0,0 +1,4 @@ +#ifndef _XmlStream_icpp_init_stub +#define _XmlStream_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/XmlTag/XmlTag.cpp b/autotest/XmlTag/XmlTag.cpp new file mode 100644 index 000000000..ad25dc2ec --- /dev/null +++ b/autotest/XmlTag/XmlTag.cpp @@ -0,0 +1,77 @@ +#include + +using namespace Upp; + +#define XML(x) LOG(#x << " ------------\n" << x << "\n-------\n\n") + +void Check(const String& s) +{ + String xml = XmlTag("outer")(XmlTag("inner").Text(s)); + LOG("==================== " << AsCString(s)); + LOG(xml); + XmlParser p(xml); + p.Tag("outer"); + p.Tag("inner"); + String h = p.ReadText(); + LOG("-----"); + LOG(AsCString(h)); + ASSERT(h == s); + +// String h = ParseXML(xml)["outer"]["inner"].GatherText(); +} + +CONSOLE_APP_MAIN +{ +// String h = XmlTag("test").Text("ahoj\nkamarade\n"); +// LOG(h); +// LOG("============="); +// LOG(XmlTag("hhh")(h)); + + XML(XmlTag("a")(XmlTag("b")())); + XML(XmlTag("c")(XmlTag("a")(XmlTag("b")()))); + XML(XmlTag("a")(XmlTag("b").Text("text/"))); + XML(XmlTag("simple")("text")); + XML(XmlTag("tag2").Text("text")); + XML(XmlTag("tag2").Text("text\n")); + XML(XmlTag("tag2").Text("\n")); + XML(XmlTag("tag2").Text("\n\n")); + XML(XmlTag("tag")(XmlTag("tag2").Text("text"))); + XML(XmlTag("tag")(XmlTag("tag2").Text("text\n"))); + XML(XmlTag("tag")(XmlTag("tag2").Text("\n"))); + XML(XmlTag("tag")(XmlTag("tag2").Text("\n\n"))); + XML(XmlTag("tag3")(XmlTag("tag")(XmlTag("tag2").Text("text")))); + XML(XmlTag("tag3")(XmlTag("tag")(XmlTag("tag2").Text("text\n")))); + XML(XmlTag("tag3")(XmlTag("tag")(XmlTag("tag2").Text("text\n")))); + XML(XmlTag("tag3")(XmlTag("tag")(XmlTag("tag2").Text("text\ntext")))); + XML(XmlTag("tag3")(XmlTag("tag")(XmlTag("tag2").Text("text\ntext\n")))); + XML(XmlTag("methodCall")(XmlTag("methodName")("METHOD") + + XmlTag("params")( + XmlTag("param")( + XmlTag("int")("123"))))); + XML(XmlTag("methodCall")(XmlTag("methodName")("METHOD") + + XmlTag("params")( + XmlTag("param")( + XmlTag("string")("\n"))))); + XML(XmlTag("param")(XmlTag("int")("123"))); + XML(XmlTag("params")(XmlTag("param")(XmlTag("int")("123")))); + XML(XmlTag("params")(XmlTag("param")(XmlTag("nil")()))); + XML(XmlTag("tag2")(XmlTag("tag")("attrib","bad\n + +using namespace Upp; + +template +struct Data { + T val; + + void Xmlize(XmlIO xml) { + xml("value", val); + } +}; + +template +void Test(const T& x) { + LOG("----------------------------------------"); + LOG("Xmlize: " << x << " [" << typeid(T).name() << "]"); + Data data; + data.val = x; + String xml = StoreAsXML(data, "XmlizeTest"); + LOG("Xml: "); + LOG(xml); + Data data2; + ASSERT(LoadFromXML(data2, xml)); + LOG("Loaded: " << data2.val); + ASSERT(data2.val == x); +} + +struct DataV { + Value val; + + void Xmlize(XmlIO xml) { + xml("Value", val); + } +}; + +template +void TestV(const T& x) { + Test(x); + LOG("-----"); + DataV data; + data.val = x; + String xml = StoreAsXML(data, "XmlizeValue"); + LOG("Value Xml: "); + LOG(xml); + DataV data2; + ASSERT(LoadFromXML(data2, xml)); + LOG("Loaded: " << data2.val); + ASSERT(data2.val == data.val); +} + +template +struct DefData { + T val; + T def; + + void Xmlize(XmlIO xml) { + xml("value", val, def); + } +}; + +template +void TestDef(const T& x, const T& def) { + Test(x); + LOG("-----"); + DefData data; + data.def = def; + LoadFromXML(data, ""); + DLOG("Retrieved default value: " << data.val); + ASSERT(data.val == def); + data.val = x; + String xml = StoreAsXML(data, "XmlizeValue"); + LOG("Value Xml: "); + LOG(xml); + DefData data2; + ASSERT(LoadFromXML(data2, xml)); + LOG("Loaded: " << data2.val); + ASSERT(data2.val == data.val); +} + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_FILE|LOG_COUT); + + TestV(String("Just a test!")); + TestV(WString("Just a test!")); + TestV((int) 123); + Test((dword) 0xffff0000); + TestV(12.3456789); + Test((int16)20000); + TestV((int64)I64(0xffff000025689)); + Test((int16)123); + + TestV(GetSysTime()); + TestV(GetSysDate()); + + TestV(Point(1, 2)); + Test(Point16(1, 2)); + TestV(Point64(1, 2)); + TestV(Pointf(1, 2)); + + TestV(Size(3, 4)); + Test(Size16(3, 4)); + TestV(Size64(3, 4)); + TestV(Sizef(3, 4)); + + TestV(Rect(23, 12, 56, 88)); + Test(Rect16(23, 12, 56, 88)); + TestV(Rect64(23, 12, 56, 88)); + TestV(Rectf(23, 12, 56, 88)); + + TestV(Magenta()); + + TestDef(Magenta(), Blue()); + TestDef(String("Hello"), String("Hi")); + TestDef(3.14, 2.78); + TestDef(123, 321); + + LOG("*************** OK"); +} diff --git a/autotest/Xmlize/Xmlize.upp b/autotest/Xmlize/Xmlize.upp new file mode 100644 index 000000000..126baaa46 --- /dev/null +++ b/autotest/Xmlize/Xmlize.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + Xmlize.cpp; + +mainconfig + "" = ""; + diff --git a/autotest/Xmlize/init b/autotest/Xmlize/init new file mode 100644 index 000000000..850ac5622 --- /dev/null +++ b/autotest/Xmlize/init @@ -0,0 +1,4 @@ +#ifndef _Xmlize_icpp_init_stub +#define _Xmlize_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/Zlib/Zlib.cpp b/autotest/Zlib/Zlib.cpp new file mode 100644 index 000000000..421104a47 --- /dev/null +++ b/autotest/Zlib/Zlib.cpp @@ -0,0 +1,41 @@ +#include + +using namespace Upp; + +String RandomString(int len) +{ + StringBuffer r; + for(int i = 0; i < len; i++) + if(Random(30) == 0) + r.Cat("\r\n"); + else + r.Cat(Random(64) + 32); + return r; +} + +void Check(const String& data) +{ + ASSERT(ZDecompress(ZCompress(data)) == data); + ASSERT(GZDecompress(GZCompress(data)) == data); + + String path = GetHomeDirFile("test.txt"); + SaveFile(path, data); + GZCompressFile(path); + GZDecompressFile(path + ".2", path + ".gz"); + + ASSERT(LoadFile(path + ".2") == data); +} + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_FILE|LOG_COUT); + + Check(String()); + for(int i = 1; i < 2000; i++) + Check(RandomString(i)); + Check(RandomString(20000)); + Check(RandomString(2000000)); + + + LOG("============= OK"); +} diff --git a/autotest/Zlib/Zlib.upp b/autotest/Zlib/Zlib.upp new file mode 100644 index 000000000..985102753 --- /dev/null +++ b/autotest/Zlib/Zlib.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + Zlib.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/Zlib/init b/autotest/Zlib/init new file mode 100644 index 000000000..a34d4c8a3 --- /dev/null +++ b/autotest/Zlib/init @@ -0,0 +1,4 @@ +#ifndef _Zlib_icpp_init_stub +#define _Zlib_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/abs/abs.cpp b/autotest/abs/abs.cpp new file mode 100644 index 000000000..f2fc0e1cf --- /dev/null +++ b/autotest/abs/abs.cpp @@ -0,0 +1,14 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + ASSERT(abs(-1) == 1); + ASSERT(abs((int16)-1) == 1); + ASSERT(abs((int64)-1) == 1); + ASSERT(abs((int8)-1) == 1); + ASSERT(abs((float)-1) == 1); + ASSERT(abs((double)-1) == 1); + LOG("OK"); +} diff --git a/autotest/abs/abs.upp b/autotest/abs/abs.upp new file mode 100644 index 000000000..a4842f882 --- /dev/null +++ b/autotest/abs/abs.upp @@ -0,0 +1,11 @@ +description "Resolving abs overloading (avoiding fabs)\377"; + +uses + Core; + +file + abs.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/abs/init b/autotest/abs/init new file mode 100644 index 000000000..53dc8f54d --- /dev/null +++ b/autotest/abs/init @@ -0,0 +1,4 @@ +#ifndef _abs_icpp_init_stub +#define _abs_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/decode/decode.cpp b/autotest/decode/decode.cpp new file mode 100644 index 000000000..5899febf9 --- /dev/null +++ b/autotest/decode/decode.cpp @@ -0,0 +1,43 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + ASSERT(decode(0, 1, "one", 2, "two", 3, "three", "unknown") == String("unknown")); + ASSERT(decode(1, 1, "one", 2, "two", 3, "three", "unknown") == String("one")); + ASSERT(decode(2, 1, "one", 2, "two", 3, "three", "unknown") == String("two")); + ASSERT(decode(3, 1, "one", 2, "two", 3, "three", "unknown") == String("three")); + ASSERT(decode(3, 1, "one", 2, "two", 3.0, "three", "unknown") == String("three")); + ASSERT(decode(4, 1, "one", 2, "two", 3, "three", "unknown") == String("unknown")); + + String s = "3"; + ASSERT(findarg(s, "0", "1", "2", "3") == 3); + + ASSERT(decode(s, "3", 3, -1) == 3); + ASSERT(decode(s, "4", 3, -1) == -1); + + ASSERT(min(1, 5) == 1); + ASSERT(min(5, 1) == 1); + + ASSERT(min(1, 5, 5) == 1); + ASSERT(min(5, 1, 5) == 1); + ASSERT(min(5, 5, 1) == 1); + + ASSERT(min(1, 5, 5, 5) == 1); + ASSERT(min(5, 1, 5, 5) == 1); + ASSERT(min(5, 5, 1, 5) == 1); + ASSERT(min(5, 5, 5, 1) == 1); + + ASSERT(max(1, 0) == 1); + ASSERT(max(0, 1) == 1); + + ASSERT(max(1, 0, 0) == 1); + ASSERT(max(0, 1, 0) == 1); + ASSERT(max(0, 0, 1) == 1); + + ASSERT(max(1, 0, 0, 0) == 1); + ASSERT(max(0, 1, 0, 0) == 1); + ASSERT(max(0, 0, 1, 0) == 1); + ASSERT(max(0, 0, 0, 1) == 1); +} diff --git a/autotest/decode/decode.upp b/autotest/decode/decode.upp new file mode 100644 index 000000000..07b2eb3c1 --- /dev/null +++ b/autotest/decode/decode.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + decode.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/decode/init b/autotest/decode/init new file mode 100644 index 000000000..69174f528 --- /dev/null +++ b/autotest/decode/init @@ -0,0 +1,4 @@ +#ifndef _decode_icpp_init_stub +#define _decode_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/error/error.cpp b/autotest/error/error.cpp deleted file mode 100644 index 50f90af0e..000000000 --- a/autotest/error/error.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include - -using namespace Upp; - -CONSOLE_APP_MAIN -{ - this is error; -} diff --git a/autotest/fail_assert/fail_assert.cpp b/autotest/fail_assert/fail_assert.cpp deleted file mode 100644 index 9d6e87103..000000000 --- a/autotest/fail_assert/fail_assert.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include - -using namespace Upp; - -CONSOLE_APP_MAIN -{ - ASSERT(0); -} diff --git a/autotest/fail_crash/fail_crash.cpp b/autotest/fail_crash/fail_crash.cpp deleted file mode 100644 index f168c918e..000000000 --- a/autotest/fail_crash/fail_crash.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include - -using namespace Upp; - -CONSOLE_APP_MAIN -{ - __BREAK__; -} diff --git a/autotest/ize/init b/autotest/ize/init new file mode 100644 index 000000000..5e1907cc5 --- /dev/null +++ b/autotest/ize/init @@ -0,0 +1,4 @@ +#ifndef _ize_icpp_init_stub +#define _ize_icpp_init_stub +#include "Core/init" +#endif diff --git a/autotest/ize/ize.cpp b/autotest/ize/ize.cpp new file mode 100644 index 000000000..d7d3f347a --- /dev/null +++ b/autotest/ize/ize.cpp @@ -0,0 +1,114 @@ +#include + +using namespace Upp; + +template +void Test(T& data) +{ + LOG("-----------------"); + T data2; + String bin = StoreAsString(data); + LoadFromString(data2, bin); + data2.Shrink(); + ASSERT(StoreAsJson(data) == StoreAsJson(data2)); + ASSERT(StoreAsString(data) == StoreAsString(data2)); + + String xml = StoreAsXML(data); + DUMP(xml); + LoadFromXML(data2, xml); + data2.Shrink(); + ASSERT(StoreAsJson(data) == StoreAsJson(data2)); + ASSERT(StoreAsString(data) == StoreAsString(data2)); + + String json = StoreAsJson(data); + DUMP(json); + data2.Clear(); + LoadFromJson(data2, json); + data2.Shrink(); + ASSERT(StoreAsXML(data) == StoreAsXML(data2)); + ASSERT(StoreAsString(data) == StoreAsString(data2)); +} + +template +void Test() +{ + T data; + + data.Add(typeid(T).name()); + data.Add("123"); + data.Add("433"); + + Test(data); +} + +template +void TestMap() +{ + T data; + + data.Add(1, typeid(T).name()); + data.Add(2, "123"); + data.Add(3, "433"); + + Test(data); +} + +template +void TestFixedMap() +{ + T data; + + data.Add(1, typeid(T).name()); + data.Add(2, "123"); + data.Add(3, "433"); + + data.Finish(); + + Test(data); +} + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_FILE|LOG_COUT); + + Test< Vector >(); + Test< WithDeepCopy< Vector > >(); + + Test< Array >(); + Test< WithDeepCopy< Array > >(); + + Test< Index >(); + Test< WithDeepCopy< Index > >(); + + Test< ArrayIndex >(); + Test< WithDeepCopy< ArrayIndex > >(); + + Test< InVector >(); + Test< WithDeepCopy > >(); + + Test< InArray >(); + Test< WithDeepCopy > >(); + + Test< SortedIndex >(); + Test< WithDeepCopy > >(); + + TestMap< VectorMap >(); + TestMap< WithDeepCopy< VectorMap > >(); + + TestMap< ArrayMap >(); + TestMap< WithDeepCopy< ArrayMap > >(); + + TestMap< SortedVectorMap >(); + TestMap< WithDeepCopy< SortedVectorMap > >(); + + TestMap< SortedArrayMap >(); + TestMap< WithDeepCopy< SortedArrayMap > >(); + + TestFixedMap< FixedVectorMap >(); + TestFixedMap< WithDeepCopy< FixedVectorMap > >(); + + TestFixedMap< FixedArrayMap >(); + TestFixedMap< WithDeepCopy< FixedArrayMap > >(); + + LOG("========= EVERYTHING OK =========="); +} diff --git a/autotest/ize/ize.upp b/autotest/ize/ize.upp new file mode 100644 index 000000000..8bfdb1141 --- /dev/null +++ b/autotest/ize/ize.upp @@ -0,0 +1,9 @@ +uses + Core; + +file + ize.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/autotest/leaks/init b/autotest/leaks/init deleted file mode 100644 index fa4277a07..000000000 --- a/autotest/leaks/init +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef _leaks_icpp_init_stub -#define _leaks_icpp_init_stub -#include "Core/init" -#endif diff --git a/autotest/leaks/leaks.cpp b/autotest/leaks/leaks.cpp deleted file mode 100644 index 836dd6695..000000000 --- a/autotest/leaks/leaks.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include - -using namespace Upp; - -CONSOLE_APP_MAIN -{ - new String[2000]; -} diff --git a/autotest/ok/ok.cpp b/autotest/ok/ok.cpp deleted file mode 100644 index 90dc5208a..000000000 --- a/autotest/ok/ok.cpp +++ /dev/null @@ -1,7 +0,0 @@ -#include - -using namespace Upp; - -CONSOLE_APP_MAIN -{ -} diff --git a/autotest/timeout/timeout.cpp b/autotest/timeout/timeout.cpp deleted file mode 100644 index df4102f78..000000000 --- a/autotest/timeout/timeout.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include - -using namespace Upp; - -CONSOLE_APP_MAIN -{ - for(;;) {} -}