item_create.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:13k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000-2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. /* Functions to create an item. Used by lex.h */
  14. #include "mysql_priv.h"
  15. #ifndef M_PI
  16. #define M_PI 3.14159265358979323846
  17. #endif
  18. Item *create_func_abs(Item* a)
  19. {
  20.   return new Item_func_abs(a);
  21. }
  22. Item *create_func_acos(Item* a)
  23. {
  24.   return new Item_func_acos(a);
  25. }
  26. Item *create_func_aes_encrypt(Item* a, Item* b)
  27. {
  28.   return new Item_func_aes_encrypt(a, b);
  29. }
  30. Item *create_func_aes_decrypt(Item* a, Item* b)
  31. {
  32.   return new Item_func_aes_decrypt(a, b);
  33. }
  34. Item *create_func_ascii(Item* a)
  35. {
  36.   return new Item_func_ascii(a);
  37. }
  38. Item *create_func_ord(Item* a)
  39. {
  40.   return new Item_func_ord(a);
  41. }
  42. Item *create_func_asin(Item* a)
  43. {
  44.   return new Item_func_asin(a);
  45. }
  46. Item *create_func_bin(Item* a)
  47. {
  48.   return new Item_func_conv(a,new Item_int((int32) 10,2),
  49.     new Item_int((int32) 2,1));
  50. }
  51. Item *create_func_bit_count(Item* a)
  52. {
  53.   return new Item_func_bit_count(a);
  54. }
  55. Item *create_func_ceiling(Item* a)
  56. {
  57.   return new Item_func_ceiling(a);
  58. }
  59. Item *create_func_connection_id(void)
  60. {
  61.   THD *thd=current_thd;
  62.   thd->lex->safe_to_cache_query= 0;
  63.   return new Item_int(NullS,(longlong)
  64.                       ((thd->slave_thread) ?
  65.                        thd->variables.pseudo_thread_id :
  66.                        thd->thread_id),
  67.                       10);
  68. Item *create_func_conv(Item* a, Item *b, Item *c)
  69. {
  70.   return new Item_func_conv(a,b,c);
  71. }
  72. Item *create_func_cos(Item* a)
  73. {
  74.   return new Item_func_cos(a);
  75. }
  76. Item *create_func_cot(Item* a)
  77. {
  78.   return new Item_func_div(new Item_int((char*) "1",1,1),
  79.    new Item_func_tan(a));
  80. }
  81. Item *create_func_date_format(Item* a,Item *b)
  82. {
  83.   return new Item_func_date_format(a,b,0);
  84. }
  85. Item *create_func_dayofmonth(Item* a)
  86. {
  87.   return new Item_func_dayofmonth(a);
  88. }
  89. Item *create_func_dayofweek(Item* a)
  90. {
  91.   return new Item_func_weekday(new Item_func_to_days(a),1);
  92. }
  93. Item *create_func_dayofyear(Item* a)
  94. {
  95.   return new Item_func_dayofyear(a);
  96. }
  97. Item *create_func_dayname(Item* a)
  98. {
  99.   return new Item_func_dayname(new Item_func_to_days(a));
  100. }
  101. Item *create_func_degrees(Item *a)
  102. {
  103.   return new Item_func_units((char*) "degrees",a,180/M_PI,0.0);
  104. }
  105. Item *create_func_exp(Item* a)
  106. {
  107.   return new Item_func_exp(a);
  108. }
  109. Item *create_func_find_in_set(Item* a, Item *b)
  110. {
  111.   return new Item_func_find_in_set(a, b);
  112. }
  113. Item *create_func_floor(Item* a)
  114. {
  115.   return new Item_func_floor(a);
  116. }
  117. Item *create_func_found_rows(void)
  118. {
  119.   THD *thd=current_thd;
  120.   thd->lex->safe_to_cache_query= 0;
  121.   return new Item_func_found_rows();
  122. }
  123. Item *create_func_from_days(Item* a)
  124. {
  125.   return new Item_func_from_days(a);
  126. }
  127. Item *create_func_get_lock(Item* a, Item *b)
  128. {
  129.   current_thd->lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
  130.   return new Item_func_get_lock(a, b);
  131. }
  132. Item *create_func_hex(Item *a)
  133. {
  134.   return new Item_func_hex(a);
  135. }
  136. Item *create_func_inet_ntoa(Item* a)
  137. {
  138.   return new Item_func_inet_ntoa(a);
  139. }
  140. Item *create_func_inet_aton(Item* a)
  141. {
  142.   return new Item_func_inet_aton(a);
  143. }
  144. Item *create_func_ifnull(Item* a, Item *b)
  145. {
  146.   return new Item_func_ifnull(a,b);
  147. }
  148. Item *create_func_nullif(Item* a, Item *b)
  149. {
  150.   return new Item_func_nullif(a,b);
  151. }
  152. Item *create_func_locate(Item* a, Item *b)
  153. {
  154.   return new Item_func_locate(b,a);
  155. }
  156. Item *create_func_instr(Item* a, Item *b)
  157. {
  158.   return new Item_func_locate(a,b);
  159. }
  160. Item *create_func_isnull(Item* a)
  161. {
  162.   return new Item_func_isnull(a);
  163. }
  164. Item *create_func_lcase(Item* a)
  165. {
  166.   return new Item_func_lcase(a);
  167. }
  168. Item *create_func_length(Item* a)
  169. {
  170.   return new Item_func_length(a);
  171. }
  172. Item *create_func_bit_length(Item* a)
  173. {
  174.   return new Item_func_bit_length(a);
  175. }
  176. Item *create_func_coercibility(Item* a)
  177. {
  178.   return new Item_func_coercibility(a);
  179. }
  180. Item *create_func_char_length(Item* a)
  181. {
  182.   return new Item_func_char_length(a);
  183. }
  184. Item *create_func_ln(Item* a)
  185. {
  186.   return new Item_func_ln(a);
  187. }
  188. Item *create_func_log2(Item* a)
  189. {
  190.   return new Item_func_log2(a);
  191. }
  192. Item *create_func_log10(Item* a)
  193. {
  194.   return new Item_func_log10(a);
  195. }
  196. Item *create_func_lpad(Item* a, Item *b, Item *c)
  197. {
  198.   return new Item_func_lpad(a,b,c);
  199. }
  200. Item *create_func_ltrim(Item* a)
  201. {
  202.   return new Item_func_ltrim(a);
  203. }
  204. Item *create_func_md5(Item* a)
  205. {
  206.   return new Item_func_md5(a);
  207. }
  208. Item *create_func_mod(Item* a, Item *b)
  209. {
  210.   return new Item_func_mod(a,b);
  211. }
  212. Item *create_func_monthname(Item* a)
  213. {
  214.   return new Item_func_monthname(a);
  215. }
  216. Item *create_func_month(Item* a)
  217. {
  218.   return new Item_func_month(a);
  219. }
  220. Item *create_func_oct(Item *a)
  221. {
  222.   return new Item_func_conv(a,new Item_int((int32) 10,2),
  223.     new Item_int((int32) 8,1));
  224. }
  225. Item *create_func_period_add(Item* a, Item *b)
  226. {
  227.   return new Item_func_period_add(a,b);
  228. }
  229. Item *create_func_period_diff(Item* a, Item *b)
  230. {
  231.   return new Item_func_period_diff(a,b);
  232. }
  233. Item *create_func_pi(void)
  234. {
  235.   return new Item_real("pi()",M_PI,6,8);
  236. }
  237. Item *create_func_pow(Item* a, Item *b)
  238. {
  239.   return new Item_func_pow(a,b);
  240. }
  241. Item *create_func_current_user()
  242. {
  243.   THD *thd=current_thd;
  244.   char buff[HOSTNAME_LENGTH+USERNAME_LENGTH+2];
  245.   uint length;
  246.   thd->lex->safe_to_cache_query= 0;
  247.   length= (uint) (strxmov(buff, thd->priv_user, "@", thd->priv_host, NullS) -
  248.   buff);
  249.   return new Item_string(NullS, thd->memdup(buff, length), length,
  250.  system_charset_info);
  251. }
  252. Item *create_func_quarter(Item* a)
  253. {
  254.   return new Item_func_quarter(a);
  255. }
  256. Item *create_func_radians(Item *a)
  257. {
  258.   return new Item_func_units((char*) "radians",a,M_PI/180,0.0);
  259. }
  260. Item *create_func_release_lock(Item* a)
  261. {
  262.   current_thd->lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
  263.   return new Item_func_release_lock(a);
  264. }
  265. Item *create_func_repeat(Item* a, Item *b)
  266. {
  267.   return new Item_func_repeat(a,b);
  268. }
  269. Item *create_func_reverse(Item* a)
  270. {
  271.   return new Item_func_reverse(a);
  272. }
  273. Item *create_func_rpad(Item* a, Item *b, Item *c)
  274. {
  275.   return new Item_func_rpad(a,b,c);
  276. }
  277. Item *create_func_rtrim(Item* a)
  278. {
  279.   return new Item_func_rtrim(a);
  280. }
  281. Item *create_func_sec_to_time(Item* a)
  282. {
  283.   return new Item_func_sec_to_time(a);
  284. }
  285. Item *create_func_sign(Item* a)
  286. {
  287.   return new Item_func_sign(a);
  288. }
  289. Item *create_func_sin(Item* a)
  290. {
  291.   return new Item_func_sin(a);
  292. }
  293. Item *create_func_sha(Item* a)
  294. {
  295.   return new Item_func_sha(a);
  296. }
  297. Item *create_func_space(Item *a)
  298. {
  299.   CHARSET_INFO *cs= current_thd->variables.collation_connection;
  300.   Item *sp;
  301.   if (cs->mbminlen > 1)
  302.   {
  303.     uint dummy_errors;
  304.     sp= new Item_string("",0,cs);
  305.     if (sp)
  306.       sp->str_value.copy(" ", 1, &my_charset_latin1, cs, &dummy_errors);
  307.   }
  308.   else
  309.   {
  310.     sp= new Item_string(" ",1,cs);
  311.   }
  312.   return sp ? new Item_func_repeat(sp, a) : 0;
  313. }
  314. Item *create_func_soundex(Item* a)
  315. {
  316.   return new Item_func_soundex(a);
  317. }
  318. Item *create_func_sqrt(Item* a)
  319. {
  320.   return new Item_func_sqrt(a);
  321. }
  322. Item *create_func_strcmp(Item* a, Item *b)
  323. {
  324.   return new Item_func_strcmp(a,b);
  325. }
  326. Item *create_func_tan(Item* a)
  327. {
  328.   return new Item_func_tan(a);
  329. }
  330. Item *create_func_time_format(Item *a, Item *b)
  331. {
  332.   return new Item_func_date_format(a,b,1);
  333. }
  334. Item *create_func_time_to_sec(Item* a)
  335. {
  336.   return new Item_func_time_to_sec(a);
  337. }
  338. Item *create_func_to_days(Item* a)
  339. {
  340.   return new Item_func_to_days(a);
  341. }
  342. Item *create_func_ucase(Item* a)
  343. {
  344.   return new Item_func_ucase(a);
  345. }
  346. Item *create_func_unhex(Item* a)
  347. {
  348.   return new Item_func_unhex(a);
  349. }
  350. Item *create_func_uuid(void)
  351. {
  352.   return new Item_func_uuid();
  353. }
  354. Item *create_func_version(void)
  355. {
  356.   return new Item_string(NullS,server_version, 
  357.  (uint) strlen(server_version),
  358.  system_charset_info, DERIVATION_SYSCONST);
  359. }
  360. Item *create_func_weekday(Item* a)
  361. {
  362.   return new Item_func_weekday(new Item_func_to_days(a),0);
  363. }
  364. Item *create_func_year(Item* a)
  365. {
  366.   return new Item_func_year(a);
  367. }
  368. Item *create_load_file(Item* a)
  369. {
  370.   current_thd->lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
  371.   return new Item_load_file(a);
  372. }
  373. Item *create_func_cast(Item *a, Cast_target cast_type, int len,
  374.        CHARSET_INFO *cs)
  375. {
  376.   Item *res;
  377.   LINT_INIT(res);
  378.   switch (cast_type) {
  379.   case ITEM_CAST_BINARY:  res= new Item_func_binary(a); break;
  380.   case ITEM_CAST_SIGNED_INT: res= new Item_func_signed(a); break;
  381.   case ITEM_CAST_UNSIGNED_INT:  res= new Item_func_unsigned(a); break;
  382.   case ITEM_CAST_DATE: res= new Item_date_typecast(a); break;
  383.   case ITEM_CAST_TIME: res= new Item_time_typecast(a); break;
  384.   case ITEM_CAST_DATETIME: res= new Item_datetime_typecast(a); break;
  385.   case ITEM_CAST_CHAR:
  386.     res= new Item_char_typecast(a, len, cs ? cs : 
  387. current_thd->variables.collation_connection);
  388.     break;
  389.   }
  390.   return res;
  391. }
  392. Item *create_func_is_free_lock(Item* a)
  393. {
  394.   current_thd->lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
  395.   return new Item_func_is_free_lock(a);
  396. }
  397. Item *create_func_is_used_lock(Item* a)
  398. {
  399.   current_thd->lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
  400.   return new Item_func_is_used_lock(a);
  401. }
  402. Item *create_func_quote(Item* a)
  403. {
  404.   return new Item_func_quote(a);
  405. }
  406. #ifdef HAVE_SPATIAL
  407. Item *create_func_as_wkt(Item *a)
  408. {
  409.   return new Item_func_as_wkt(a);
  410. }
  411. Item *create_func_as_wkb(Item *a)
  412. {
  413.   return new Item_func_as_wkb(a);
  414. }
  415. Item *create_func_srid(Item *a)
  416. {
  417.   return new Item_func_srid(a);
  418. }
  419. Item *create_func_startpoint(Item *a)
  420. {
  421.   return new Item_func_spatial_decomp(a, Item_func::SP_STARTPOINT);
  422. }
  423. Item *create_func_endpoint(Item *a)
  424. {
  425.   return new Item_func_spatial_decomp(a, Item_func::SP_ENDPOINT);
  426. }
  427. Item *create_func_exteriorring(Item *a)
  428. {
  429.   return new Item_func_spatial_decomp(a, Item_func::SP_EXTERIORRING);
  430. }
  431. Item *create_func_pointn(Item *a, Item *b)
  432. {
  433.   return new Item_func_spatial_decomp_n(a, b, Item_func::SP_POINTN);
  434. }
  435. Item *create_func_interiorringn(Item *a, Item *b)
  436. {
  437.   return new Item_func_spatial_decomp_n(a, b, Item_func::SP_INTERIORRINGN);
  438. }
  439. Item *create_func_geometryn(Item *a, Item *b)
  440. {
  441.   return new Item_func_spatial_decomp_n(a, b, Item_func::SP_GEOMETRYN);
  442. }
  443. Item *create_func_centroid(Item *a)
  444. {
  445.   return new Item_func_centroid(a);
  446. }
  447. Item *create_func_envelope(Item *a)
  448. {
  449.   return new Item_func_envelope(a);
  450. }
  451. Item *create_func_equals(Item *a, Item *b)
  452. {
  453.   return new Item_func_spatial_rel(a, b, Item_func::SP_EQUALS_FUNC);
  454. }
  455. Item *create_func_disjoint(Item *a, Item *b)
  456. {
  457.   return new Item_func_spatial_rel(a, b, Item_func::SP_DISJOINT_FUNC);
  458. }
  459. Item *create_func_intersects(Item *a, Item *b)
  460. {
  461.   return new Item_func_spatial_rel(a, b, Item_func::SP_INTERSECTS_FUNC);
  462. }
  463. Item *create_func_touches(Item *a, Item *b)
  464. {
  465.   return new Item_func_spatial_rel(a, b, Item_func::SP_TOUCHES_FUNC);
  466. }
  467. Item *create_func_crosses(Item *a, Item *b)
  468. {
  469.   return new Item_func_spatial_rel(a, b, Item_func::SP_CROSSES_FUNC);
  470. }
  471. Item *create_func_within(Item *a, Item *b)
  472. {
  473.   return new Item_func_spatial_rel(a, b, Item_func::SP_WITHIN_FUNC);
  474. }
  475. Item *create_func_contains(Item *a, Item *b)
  476. {
  477.   return new Item_func_spatial_rel(a, b, Item_func::SP_CONTAINS_FUNC);
  478. }
  479. Item *create_func_overlaps(Item *a, Item *b)
  480. {
  481.   return new Item_func_spatial_rel(a, b, Item_func::SP_OVERLAPS_FUNC);
  482. }
  483. Item *create_func_isempty(Item *a)
  484. {
  485.   return new Item_func_isempty(a);
  486. }
  487. Item *create_func_issimple(Item *a)
  488. {
  489.   return new Item_func_issimple(a);
  490. }
  491. Item *create_func_isclosed(Item *a)
  492. {
  493.   return new Item_func_isclosed(a);
  494. }
  495. Item *create_func_geometry_type(Item *a)
  496. {
  497.   return new Item_func_geometry_type(a);
  498. }
  499. Item *create_func_dimension(Item *a)
  500. {
  501.   return new Item_func_dimension(a);
  502. }
  503. Item *create_func_x(Item *a)
  504. {
  505.   return new Item_func_x(a);
  506. }
  507. Item *create_func_y(Item *a)
  508. {
  509.   return new Item_func_y(a);
  510. }
  511. Item *create_func_numpoints(Item *a)
  512. {
  513.   return new Item_func_numpoints(a);
  514. }
  515. Item *create_func_numinteriorring(Item *a)
  516. {
  517.   return new Item_func_numinteriorring(a);
  518. }
  519. Item *create_func_numgeometries(Item *a)
  520. {
  521.   return new Item_func_numgeometries(a);
  522. }
  523. Item *create_func_area(Item *a)
  524. {
  525.   return new Item_func_area(a);
  526. }
  527. Item *create_func_glength(Item *a)
  528. {
  529.   return new Item_func_glength(a);
  530. }
  531. Item *create_func_point(Item *a, Item *b)
  532. {
  533.   return new Item_func_point(a, b);
  534. }
  535. #endif /*HAVE_SPATIAL*/
  536. Item *create_func_crc32(Item* a)
  537. {
  538.   return new Item_func_crc32(a);
  539. }
  540. Item *create_func_compress(Item* a)
  541. {
  542.   return new Item_func_compress(a);
  543. }
  544. Item *create_func_uncompress(Item* a)
  545. {
  546.   return new Item_func_uncompress(a);
  547. }
  548. Item *create_func_uncompressed_length(Item* a)
  549. {
  550.   return new Item_func_uncompressed_length(a);
  551. }
  552. Item *create_func_datediff(Item *a, Item *b)
  553. {
  554.   return new Item_func_minus(new Item_func_to_days(a),
  555.      new Item_func_to_days(b));
  556. }
  557. Item *create_func_weekofyear(Item *a)
  558. {
  559.   return new Item_func_week(a, new Item_int((char*) "0", 3, 1));
  560. }
  561. Item *create_func_makedate(Item* a,Item* b)
  562. {
  563.   return new Item_func_makedate(a, b);
  564. }
  565. Item *create_func_addtime(Item* a,Item* b)
  566. {
  567.   return new Item_func_add_time(a, b, 0, 0);
  568. }
  569. Item *create_func_subtime(Item* a,Item* b)
  570. {
  571.   return new Item_func_add_time(a, b, 0, 1);
  572. }
  573. Item *create_func_timediff(Item* a,Item* b)
  574. {
  575.   return new Item_func_timediff(a, b);
  576. }
  577. Item *create_func_maketime(Item* a,Item* b,Item* c)
  578. {
  579.   return new Item_func_maketime(a, b, c);
  580. }
  581. Item *create_func_str_to_date(Item* a,Item* b)
  582. {
  583.   return new Item_func_str_to_date(a, b);
  584. }
  585. Item *create_func_last_day(Item *a)
  586. {
  587.   return new Item_func_last_day(a);
  588. }