~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/field.cc

  • Committer: Brian Aker
  • Date: 2009-02-26 20:41:50 UTC
  • mfrom: (899.1.1 drizzle)
  • Revision ID: brian@tangent.org-20090226204150-i22ztuqtyfefef2s
Merge of Mine, Jay's and Stewart's

Show diffs side-by-side

added added

removed removed

Lines of Context:
1606
1606
      /* Allow empty as default value. */
1607
1607
      String str,*res;
1608
1608
      res= fld_default_value->val_str(&str);
 
1609
      if (res->length())
 
1610
      {
 
1611
        my_error(ER_BLOB_CANT_HAVE_DEFAULT, MYF(0),
 
1612
                 fld_name);
 
1613
        return(true);
 
1614
      }
 
1615
 
1609
1616
    }
1610
1617
    flags|= BLOB_FLAG;
1611
1618
    break;
1776
1783
}
1777
1784
 
1778
1785
 
1779
 
Field *make_field(TABLE_SHARE *share, unsigned char *ptr, uint32_t field_length,
 
1786
Field *make_field(TABLE_SHARE *share, MEM_ROOT *root,
 
1787
                  unsigned char *ptr, uint32_t field_length,
1780
1788
                  unsigned char *null_pos, unsigned char null_bit,
1781
1789
                  uint32_t pack_flag,
1782
1790
                  enum_field_types field_type,
1785
1793
                  TYPELIB *interval,
1786
1794
                  const char *field_name)
1787
1795
{
 
1796
 
 
1797
  if(!root)
 
1798
    root= current_mem_root();
 
1799
 
1788
1800
  if (!f_maybe_null(pack_flag))
1789
1801
  {
1790
1802
    null_pos=0;
1809
1821
    if (!f_is_packed(pack_flag))
1810
1822
    {
1811
1823
      if (field_type == DRIZZLE_TYPE_VARCHAR)
1812
 
        return new Field_varstring(ptr,field_length,
 
1824
        return new (root) Field_varstring(ptr,field_length,
1813
1825
                                   HA_VARCHAR_PACKLENGTH(field_length),
1814
1826
                                   null_pos,null_bit,
1815
1827
                                   unireg_check, field_name,
1823
1835
                                      field_length);
1824
1836
 
1825
1837
    if (f_is_blob(pack_flag))
1826
 
      return new Field_blob(ptr,null_pos,null_bit,
 
1838
      return new (root) Field_blob(ptr,null_pos,null_bit,
1827
1839
                            unireg_check, field_name, share,
1828
1840
                            pack_length, field_charset);
1829
1841
    if (interval)
1830
1842
    {
1831
1843
      if (f_is_enum(pack_flag))
1832
 
{
1833
 
        return new Field_enum(ptr,field_length,null_pos,null_bit,
 
1844
      {
 
1845
        return new (root) Field_enum(ptr,field_length,null_pos,null_bit,
1834
1846
                                  unireg_check, field_name,
1835
1847
                                  get_enum_pack_length(interval->count),
1836
1848
                                  interval, field_charset);
1837
 
}
 
1849
      }
1838
1850
    }
1839
1851
  }
1840
1852
 
1841
1853
  switch (field_type) {
1842
1854
  case DRIZZLE_TYPE_NEWDECIMAL:
1843
 
    return new Field_new_decimal(ptr,field_length,null_pos,null_bit,
 
1855
    return new (root) Field_new_decimal(ptr,field_length,null_pos,null_bit,
1844
1856
                                 unireg_check, field_name,
1845
1857
                                 f_decimals(pack_flag),
1846
1858
                                 f_is_decimal_precision(pack_flag) != 0,
1847
1859
                                 f_is_dec(pack_flag) == 0);
1848
1860
  case DRIZZLE_TYPE_DOUBLE:
1849
 
    return new Field_double(ptr,field_length,null_pos,null_bit,
 
1861
    return new (root) Field_double(ptr,field_length,null_pos,null_bit,
1850
1862
                            unireg_check, field_name,
1851
1863
                            f_decimals(pack_flag),
1852
1864
                            false,
1854
1866
  case DRIZZLE_TYPE_TINY:
1855
1867
    assert(0);
1856
1868
  case DRIZZLE_TYPE_LONG:
1857
 
    return new Field_long(ptr,field_length,null_pos,null_bit,
 
1869
    return new (root) Field_long(ptr,field_length,null_pos,null_bit,
1858
1870
                           unireg_check, field_name,
1859
1871
                           false,
1860
1872
                           f_is_dec(pack_flag) == 0);
1861
1873
  case DRIZZLE_TYPE_LONGLONG:
1862
 
    return new Field_int64_t(ptr,field_length,null_pos,null_bit,
 
1874
    return new (root) Field_int64_t(ptr,field_length,null_pos,null_bit,
1863
1875
                              unireg_check, field_name,
1864
1876
                              false,
1865
1877
                              f_is_dec(pack_flag) == 0);
1866
1878
  case DRIZZLE_TYPE_TIMESTAMP:
1867
 
    return new Field_timestamp(ptr,field_length, null_pos, null_bit,
 
1879
    return new (root) Field_timestamp(ptr,field_length, null_pos, null_bit,
1868
1880
                               unireg_check, field_name, share,
1869
1881
                               field_charset);
1870
1882
  case DRIZZLE_TYPE_DATE:
1871
 
    return new Field_date(ptr,null_pos,null_bit,
 
1883
    return new (root) Field_date(ptr,null_pos,null_bit,
1872
1884
                             unireg_check, field_name, field_charset);
1873
1885
  case DRIZZLE_TYPE_TIME:
1874
 
    return new Field_time(ptr,null_pos,null_bit,
 
1886
    return new (root) Field_time(ptr,null_pos,null_bit,
1875
1887
                          unireg_check, field_name, field_charset);
1876
1888
  case DRIZZLE_TYPE_DATETIME:
1877
 
    return new Field_datetime(ptr,null_pos,null_bit,
 
1889
    return new (root) Field_datetime(ptr,null_pos,null_bit,
1878
1890
                              unireg_check, field_name, field_charset);
1879
1891
  case DRIZZLE_TYPE_NULL:
1880
 
    return new Field_null(ptr, field_length, unireg_check, field_name,
 
1892
    return new (root) Field_null(ptr, field_length, unireg_check, field_name,
1881
1893
                          field_charset);
1882
1894
  case DRIZZLE_TYPE_VIRTUAL:                    // Must not happen
1883
1895
    assert(0);
1934
1946
  def=0;
1935
1947
  char_length= length;
1936
1948
 
1937
 
  if (!(flags & (NO_DEFAULT_VALUE_FLAG | BLOB_FLAG)) &&
 
1949
  if (!(flags & (NO_DEFAULT_VALUE_FLAG )) &&
1938
1950
      old_field->ptr && orig_field &&
1939
1951
      (sql_type != DRIZZLE_TYPE_TIMESTAMP ||                /* set def only if */
1940
1952
       old_field->table->timestamp_field != old_field ||  /* timestamp field */