40
#include "drizzled/error.h"
41
#include "drizzled/gettext.h"
42
#include "drizzled/sql_base.h"
43
#include "drizzled/pthread_globals.h"
44
#include "drizzled/internal/my_pthread.h"
46
#include "drizzled/table.h"
47
#include "drizzled/table/shell.h"
49
#include "drizzled/session.h"
51
#include "drizzled/charset.h"
52
#include "drizzled/internal/m_string.h"
53
#include "drizzled/internal/my_sys.h"
55
#include "drizzled/item/string.h"
56
#include "drizzled/item/int.h"
57
#include "drizzled/item/decimal.h"
58
#include "drizzled/item/float.h"
59
#include "drizzled/item/null.h"
60
#include "drizzled/temporal.h"
62
#include "drizzled/field.h"
63
#include "drizzled/field/str.h"
64
#include "drizzled/field/num.h"
65
#include "drizzled/field/blob.h"
66
#include "drizzled/field/boolean.h"
67
#include "drizzled/field/enum.h"
68
#include "drizzled/field/null.h"
69
#include "drizzled/field/date.h"
70
#include "drizzled/field/decimal.h"
71
#include "drizzled/field/real.h"
72
#include "drizzled/field/double.h"
73
#include "drizzled/field/int32.h"
74
#include "drizzled/field/int64.h"
75
#include "drizzled/field/size.h"
76
#include "drizzled/field/num.h"
77
#include "drizzled/field/time.h"
78
#include "drizzled/field/epoch.h"
79
#include "drizzled/field/datetime.h"
80
#include "drizzled/field/microtime.h"
81
#include "drizzled/field/varstring.h"
82
#include "drizzled/field/uuid.h"
84
#include "drizzled/plugin/storage_engine.h"
86
#include "drizzled/definition/cache.h"
88
#include <drizzled/refresh_version.h>
40
#include <drizzled/error.h>
41
#include <drizzled/gettext.h>
42
#include <drizzled/sql_base.h>
43
#include <drizzled/pthread_globals.h>
44
#include <drizzled/internal/my_pthread.h>
46
#include <drizzled/table.h>
47
#include <drizzled/table/shell.h>
49
#include <drizzled/session.h>
51
#include <drizzled/charset.h>
52
#include <drizzled/internal/m_string.h>
53
#include <drizzled/internal/my_sys.h>
55
#include <drizzled/item/string.h>
56
#include <drizzled/item/int.h>
57
#include <drizzled/item/decimal.h>
58
#include <drizzled/item/float.h>
59
#include <drizzled/item/null.h>
60
#include <drizzled/temporal.h>
62
#include <drizzled/field.h>
63
#include <drizzled/field/str.h>
64
#include <drizzled/field/num.h>
65
#include <drizzled/field/blob.h>
66
#include <drizzled/field/boolean.h>
67
#include <drizzled/field/enum.h>
68
#include <drizzled/field/null.h>
69
#include <drizzled/field/date.h>
70
#include <drizzled/field/decimal.h>
71
#include <drizzled/field/real.h>
72
#include <drizzled/field/double.h>
73
#include <drizzled/field/int32.h>
74
#include <drizzled/field/int64.h>
75
#include <drizzled/field/size.h>
76
#include <drizzled/field/num.h>
77
#include <drizzled/field/time.h>
78
#include <drizzled/field/epoch.h>
79
#include <drizzled/field/datetime.h>
80
#include <drizzled/field/microtime.h>
81
#include <drizzled/field/varstring.h>
82
#include <drizzled/field/uuid.h>
83
#include <drizzled/plugin/storage_engine.h>
84
#include <drizzled/definition/cache.h>
85
#include <drizzled/typelib.h>
86
#include <drizzled/key.h>
87
#include <drizzled/open_tables_state.h>
90
89
using namespace std;
95
93
extern size_t table_def_size;
98
95
static enum_field_types proto_field_type_to_drizzle_type(const message::Table::Field &field)
100
97
switch(field.type())
505
509
keys_for_keyread(0)
512
private_key_for_cache= identifier.getKey();
514
Let us use the fact that the key is "db/0/table_name/0" + optional
515
part for temporary tables.
517
db.str= const_cast<char *>(private_key_for_cache.vector());
518
db.length= strlen(db.str);
519
table_name.str= db.str + db.length + 1;
520
table_name.length= strlen(table_name.str);
508
522
std::string _path;
510
private_key_for_cache= identifier.getKey();
512
Let us use the fact that the key is "db/0/table_name/0" + optional
513
part for temporary tables.
515
db.str= const_cast<char *>(private_key_for_cache.vector());
516
db.length= strlen(db.str);
517
table_name.str= db.str + db.length + 1;
518
table_name.length= strlen(table_name.str);
522
_path.append(path_arg, path_length_arg);
526
identifier::Table::build_table_filename(_path, db.str, table_name.str, false);
529
if ((path_buff= (char *)mem_root.alloc_root(_path.length() + 1)))
531
setPath(path_buff, _path.length());
532
strcpy(path_buff, _path.c_str());
533
setNormalizedPath(path_buff, _path.length());
535
version= refresh_version;
539
assert(0); // We should throw here.
525
_path.assign(path_arg, path_length_arg);
529
_path= identifier::Table::build_table_filename(db.str, table_name.str, false);
532
char* path_buff= mem_root.strdup(_path);
533
setPath(path_buff, _path.length());
534
setNormalizedPath(path_buff, _path.length());
536
version= g_refresh_version;
544
539
void TableShare::init(const char *new_table_name,
1670
1668
memcpy(outparam.getUpdateRecord(), getDefaultValues(), null_bytes);
1673
if (!(field_ptr = (Field **) outparam.alloc_root( (uint32_t) ((_field_size+1)* sizeof(Field*)))))
1671
field_ptr = new (outparam.mem()) Field*[_field_size + 1];
1678
1673
outparam.setFields(field_ptr);
1680
record= (unsigned char*) outparam.getInsertRecord()-1; /* Fieldstart = 1 */
1675
record= outparam.getInsertRecord()-1; /* Fieldstart = 1 */
1682
1677
outparam.null_flags= (unsigned char*) record+1;
1684
1679
/* Setup copy of fields from share, but use the right alias and record */
1685
1680
for (uint32_t i= 0 ; i < _field_size; i++, field_ptr++)
1687
if (!((*field_ptr)= _fields[i]->clone(outparam.getMemRoot(), &outparam)))
1682
if (!((*field_ptr)= _fields[i]->clone(&outparam.mem(), &outparam)))
1688
1683
return local_error;
1690
(*field_ptr)= 0; // End marker
1685
*field_ptr= 0; // End marker
1692
1687
if (found_next_number_field)
1693
1688
outparam.found_next_number_field=