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); }