From 12853cdcef8d1150bbbeb81cadebea3e245ad937 Mon Sep 17 00:00:00 2001 From: cxl Date: Sun, 9 Nov 2014 17:32:52 +0000 Subject: [PATCH] SqlExp: Decode nonOracle variants improved git-svn-id: svn://ultimatepp.org/upp/trunk@7878 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/Sql/SqlVal.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/uppsrc/Sql/SqlVal.cpp b/uppsrc/Sql/SqlVal.cpp index 433625bc1..98a2e6ea0 100644 --- a/uppsrc/Sql/SqlVal.cpp +++ b/uppsrc/Sql/SqlVal.cpp @@ -248,11 +248,15 @@ SqlBool SqlBoolFunc(const char *n, const SqlBool& a, const SqlBool& b, const Sql SqlVal Decode(const SqlVal& exp, const SqlSet& variants) { ASSERT(!variants.IsEmpty()); Vector v = variants.Split(); - ASSERT(v.GetCount() > 2); + ASSERT(v.GetCount() > 1); Case cs(exp == v[0], v[1]); - for(int i = 2; i + 1 < v.GetCount(); i += 2) + int i; + for(i = 2; i + 1 < v.GetCount(); i += 2) cs(exp == v[i], v[i + 1]); - cs(v.Top()); + if(i < v.GetCount()) + cs(v[i]); + else + cs(Null); return SqlVal(SqlCase(ORACLE, "decode(" + ~exp + ", " + ~variants + ')')('(' + ~cs + ')'), SqlS::FN); }