30 #include "eval0eval.ic"
37 static ulint eval_rnd = 128367121;
42 static byte eval_dummy;
53 eval_node_alloc_val_buf(
68 data =
static_cast<unsigned char *
>(dfield_get_data(dfield));
70 if (data && data != &eval_dummy) {
77 data =
static_cast<unsigned char *
>(mem_alloc(size));
93 eval_node_free_val_buf(
105 data =
static_cast<unsigned char *
>(dfield_get_data(dfield));
131 arg1 = cmp_node->
args;
138 func = cmp_node->
func;
144 }
else if (func ==
'<') {
148 }
else if (func == PARS_LE_TOKEN) {
152 }
else if (func == PARS_NE_TOKEN) {
156 }
else if (func == PARS_GE_TOKEN) {
168 eval_node_set_ibool_val(cmp_node, val);
190 arg1 = logical_node->
args;
199 func = logical_node->
func;
201 if (func == PARS_AND_TOKEN) {
203 }
else if (func == PARS_OR_TOKEN) {
205 }
else if (func == PARS_NOT_TOKEN) {
211 eval_node_set_ibool_val(logical_node, val);
231 arg1 = arith_node->
args;
240 func = arith_node->
func;
244 }
else if ((func ==
'-') && arg2) {
246 }
else if (func ==
'-') {
248 }
else if (func ==
'*') {
277 if (func == PARS_COUNT_TOKEN) {
281 ut_ad(func == PARS_SUM_TOKEN);
303 que_node_t* arg2 = 0;
313 arg1 = func_node->
args;
319 func = func_node->
func;
321 if (func == PARS_PRINTF_TOKEN) {
333 }
else if (func == PARS_ASSERT_TOKEN) {
336 fputs(
"SQL assertion fails in a stored procedure!\n",
345 }
else if (func == PARS_RND_TOKEN) {
353 int_val = (lint) (len1
354 + (eval_rnd % (len2 - len1 + 1)));
356 int_val = (lint) len1;
363 }
else if (func == PARS_RND_STR_TOKEN) {
367 data = eval_node_ensure_val_buf(func_node, len1);
369 for (i = 0; i < len1; i++) {
370 data[i] = (byte)(97 + (eval_rnd % 3));
391 ut_ad(func_node->
func == PARS_NOTFOUND_TOKEN);
413 eval_node_set_ibool_val(func_node, ibool_val);
432 arg1 = func_node->
args;
435 ut_ad(func_node->
func == PARS_SUBSTR_TOKEN);
439 str1 =
static_cast<unsigned char *
>(dfield_get_data(
que_node_get_val(arg1)));
466 arg1 = func_node->
args;
474 str1 =
static_cast<unsigned char *
>(dfield_get_data(
que_node_get_val(arg1)));
475 str2 =
static_cast<unsigned char *
>(dfield_get_data(
que_node_get_val(arg2)));
510 arg1 = func_node->
args;
516 str1 =
static_cast<unsigned char *
>(dfield_get_data(dfield1));
517 str2 =
static_cast<unsigned char *
>(dfield_get_data(dfield2));
526 match_char = str2[0];
528 for (i = 0; i < len1; i++) {
531 if (str1[i] == match_char) {
533 if (i + len2 > len1) {
547 if (str1[i + j] != str2[j]) {
565 eval_binary_to_number(
576 arg1 = func_node->
args;
580 str1 =
static_cast<unsigned char *
>(dfield_get_data(dfield));
591 str2 = (byte*)&int_val;
593 ut_memcpy(str2 + (4 - len1), str1, len1);
613 arg = func_node->
args;
624 data = eval_node_ensure_val_buf(func_node, len);
626 arg = func_node->
args;
633 ut_memcpy(data + len, dfield_get_data(dfield), len1);
660 arg1 = func_node->
args;
662 str1 =
static_cast<unsigned char *
>(dfield_get_data(
que_node_get_val(arg1)));
702 func = func_node->
func;
704 arg1 = func_node->
args;
706 if (func == PARS_LENGTH_TOKEN) {
710 }
else if (func == PARS_TO_CHAR_TOKEN) {
727 uint_val = ((ulint) -int_val - 1) + 1;
730 uint_val = (ulint) int_val;
732 for (; uint_val > 0; int_len++) {
738 data = eval_node_ensure_val_buf(func_node, int_len + 1);
751 uint_val = ((ulint) -int_val - 1) + 1;
753 uint_val = (ulint) int_val;
755 for (tmp = int_len; uint_val > 0; uint_val /= 10) {
757 (
'0' + (byte)(uint_val % 10));
765 }
else if (func == PARS_TO_NUMBER_TOKEN) {
767 int_val = atoi((
char*)
770 }
else if (func == PARS_SYSDATE_TOKEN) {
773 eval_predefined_2(func_node);
796 func = func_node->
func;
798 arg = func_node->
args;
809 && (func != PARS_NOTFOUND_TOKEN)
810 && (func != PARS_PRINTF_TOKEN)) {
820 eval_arith(func_node);
822 eval_aggregate(func_node);
825 if (func == PARS_NOTFOUND_TOKEN) {
826 eval_notfound(func_node);
827 }
else if (func == PARS_SUBSTR_TOKEN) {
828 eval_substr(func_node);
829 }
else if (func == PARS_REPLSTR_TOKEN) {
830 eval_replstr(func_node);
831 }
else if (func == PARS_INSTR_TOKEN) {
832 eval_instr(func_node);
833 }
else if (func == PARS_BINARY_TO_NUMBER_TOKEN) {
834 eval_binary_to_number(func_node);
835 }
else if (func == PARS_CONCAT_TOKEN) {
836 eval_concat(func_node);
837 }
else if (func == PARS_TO_BINARY_TOKEN) {
838 eval_to_binary(func_node);
840 eval_predefined(func_node);
845 eval_logical(func_node);