Explorar el Código

HPCC-15390 Fix const parameters on sets and LCR datasets

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>
Gavin Halliday hace 9 años
padre
commit
7e062b9b3d

+ 7 - 2
ecl/hqlcpp/hqlwcpp.cpp

@@ -892,14 +892,19 @@ void HqlCppWriter::generateParamCpp(IHqlExpression * param, IHqlExpression * att
     case type_dictionary:
     case type_table:
     case type_groupedtable:
-        if (isConst)
-            out.append("const ");
         if (hasStreamedModifier(paramType))
             out.append("IRowStream *");
         else if (hasOutOfLineModifier(paramType) || hasLinkCountedModifier(paramType))
+        {
+            //At some point in the future this should change to "const byte * const *"
             out.append("byte * *");
+        }
         else
+        {
+            if (isConst)
+                out.append("const ");
             out.append("void *");
+        }
         if (isOut)
             out.append(" &");
         break;

+ 1 - 1
plugins/Rembed/Rembed.cpp

@@ -905,7 +905,7 @@ public:
         rtlFail(0, "Rembed: Unsupported parameter type UNICODE");
     }
 
-    virtual void bindSetParam(const char *name, int _elemType, size32_t elemSize, bool isAll, size32_t totalBytes, void *setData)
+    virtual void bindSetParam(const char *name, int _elemType, size32_t elemSize, bool isAll, size32_t totalBytes, const void *setData)
     {
         if (isAll)
             rtlFail(0, "Rembed: Unsupported parameter type ALL");

+ 1 - 1
plugins/cassandra/cassandraembed.cpp

@@ -1599,7 +1599,7 @@ public:
                                                  utfText.getstr(), rtlUtf8Size(utf8chars, utfText.getstr())),
                   name);
     }
-    virtual void bindSetParam(const char *name, int elemType, size32_t elemSize, bool isAll, size32_t totalBytes, void *setData)
+    virtual void bindSetParam(const char *name, int elemType, size32_t elemSize, bool isAll, size32_t totalBytes, const void *setData)
     {
         if (isAll)
             UNSUPPORTED("SET(ALL)");

+ 1 - 1
plugins/javaembed/javaembed.cpp

@@ -2720,7 +2720,7 @@ public:
         }
         addArg(v);
     }
-    virtual void bindSetParam(const char *name, int _elemType, size32_t elemSize, bool isAll, size32_t totalBytes, void *setData)
+    virtual void bindSetParam(const char *name, int _elemType, size32_t elemSize, bool isAll, size32_t totalBytes, const void *setData)
     {
         jvalue v;
         if (*argsig != '[')

+ 1 - 1
plugins/mysql/mysqlembed.cpp

@@ -1271,7 +1271,7 @@ public:
         bindInfo.buffer_length = rtlUtf8Size(utf8chars, utf8);
         bindInfo.length = &bindInfo.buffer_length;
     }
-    virtual void bindSetParam(const char *name, int elemType, size32_t elemSize, bool isAll, size32_t totalBytes, void *setData)
+    virtual void bindSetParam(const char *name, int elemType, size32_t elemSize, bool isAll, size32_t totalBytes, const void *setData)
     {
         UNSUPPORTED("SET parameters");  // MySQL does support sets, so MIGHT be possible...
     }

+ 1 - 1
plugins/pyembed/pyembed.cpp

@@ -1378,7 +1378,7 @@ public:
         addArg(name, vval);
         rtlFree(unicode);
     }
-    virtual void bindSetParam(const char *name, int elemType, size32_t elemSize, bool isAll, size32_t totalBytes, void *setData)
+    virtual void bindSetParam(const char *name, int elemType, size32_t elemSize, bool isAll, size32_t totalBytes, const void *setData)
     {
         if (isAll)
             rtlFail(0, "pyembed: Cannot pass ALL");

+ 1 - 1
plugins/sqlite3/sqlite3.cpp

@@ -526,7 +526,7 @@ public:
         size32_t sizeBytes = chars * sizeof(UChar);
         checkSqliteError(sqlite3_bind_text16(stmt, findParameter(name), val, sizeBytes, SQLITE_TRANSIENT)); // NOTE - requires size in bytes not chars
     }
