summaryrefslogtreecommitdiffstats
path: root/storage/connect/noconst.c
diff options
context:
space:
mode:
Diffstat (limited to 'storage/connect/noconst.c')
-rw-r--r--storage/connect/noconst.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/storage/connect/noconst.c b/storage/connect/noconst.c
new file mode 100644
index 00000000..830a8494
--- /dev/null
+++ b/storage/connect/noconst.c
@@ -0,0 +1,38 @@
+/***********************************************************************/
+/* (C) Copyright to the author Olivier BERTRAND 2015 */
+/***********************************************************************/
+#include <my_global.h>
+#include <mysqld.h>
+#include <string.h>
+
+#if defined(_WIN32)
+#define DllExport __declspec( dllexport )
+#else // !_WIN32
+#define DllExport
+#endif // !_WIN32
+
+extern "C" {
+ DllExport my_bool noconst_init(UDF_INIT*, UDF_ARGS*, char*);
+ DllExport char *noconst(UDF_INIT*, UDF_ARGS*, char*, unsigned long*, char*, char*);
+} // extern "C"
+
+/***********************************************************************/
+/* Returns its argument saying it is not a constant. */
+/***********************************************************************/
+my_bool noconst_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
+{
+ if (args->arg_count != 1 || args->arg_type[0] != STRING_RESULT) {
+ strcpy(message, "noconst unique argument must be a string");
+ return true;
+ } // endif arg
+
+ initid->const_item = false; // The trick!
+ return false;
+} // end of noconst_init
+
+char *noconst(UDF_INIT *initid, UDF_ARGS *args, char *result,
+ unsigned long *res_length, char *, char *)
+{
+ return args->args[0];
+} // end of noconst
+