Skip to content

Commit 5bc538d

Browse files
committed
Commit the 2 last commits merged from 10.1
1 parent 92d283c commit 5bc538d

File tree

5 files changed

+455
-291
lines changed

5 files changed

+455
-291
lines changed

storage/connect/ha_connect.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@
172172
#define JSONMAX 10 // JSON Default max grp size
173173

174174
extern "C" {
175-
char version[]= "Version 1.05.0003 February 27, 2017";
175+
char version[]= "Version 1.05.0003 March 7, 2017";
176176
#if defined(__WIN__)
177177
char compver[]= "Version 1.05.0003 " __DATE__ " " __TIME__;
178178
char slash= '\\';
@@ -509,7 +509,7 @@ ha_create_table_option connect_table_option_list[]=
509509
HA_TOPTION_NUMBER("LRECL", lrecl, 0, 0, INT_MAX32, 1),
510510
HA_TOPTION_NUMBER("BLOCK_SIZE", elements, 0, 0, INT_MAX32, 1),
511511
//HA_TOPTION_NUMBER("ESTIMATE", estimate, 0, 0, INT_MAX32, 1),
512-
HA_TOPTION_NUMBER("MULTIPLE", multiple, 0, 0, 2, 1),
512+
HA_TOPTION_NUMBER("MULTIPLE", multiple, 0, 0, 3, 1),
513513
HA_TOPTION_NUMBER("HEADER", header, 0, 0, 3, 1),
514514
HA_TOPTION_NUMBER("QUOTED", quoted, (ulonglong) -1, 0, 3, 1),
515515
HA_TOPTION_NUMBER("ENDING", ending, (ulonglong) -1, 0, INT_MAX32, 1),

storage/connect/myconn.cpp

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -135,10 +135,12 @@ PQRYRES MyColumns(PGLOBAL g, THD *thd, const char *host, const char *db,
135135
FLD_KEY, FLD_SCALE, FLD_RADIX, FLD_NULL,
136136
FLD_REM, FLD_NO, FLD_DEFAULT, FLD_EXTRA,
137137
FLD_CHARSET};
138-
unsigned int length[] = {0, 4, 16, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0};
139-
char *fld, *colname, *chset, *fmt, v, buf[128], uns[16], zero[16];
138+
//unsigned int length[] = {0, 4, 16, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0};
139+
unsigned int length[] = {0, 4, 0, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0};
140+
char *fld, *colname, *chset, *fmt, v, buf[128], uns[16], zero[16];
140141
int i, n, nf, ncol = sizeof(buftyp) / sizeof(int);
141142
int len, type, prec, rc, k = 0;
143+
bool b;
142144
PQRYRES qrp;
143145
PCOLRES crp;
144146
MYSQLC myc;
@@ -157,7 +159,7 @@ PQRYRES MyColumns(PGLOBAL g, THD *thd, const char *host, const char *db,
157159
/* Do an evaluation of the result size. */
158160
/********************************************************************/
159161
STRING cmd(g, 64, "SHOW FULL COLUMNS FROM ");
160-
bool b = cmd.Append((PSZ)table);
162+
b = cmd.Append((PSZ)table);
161163

162164
b |= cmd.Append(" FROM ");
163165
b |= cmd.Append((PSZ)(db ? db : PlgGetUser(g)->DBName));
@@ -232,11 +234,31 @@ PQRYRES MyColumns(PGLOBAL g, THD *thd, const char *host, const char *db,
232234
fld = myc.GetCharField(1);
233235
prec = 0;
234236
len = 0;
235-
v = (chset && !strcmp(chset, "binary")) ? 'B' : 0;
237+
// v = (chset && !strcmp(chset, "binary")) ? 'B' : 0;
238+
v = 0;
236239
*uns = 0;
237240
*zero = 0;
238-
239-
switch ((nf = sscanf(fld, "%[^(](%d,%d", buf, &len, &prec))) {
241+
b = false;
242+
243+
if (!strnicmp(fld, "enum", 4)) {
244+
char *p2, *p1 = fld + 6; // to skip enum('
245+
246+
while (true) {
247+
p2 = strchr(p1, '\'');
248+
len = MY_MAX(len, p2 - p1);
249+
if (*++p2 != ',') break;
250+
p1 = p2 + 2;
251+
} // endwhile
252+
253+
v = (len > 255) ? 'V' : 0;
254+
strcpy(buf, "enum");
255+
b = true;
256+
} else if (!strnicmp(fld, "set", 3)) {
257+
len = (int)strlen(fld) - 2;
258+
v = 'V';
259+
strcpy(buf, "set");
260+
b = true;
261+
} else switch ((nf = sscanf(fld, "%[^(](%d,%d", buf, &len, &prec))) {
240262
case 3:
241263
nf = sscanf(fld, "%[^(](%d,%d) %s %s", buf, &len, &prec, uns, zero);
242264
break;
@@ -271,7 +293,7 @@ PQRYRES MyColumns(PGLOBAL g, THD *thd, const char *host, const char *db,
271293
colname, len);
272294
PushWarning(g, thd);
273295
v = 'V';
274-
} else
296+
} else
275297
len = MY_MIN(len, 4096);
276298

277299
} // endif type
@@ -286,6 +308,9 @@ PQRYRES MyColumns(PGLOBAL g, THD *thd, const char *host, const char *db,
286308
default: crp->Nulls[i] = v; break;
287309
} // endswitch nf
288310

311+
if (b) // enum or set
312+
nf = sscanf(fld, "%s ", buf); // get values
313+
289314
crp = crp->Next; // Type_Name
290315
crp->Kdata->SetValue(buf, i);
291316

storage/connect/myutil.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ int MYSQLtoPLG(char *typname, char *var)
4242
type = TYPE_INT;
4343
else if (!stricmp(typname, "smallint"))
4444
type = TYPE_SHORT;
45-
else if (!stricmp(typname, "char") || !stricmp(typname, "varchar"))
45+
else if (!stricmp(typname, "char") || !stricmp(typname, "varchar") ||
46+
!stricmp(typname, "enum") || !stricmp(typname, "set"))
4647
type = TYPE_STRING;
4748
else if (!stricmp(typname, "double") || !stricmp(typname, "float") ||
4849
!stricmp(typname, "real"))
@@ -87,10 +88,12 @@ int MYSQLtoPLG(char *typname, char *var)
8788
else if (!stricmp(typname, "year"))
8889
*var = 'Y';
8990

90-
} else if (type == TYPE_STRING && !stricmp(typname, "varchar"))
91-
// This is to make the difference between CHAR and VARCHAR
92-
*var = 'V';
93-
else if (type == TYPE_ERROR && xconv == TPC_SKIP)
91+
} else if (type == TYPE_STRING) {
92+
if (!stricmp(typname, "varchar"))
93+
// This is to make the difference between CHAR and VARCHAR
94+
*var = 'V';
95+
96+
} else if (type == TYPE_ERROR && xconv == TPC_SKIP)
9497
*var = 'K';
9598
else
9699
*var = 0;

0 commit comments

Comments
 (0)