-    virtual void bindSetParam(const char *name, int elemType, size32_t elemSize, bool isAll, size32_t totalBytes, void *setData)
+    virtual void bindSetParam(const char *name, int elemType, size32_t elemSize, bool isAll, size32_t totalBytes, const void *setData)
     {
         UNSUPPORTED("SET parameters");
     }

+ 1 - 1
plugins/v8embed/v8embed.cpp

@@ -539,7 +539,7 @@ public:
         v8::HandleScope handle_scope;
         context->Global()->Set(v8::String::New(name), v8::String::New(val, chars));
     }
-    virtual void bindSetParam(const char *name, int elemType, size32_t elemSize, bool isAll, size32_t totalBytes, void *setData)
+    virtual void bindSetParam(const char *name, int elemType, size32_t elemSize, bool isAll, size32_t totalBytes, const void *setData)
     {
         if (isAll)
             rtlFail(0, "v8embed: Cannot pass ALL");

+ 3 - 3
rtl/eclrtl/eclrtl.hpp

@@ -696,8 +696,8 @@ ECLRTL_API void rtlCreateUnicodeRangeHigh(size32_t & outlen, UChar * & out, unsi
 
 ECLRTL_API unsigned rtlCountRows(size32_t len, const void * data, IRecordSize * rs);
 ECLRTL_API unsigned rtlCountToSize(unsigned count, const void * data, IRecordSize * rs);
-ECLRTL_API void rtlSetToSetX(bool & outIsAll, size32_t & outLen, void * & outData, bool inIsAll, size32_t inLen, void * inData);
-ECLRTL_API void rtlAppendSetX(bool & outIsAll, size32_t & outLen, void * & outData, bool leftIsAll, size32_t leftLen, void * leftData, bool rightIsAll, size32_t rightLen, void * rightData);
+ECLRTL_API void rtlSetToSetX(bool & outIsAll, size32_t & outLen, void * & outData, bool inIsAll, size32_t inLen, const void * inData);
+ECLRTL_API void rtlAppendSetX(bool & outIsAll, size32_t & outLen, void * & outData, bool leftIsAll, size32_t leftLen, const void * leftData, bool rightIsAll, size32_t rightLen, const void * rightData);
 
 // rtlCodepageConvert uses a target buffer provided by the user (and returns the length actually used)
 // rtlCodepageConvertX allocates the target buffer itself (user must free)
@@ -790,7 +790,7 @@ interface IEmbedFunctionContext : extends IInterface
     virtual void bindUTF8Param(const char *name, size32_t chars, const char *val) = 0;
     virtual void bindUnicodeParam(const char *name, size32_t chars, const UChar *val) = 0;
 
-    virtual void bindSetParam(const char *name, int elemType, size32_t elemSize, bool isAll, size32_t totalBytes, void *setData) = 0;
+    virtual void bindSetParam(const char *name, int elemType, size32_t elemSize, bool isAll, size32_t totalBytes, const void *setData) = 0;
 
     virtual bool getBooleanResult() = 0;
     virtual void getDataResult(size32_t &len, void * &result) = 0;

+ 2 - 2
rtl/eclrtl/rtlds.cpp

@@ -1700,7 +1700,7 @@ bool rtlCheckInList(const void * lhs, IRtlDatasetCursor * cursor, ICompare * com
 }
 
 
-void rtlSetToSetX(bool & outIsAll, size32_t & outLen, void * & outData, bool inIsAll, size32_t inLen, void * inData)
+void rtlSetToSetX(bool & outIsAll, size32_t & outLen, void * & outData, bool inIsAll, size32_t inLen, const void * inData)
 {
     outIsAll = inIsAll;
     outLen = inLen;
@@ -1709,7 +1709,7 @@ void rtlSetToSetX(bool & outIsAll, size32_t & outLen, void * & outData, bool inI
 }
 
 
-void rtlAppendSetX(bool & outIsAll, size32_t & outLen, void * & outData, bool leftIsAll, size32_t leftLen, void * leftData, bool rightIsAll, size32_t rightLen, void * rightData)
+void rtlAppendSetX(bool & outIsAll, size32_t & outLen, void * & outData, bool leftIsAll, size32_t leftLen, const void * leftData, bool rightIsAll, size32_t rightLen, const void * rightData)
 {
     outIsAll = leftIsAll | rightIsAll;
     if (outIsAll)