summaryrefslogtreecommitdiff
path: root/storage/connect/jsonudf.cpp
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2017-02-10 17:01:45 +0100
committerSergei Golubchik <serg@mariadb.org>2017-02-10 17:01:45 +0100
commit2195bb4e416232ab807ff67eecf03b1223bf6bff (patch)
tree4555af02df68cb0f26d454b1cf65086b62542875 /storage/connect/jsonudf.cpp
parent3ae038b732ce503fb839e9095355e05f5c6866f9 (diff)
parentbc4686f0f4d17dc57dd727c9f5390caa3022bdca (diff)
downloadmariadb-git-2195bb4e416232ab807ff67eecf03b1223bf6bff.tar.gz
Merge branch '10.1' into 10.2
Diffstat (limited to 'storage/connect/jsonudf.cpp')
-rw-r--r--storage/connect/jsonudf.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/storage/connect/jsonudf.cpp b/storage/connect/jsonudf.cpp
index 88931ea6c13..bc7f231814d 100644
--- a/storage/connect/jsonudf.cpp
+++ b/storage/connect/jsonudf.cpp
@@ -5263,3 +5263,50 @@ char *envar(UDF_INIT *initid, UDF_ARGS *args, char *result,
return str;
} // end of envar
+/*********************************************************************************/
+/* Returns the distinct number of B occurences in A. */
+/*********************************************************************************/
+my_bool countin_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
+{
+ if (args->arg_count != 2) {
+ strcpy(message, "This function must have 2 arguments");
+ return true;
+ } else if (args->arg_type[0] != STRING_RESULT) {
+ strcpy(message, "First argument must be string");
+ return true;
+ } else if (args->arg_type[1] != STRING_RESULT) {
+ strcpy(message, "Second argument is not a string");
+ return true;
+ } // endif args
+
+ return false;
+} // end of countin_init
+
+long long countin(UDF_INIT *initid, UDF_ARGS *args, char *result,
+ unsigned long *res_length, char *is_null, char *)
+{
+ PSZ str1, str2;
+ char *s;
+ long long n = 0;
+ size_t lg;
+
+ lg = (size_t)args->lengths[0];
+ s = str1 = (PSZ)malloc(lg + 1);
+ memcpy(str1, args->args[0], lg);
+ str1[lg] = 0;
+
+ lg = (size_t)args->lengths[1];
+ str2 = (PSZ)malloc(lg + 1);
+ memcpy(str2, args->args[1], lg);
+ str2[lg] = 0;
+
+ while (s = strstr(s, str2)) {
+ n++;
+ s += lg;
+ } // endwhile
+
+ free(str1);
+ free(str2);
+ return n;
+} // end of countin
+