~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/sql_lex.cc

mergeĀ mainline

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
#include <drizzled/sql_base.h>
25
25
#include <drizzled/lookup_symbol.h>
26
26
 
 
27
#include <ctype.h>
 
28
 
 
29
using namespace std;
27
30
 
28
31
 
29
32
static int lex_one_token(void *arg, void *yysession);
1115
1118
 
1116
1119
        /*
1117
1120
          The special comment format is very strict:
1118
 
          '/' '*' '!', followed by exactly
1119
 
          1 digit (major), 2 digits (minor), then 2 digits (dot).
1120
 
          32302 -> 3.23.02
1121
 
          50032 -> 5.0.32
1122
 
          50114 -> 5.1.14
 
1121
          '/' '*' '!', followed by digits ended by a non-digit.
 
1122
          There must be at least 5 digits for it to count
1123
1123
        */
1124
 
        char version_str[6];
1125
 
        version_str[0]= lip->yyPeekn(0);
1126
 
        version_str[1]= lip->yyPeekn(1);
1127
 
        version_str[2]= lip->yyPeekn(2);
1128
 
        version_str[3]= lip->yyPeekn(3);
1129
 
        version_str[4]= lip->yyPeekn(4);
1130
 
        version_str[5]= 0;
1131
 
        if (  my_isdigit(cs, version_str[0])
1132
 
           && my_isdigit(cs, version_str[1])
1133
 
           && my_isdigit(cs, version_str[2])
1134
 
           && my_isdigit(cs, version_str[3])
1135
 
           && my_isdigit(cs, version_str[4])
1136
 
           )
1137
 
        {
1138
 
          ulong version;
1139
 
          version=strtol(version_str, NULL, 10);
 
1124
        const int MAX_VERSION_SIZE= 16;
 
1125
        char version_str[MAX_VERSION_SIZE];
 
1126
 
 
1127
        int pos= 0;
 
1128
        do
 
1129
        {
 
1130
          version_str[pos]= lip->yyPeekn(pos);
 
1131
          pos++;
 
1132
        } while ((pos < MAX_VERSION_SIZE-1) && isdigit(version_str[pos-1]));
 
1133
        version_str[pos]= 0;
 
1134
 
 
1135
        /* To keep some semblance of compatibility, we impose a 5 digit floor */
 
1136
        if (pos > 4)
 
1137
        {
 
1138
          uint64_t version;
 
1139
          version=strtoll(version_str, NULL, 10);
1140
1140
 
1141
1141
          /* Accept 'M' 'm' 'm' 'd' 'd' */
1142
 
          lip->yySkipn(5);
 
1142
          lip->yySkipn(pos-1);
1143
1143
 
1144
1144
          if (version <= DRIZZLE_VERSION_ID)
1145
1145
          {