summaryrefslogtreecommitdiff
path: root/sql/item_strfunc.h
diff options
context:
space:
mode:
Diffstat (limited to 'sql/item_strfunc.h')
-rw-r--r--sql/item_strfunc.h64
1 files changed, 33 insertions, 31 deletions
diff --git a/sql/item_strfunc.h b/sql/item_strfunc.h
index 72cdf06adde..3675707db41 100644
--- a/sql/item_strfunc.h
+++ b/sql/item_strfunc.h
@@ -517,9 +517,9 @@ public:
String *val_str(String *);
void fix_length_and_dec() { maybe_null=1; max_length = 13; }
const char *func_name() const { return "encrypt"; }
- bool check_vcol_func_processor(uchar *int_arg)
+ bool check_vcol_func_processor(uchar *arg)
{
- return trace_unsupported_by_check_vcol_func_processor(func_name());
+ return FALSE;
}
};
@@ -572,10 +572,10 @@ public:
call
*/
virtual const char *fully_qualified_func_name() const = 0;
- bool check_vcol_func_processor(uchar *int_arg)
+ bool check_vcol_func_processor(uchar *arg)
{
- return trace_unsupported_by_check_vcol_func_processor(
- fully_qualified_func_name());
+ return mark_unsupported_function(fully_qualified_func_name(), arg,
+ VCOL_NON_DETERMINISTIC);
}
};
@@ -598,19 +598,14 @@ public:
class Item_func_user :public Item_func_sysconst
{
protected:
- bool init (const char *user, const char *host);
+ query_id_t last_query_id;
+ bool init(THD *thd, const char *user, const char *host);
public:
- Item_func_user(THD *thd): Item_func_sysconst(thd)
- {
- str_value.set("", 0, system_charset_info);
- }
- String *val_str(String *)
- {
- DBUG_ASSERT(fixed == 1);
- return (null_value ? 0 : &str_value);
- }
- bool fix_fields(THD *thd, Item **ref);
+ Item_func_user(THD *thd): Item_func_sysconst(thd), last_query_id(0)
+ {}
+
+ String *val_str(String *);
void fix_length_and_dec()
{
max_length= (username_char_length +
@@ -618,10 +613,6 @@ public:
}
const char *func_name() const { return "user"; }
const char *fully_qualified_func_name() const { return "user()"; }
- int save_in_field(Field *field, bool no_conversions)
- {
- return save_str_value_in_field(field, &str_value);
- }
};
@@ -632,9 +623,15 @@ class Item_func_current_user :public Item_func_user
public:
Item_func_current_user(THD *thd, Name_resolution_context *context_arg):
Item_func_user(thd), context(context_arg) {}
- bool fix_fields(THD *thd, Item **ref);
+ String *val_str(String *);
const char *func_name() const { return "current_user"; }
const char *fully_qualified_func_name() const { return "current_user()"; }
+ /* This is because of the stored Name_resolution_context */
+ bool check_vcol_func_processor(uchar *arg)
+ {
+ return mark_unsupported_function(fully_qualified_func_name(), arg,
+ VCOL_IMPOSSIBLE);
+ }
};
@@ -647,15 +644,20 @@ public:
Item_func_sysconst(thd), context(context_arg) {}
bool fix_fields(THD *thd, Item **ref);
void fix_length_and_dec()
- { max_length= username_char_length * SYSTEM_CHARSET_MBMAXLEN; }
- int save_in_field(Field *field, bool no_conversions)
- { return save_str_value_in_field(field, &str_value); }
+ {
+ max_length= username_char_length * SYSTEM_CHARSET_MBMAXLEN;
+ maybe_null=1;
+ }
+ bool init(THD *thd);
+ int save_in_field(Field *field, bool no_conversions);
const char *func_name() const { return "current_role"; }
const char *fully_qualified_func_name() const { return "current_role()"; }
- String *val_str(String *)
+ String *val_str(String *);
+ /* This is because of the stored Name_resolution_context */
+ bool check_vcol_func_processor(uchar *arg)
{
- DBUG_ASSERT(fixed == 1);
- return (null_value ? 0 : &str_value);
+ return mark_unsupported_function(fully_qualified_func_name(), arg,
+ VCOL_IMPOSSIBLE);
}
};
@@ -916,9 +918,9 @@ public:
maybe_null=1;
max_length=MAX_BLOB_WIDTH;
}
- bool check_vcol_func_processor(uchar *int_arg)
+ bool check_vcol_func_processor(uchar *arg)
{
- return trace_unsupported_by_check_vcol_func_processor(func_name());
+ return mark_unsupported_function(func_name(), arg, VCOL_IMPOSSIBLE);
}
};
@@ -1183,9 +1185,9 @@ public:
}
const char *func_name() const{ return "uuid"; }
String *val_str(String *);
- bool check_vcol_func_processor(uchar *int_arg)
+ bool check_vcol_func_processor(uchar *arg)
{
- return trace_unsupported_by_check_vcol_func_processor(func_name());
+ return mark_unsupported_function(func_name(), arg, VCOL_NON_DETERMINISTIC);
}
};