~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/table.cc

Changes for easier merging into lp:~mordred/drizzle/vcol

Show diffs side-by-side

added added

removed removed

Lines of Context:
1452
1452
 
1453
1453
  /* 
1454
1454
    Step 2: Setup thd for parsing.
 
1455
    1) make Item objects be created in the memory allocated for the Table
 
1456
       object (not TABLE_SHARE)
 
1457
    2) ensure that created Item's are not put on to thd->free_list 
 
1458
       (which is associated with the parsed statement and hence cleared after 
 
1459
       the parsing)
 
1460
    3) setup a flag in the LEX structure to allow "PARSE_VCOL_EXPR" 
 
1461
       to be parsed as a SQL command.
1455
1462
  */
1456
 
  Query_arena *backup_stmt_arena_ptr= thd->stmt_arena;
1457
 
  Query_arena backup_arena;
1458
 
  Query_arena vcol_arena(&table->mem_root, Query_arena::INITIALIZED);
1459
 
  thd->set_n_backup_active_arena(&vcol_arena, &backup_arena);
1460
 
  thd->stmt_arena= &vcol_arena;
1461
 
 
 
1463
  MEM_ROOT **root_ptr, *old_root;
 
1464
  Item *backup_free_list= thd->free_list;
 
1465
  root_ptr= (MEM_ROOT **)pthread_getspecific(THR_MALLOC);
 
1466
  old_root= *root_ptr;
 
1467
  *root_ptr= &table->mem_root;
 
1468
  thd->free_list= NULL;
1462
1469
  thd->lex->parse_vcol_expr= true;
1463
1470
 
1464
1471
  /* 
1489
1496
    field->vcol_info= NULL;
1490
1497
    goto parse_err;
1491
1498
  }
1492
 
  thd->stmt_arena= backup_stmt_arena_ptr;
1493
 
  thd->restore_active_arena(&vcol_arena, &backup_arena);
1494
 
  field->vcol_info->item_free_list= vcol_arena.free_list;
 
1499
  field->vcol_info->item_free_list= thd->free_list;
 
1500
  thd->free_list= backup_free_list;
 
1501
  *root_ptr= old_root;
1495
1502
 
1496
1503
  return(false);
1497
1504
 
1498
1505
parse_err:
1499
1506
  thd->lex->parse_vcol_expr= false;
1500
1507
  thd->free_items();
1501
 
  thd->stmt_arena= backup_stmt_arena_ptr;
1502
 
  thd->restore_active_arena(&vcol_arena, &backup_arena);
 
1508
  *root_ptr= old_root;
 
1509
  thd->free_list= backup_free_list;
1503
1510
  return(true);
1504
1511
}
1505
1512