00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <config.h>
00021
00022 #include <drizzled/field/varstring.h>
00023 #include <drizzled/session.h>
00024 #include <drizzled/stored_key.h>
00025
00026 namespace drizzled
00027 {
00028
00029 StoredKey::StoredKey(Session *session,
00030 Field *field_arg,
00031 unsigned char *ptr,
00032 unsigned char *null,
00033 uint32_t length) :
00034 null_key(0),
00035 null_ptr(null),
00036 err(0)
00037 {
00038 if (field_arg->type() == DRIZZLE_TYPE_BLOB)
00039 {
00040
00041
00042
00043
00044 to_field= new Field_varstring(ptr,
00045 length,
00046 2,
00047 null,
00048 1,
00049 field_arg->field_name,
00050 field_arg->charset());
00051 to_field->init(field_arg->getTable());
00052 }
00053 else
00054 {
00055 to_field= field_arg->new_key_field(session->mem_root, field_arg->getTable(),
00056 ptr, null, 1);
00057 }
00058
00059 to_field->setWriteSet();
00060 }
00061
00062 StoredKey::store_key_result StoredKey::copy()
00063 {
00064 store_key_result result;
00065 Session *session= to_field->getTable()->in_use;
00066 enum_check_fields saved_count_cuted_fields= session->count_cuted_fields;
00067 session->count_cuted_fields= CHECK_FIELD_IGNORE;
00068 result= copy_inner();
00069 session->count_cuted_fields= saved_count_cuted_fields;
00070
00071 return result;
00072 }
00073
00074 }