~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/sql_yacc.yy

  • Committer: Brian Aker
  • Date: 2010-02-23 22:14:30 UTC
  • mfrom: (1273.13.96 build)
  • Revision ID: brian@gaz-20100223221430-7v7mwb3r3moku9zj
Merge of stewart.

Show diffs side-by-side

added added

removed removed

Lines of Context:
301
301
  return false;
302
302
}
303
303
 
 
304
static Item* reserved_keyword_function(const std::string &name, List<Item> *item_list)
 
305
{
 
306
  const plugin::Function *udf= plugin::Function::get(name.c_str(), name.length());
 
307
  Item *item= NULL;
 
308
 
 
309
  if (udf)
 
310
  {
 
311
    item= Create_udf_func::s_singleton.create(current_session, udf, item_list);
 
312
  } else {
 
313
    my_error(ER_SP_DOES_NOT_EXIST, MYF(0), "FUNCTION", name.c_str());
 
314
  }
 
315
 
 
316
  return item;
 
317
}
 
318
 
304
319
} /* namespace drizzled; */
305
320
 
306
321
using namespace drizzled;
3074
3089
        | SUBDATE_SYM '(' expr ',' INTERVAL_SYM expr interval ')'
3075
3090
          { $$= new (YYSession->mem_root) Item_date_add_interval($3, $6, $7, 1); }
3076
3091
        | SUBSTRING '(' expr ',' expr ',' expr ')'
3077
 
          { $$= new (YYSession->mem_root) Item_func_substr($3,$5,$7); }
 
3092
          {
 
3093
            std::string reverse_str("substr");
 
3094
            List<Item> *args= new (YYSession->mem_root) List<Item>;
 
3095
            args->push_back($3);
 
3096
            args->push_back($5);
 
3097
            args->push_back($7);
 
3098
            if (! ($$= reserved_keyword_function(reverse_str, args)))
 
3099
            {
 
3100
              DRIZZLE_YYABORT;
 
3101
            }
 
3102
          }
3078
3103
        | SUBSTRING '(' expr ',' expr ')'
3079
 
          { $$= new (YYSession->mem_root) Item_func_substr($3,$5); }
 
3104
          {
 
3105
            std::string reverse_str("substr");
 
3106
            List<Item> *args= new (YYSession->mem_root) List<Item>;
 
3107
            args->push_back($3);
 
3108
            args->push_back($5);
 
3109
            if (! ($$= reserved_keyword_function(reverse_str, args)))
 
3110
            {
 
3111
              DRIZZLE_YYABORT;
 
3112
            }
 
3113
          }
3080
3114
        | SUBSTRING '(' expr FROM expr FOR_SYM expr ')'
3081
 
          { $$= new (YYSession->mem_root) Item_func_substr($3,$5,$7); }
 
3115
          {
 
3116
            std::string reverse_str("substr");
 
3117
            List<Item> *args= new (YYSession->mem_root) List<Item>;
 
3118
            args->push_back($3);
 
3119
            args->push_back($5);
 
3120
            args->push_back($7);
 
3121
            if (! ($$= reserved_keyword_function(reverse_str, args)))
 
3122
            {
 
3123
              DRIZZLE_YYABORT;
 
3124
            }
 
3125
          }
3082
3126
        | SUBSTRING '(' expr FROM expr ')'
3083
 
          { $$= new (YYSession->mem_root) Item_func_substr($3,$5); }
 
3127
          {
 
3128
            std::string reverse_str("substr");
 
3129
            List<Item> *args= new (YYSession->mem_root) List<Item>;
 
3130
            args->push_back($3);
 
3131
            args->push_back($5);
 
3132
            if (! ($$= reserved_keyword_function(reverse_str, args)))
 
3133
            {
 
3134
              DRIZZLE_YYABORT;
 
3135
            }
 
3136
          }
3084
3137
        | SYSDATE optional_braces
3085
3138
          { $$= new (YYSession->mem_root) Item_func_sysdate_local(); }
3086
3139
        | SYSDATE '(' expr ')'
3111
3164
          { $$= new (YYSession->mem_root) Item_func_collation($3); }
3112
3165
        | DATABASE '(' ')'
3113
3166
          {
3114
 
            $$= new (YYSession->mem_root) Item_func_database();
3115
 
          }
 
3167
            std::string database_str("database");
 
3168
            if (! ($$= reserved_keyword_function(database_str, NULL)))
 
3169
            {
 
3170
              DRIZZLE_YYABORT;
 
3171
            }
 
3172
          }
3116
3173
        | IF '(' expr ',' expr ',' expr ')'
3117
3174
          { $$= new (YYSession->mem_root) Item_func_if($3,$5,$7); }
3118
3175
        | MICROSECOND_SYM '(' expr ')'
3126
3183
        | REPLACE '(' expr ',' expr ',' expr ')'
3127
3184
          { $$= new (YYSession->mem_root) Item_func_replace($3,$5,$7); }
3128
3185
        | REVERSE_SYM '(' expr ')'
3129
 
          { $$= new (YYSession->mem_root) Item_func_reverse($3); }
 
3186
          {
 
3187
            std::string reverse_str("reverse");
 
3188
            List<Item> *args= new (YYSession->mem_root) List<Item>;
 
3189
            args->push_back($3);
 
3190
            if (! ($$= reserved_keyword_function(reverse_str, args)))
 
3191
            {
 
3192
              DRIZZLE_YYABORT;
 
3193
            }
 
3194
          }
3130
3195
        | TRUNCATE_SYM '(' expr ',' expr ')'
3131
3196
          { $$= new (YYSession->mem_root) Item_func_round($3,$5,1); }
3132
3197
        ;