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,
1809
1821
if (!f_is_packed(pack_flag))
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,
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);
1831
1843
if (f_is_enum(pack_flag))
1833
return new Field_enum(ptr,field_length,null_pos,null_bit,
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);
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),
1854
1866
case DRIZZLE_TYPE_TINY:
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,
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,
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