~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/sql_table.cc

  • Committer: Mark Atwood
  • Date: 2011-08-21 06:56:57 UTC
  • mfrom: (2385.3.34 rf)
  • Revision ID: me@mark.atwood.name-20110821065657-vk2at03z9u17mf1d
mergeĀ lp:~olafvdspek/drizzle/refactor7

Show diffs side-by-side

added added

removed removed

Lines of Context:
56
56
 
57
57
namespace drizzled {
58
58
 
59
 
bool is_primary_key(KeyInfo *key_info)
60
 
{
61
 
  static const char * primary_key_name="PRIMARY";
62
 
  return (strcmp(key_info->name, primary_key_name)==0);
63
 
}
64
 
 
65
 
const char* is_primary_key_name(const char* key_name)
66
 
{
67
 
  static const char * primary_key_name="PRIMARY";
68
 
  if (strcmp(key_name, primary_key_name)==0)
69
 
    return key_name;
70
 
  else
71
 
    return NULL;
 
59
bool is_primary_key(const char* name)
 
60
{
 
61
  return strcmp(name, "PRIMARY") == 0;
72
62
}
73
63
 
74
64
static bool check_if_keyname_exists(const char *name,KeyInfo *start, KeyInfo *end);
75
 
static char *make_unique_key_name(const char *field_name,KeyInfo *start,KeyInfo *end);
76
 
 
 
65
static const char *make_unique_key_name(const char *field_name,KeyInfo *start,KeyInfo *end);
77
66
static bool prepare_blob_field(Session *session, CreateField *sql_field);
78
67
 
79
68
void set_table_default_charset(HA_CREATE_INFO *create_info, const char *db)
83
72
    let's fetch the database default character set and
84
73
    apply it to the table.
85
74
  */
86
 
  identifier::Schema identifier(db);
87
 
  if (create_info->default_table_charset == NULL)
88
 
    create_info->default_table_charset= plugin::StorageEngine::getSchemaCollation(identifier);
 
75
  if (not create_info->default_table_charset)
 
76
    create_info->default_table_charset= plugin::StorageEngine::getSchemaCollation(identifier::Schema(db));
89
77
}
90
78
 
91
79
/*
282
270
      /* Sort NOT NULL keys before other keys */
283
271
      return (a_flags & (HA_NULL_PART_KEY)) ? 1 : -1;
284
272
    }
285
 
    if (is_primary_key(a))
 
273
    if (is_primary_key(a->name))
286
274
      return -1;
287
 
    if (is_primary_key(b))
 
275
    if (is_primary_key(b->name))
288
276
      return 1;
289
277
    /* Sort keys don't containing partial segments before others */
290
278
    if ((a_flags ^ b_flags) & HA_KEY_HAS_PART_KEY_SEG)
880
868
      key_parts+=key->columns.size();
881
869
    else
882
870
      (*key_count)--;
883
 
    if (key->name.str && !tmp_table && (key->type != Key::PRIMARY) &&
884
 
        is_primary_key_name(key->name.str))
 
871
    if (key->name.str && !tmp_table && (key->type != Key::PRIMARY) && is_primary_key(key->name.str))
885
872
    {
886
873
      my_error(ER_WRONG_NAME_FOR_INDEX, MYF(0), key->name.str);
887
874
      return true;
1555
1542
}
1556
1543
 
1557
1544
 
1558
 
static char *
 
1545
static const char*
1559
1546
make_unique_key_name(const char *field_name,KeyInfo *start,KeyInfo *end)
1560
1547
{
1561
1548
  char buff[MAX_FIELD_NAME],*buff_end;
1562
1549
 
1563
 
  if (!check_if_keyname_exists(field_name,start,end) &&
1564
 
      !is_primary_key_name(field_name))
1565
 
    return (char*) field_name;                  // Use fieldname
 
1550
  if (not check_if_keyname_exists(field_name,start,end) && not is_primary_key(field_name))
 
1551
    return field_name;                  // Use fieldname
1566
1552
 
1567
1553
  buff_end= strncpy(buff, field_name, sizeof(buff)-4);
1568
1554
  buff_end+= strlen(buff);
1963
1949
  }
1964
1950
 
1965
1951
  new_table_message.CopyFrom(*source_table_message);
1966
 
 
1967
 
  if (destination_identifier.isTmp())
1968
 
  {
1969
 
    new_table_message.set_type(message::Table::TEMPORARY);
1970
 
  }
1971
 
  else
1972
 
  {
1973
 
    new_table_message.set_type(message::Table::STANDARD);
1974
 
  }
 
1952
  new_table_message.set_type(destination_identifier.isTmp() ? message::Table::TEMPORARY : message::Table::STANDARD);
1975
1953
 
1976
1954
  if (is_engine_set)
1977
1955
  {
2005
1983
    As mysql_truncate don't work on a new table at this stage of
2006
1984
    creation, instead create the table directly (for both normal and temporary tables).
2007
1985
  */
2008
 
  bool success= plugin::StorageEngine::createTable(session,
2009
 
                                                   destination_identifier,
2010
 
                                                   new_table_message);
 
1986
  bool success= plugin::StorageEngine::createTable(session, destination_identifier, new_table_message);
2011
1987
 
2012
1988
  if (success && not destination_identifier.isTmp())
2013
1989
  {