22 #include <drizzled/table.h>
23 #include <drizzled/item/ident.h>
31 const uint32_t NO_CACHED_FIELD_INDEX= UINT32_MAX;
33 Item_ident::Item_ident(Name_resolution_context *context_arg,
34 const char *db_name_arg,
const char *table_name_arg,
35 const char *field_name_arg)
36 :orig_db_name(db_name_arg), orig_table_name(table_name_arg),
37 orig_field_name(field_name_arg), context(context_arg),
38 db_name(db_name_arg), table_name(table_name_arg),
39 field_name(field_name_arg),
40 alias_name_used(false), cached_field_index(NO_CACHED_FIELD_INDEX),
41 cached_table(0), depended_from(0)
43 name = field_name_arg;
52 orig_db_name(item->orig_db_name),
53 orig_table_name(item->orig_table_name),
54 orig_field_name(item->orig_field_name),
55 context(item->context),
56 db_name(item->db_name),
57 table_name(item->table_name),
58 field_name(item->field_name),
59 alias_name_used(item->alias_name_used),
60 cached_field_index(item->cached_field_index),
61 cached_table(item->cached_table),
62 depended_from(item->depended_from)
65 void Item_ident::cleanup()
68 db_name= orig_db_name;
69 table_name= orig_table_name;
70 field_name= orig_field_name;
74 bool Item_ident::remove_dependence_processor(
unsigned char * arg)
76 if (depended_from == (Select_Lex *) arg)
81 const char *Item_ident::full_name()
const
83 if (!table_name || !field_name)
84 return field_name ? field_name :
name ?
name :
"tmp_field";
85 if (db_name && db_name[0])
87 size_t tmp_len= strlen(db_name)+strlen(table_name)+strlen(field_name)+3;
88 char* tmp= (
char*) memory::sql_alloc(tmp_len);
89 snprintf(tmp, tmp_len,
"%s.%s.%s",db_name,table_name,field_name);
94 size_t tmp_len= strlen(table_name)+strlen(field_name)+2;
95 char* tmp= (
char*) memory::sql_alloc(tmp_len);
96 snprintf(tmp, tmp_len,
"%s.%s", table_name, field_name);
105 string d_name, t_name;
107 if (table_name && table_name[0])
110 boost::to_lower(t_name);
113 if (db_name && db_name[0])
116 boost::to_lower(d_name);
119 if (!table_name || !field_name || !field_name[0])
121 str->append_identifier(
str_ref((field_name && field_name[0]) ? field_name :
name ?
name :
"tmp_field"));
124 if (db_name && db_name[0] && !alias_name_used)
126 str->append_identifier(d_name);
128 str->append_identifier(t_name);
130 str->append_identifier(
str_ref(field_name));
136 str->append_identifier(t_name);
138 str->append_identifier(
str_ref(field_name));
141 str->append_identifier(
str_ref(field_name));
147 return field->val_real();
153 return field->val_int();
159 return field->val_str_internal(str);
165 return field->val_decimal(dec);
168 void Item_ident_for_show::make_field(
SendField *tmp_field)
170 tmp_field->table_name= tmp_field->org_table_name= table_name;
171 tmp_field->db_name= db_name;
172 tmp_field->col_name= tmp_field->org_col_name= field->
field_name;
173 tmp_field->charsetnr= field->charset()->number;
175 tmp_field->type=field->type();
176 tmp_field->flags= field->getTable()->maybe_null ? (field->flags & ~NOT_NULL_FLAG) : field->flags;
177 tmp_field->decimals= field->decimals();