summaryrefslogtreecommitdiff
path: root/storage/connect/tabext.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'storage/connect/tabext.cpp')
-rw-r--r--storage/connect/tabext.cpp44
1 files changed, 39 insertions, 5 deletions
diff --git a/storage/connect/tabext.cpp b/storage/connect/tabext.cpp
index 44a996243db..dcd93539f19 100644
--- a/storage/connect/tabext.cpp
+++ b/storage/connect/tabext.cpp
@@ -159,6 +159,9 @@ bool EXTDEF::DefineAM(PGLOBAL g, LPCSTR am, int poff)
Maxerr = GetIntCatInfo("Maxerr", 0);
Maxres = GetIntCatInfo("Maxres", 0);
Quoted = GetIntCatInfo("Quoted", 0);
+ Qchar = GetStringCatInfo(g,"Qchar", NULL);
+ if (Qchar && !Quoted)
+ Quoted = 1;
Options = 0;
Cto = 0;
Qto = 0;
@@ -198,6 +201,7 @@ TDBEXT::TDBEXT(EXTDEF *tdp) : TDB(tdp)
Cto = tdp->Cto;
Qto = tdp->Qto;
Quoted = MY_MAX(0, tdp->GetQuoted());
+ Quote = tdp->GetQchar();
Rows = tdp->GetElemt();
Memory = tdp->Memory;
Scrollable = tdp->Scrollable;
@@ -214,12 +218,12 @@ TDBEXT::TDBEXT(EXTDEF *tdp) : TDB(tdp)
Cto = 0;
Qto = 0;
Quoted = 0;
+ Quote = NULL;
Rows = 0;
Memory = 0;
Scrollable = false;
} // endif tdp
- Quote = NULL;
Query = NULL;
Count = NULL;
//Where = NULL;
@@ -252,6 +256,7 @@ TDBEXT::TDBEXT(PTDBEXT tdbp) : TDB(tdbp)
Cto = tdbp->Cto;
Qto = tdbp->Qto;
Quoted = tdbp->Quoted;
+ Quote = tdbp->Quote;
Rows = tdbp->Rows;
Memory = tdbp->Memory;
Scrollable = tdbp->Scrollable;
@@ -389,6 +394,8 @@ bool TDBEXT::MakeSQL(PGLOBAL g, bool cnt)
int len;
bool first = true;
PCOL colp;
+ char *res= NULL, *my_schema_table= NULL;
+ size_t my_len= 0;
if (Srcdef)
return MakeSrcdef(g);
@@ -458,10 +465,37 @@ bool TDBEXT::MakeSQL(PGLOBAL g, bool cnt)
Decode(TableName, buf, sizeof(buf));
if (Quote) {
- // Put table name between identifier quotes in case in contains blanks
- Query->Append(Quote);
- Query->Append(buf);
- Query->Append(Quote);
+ // Tabname can have both database and table identifiers, we need to parse
+ if (res= strstr(buf, "."))
+ {
+ // Parse schema
+ my_len= res - buf + 1;
+ my_schema_table= (char *) malloc(my_len);
+ memcpy(my_schema_table, buf, my_len - 1);
+ my_schema_table[my_len] = 0;
+ Query->Append(Quote);
+ Query->Append(my_schema_table);
+ Query->Append(Quote);
+ free(my_schema_table);
+ Query->Append(".");
+ // Parse table
+ my_len= strlen(buf) - my_len + 1;
+ my_schema_table= (char *) malloc(my_len);
+ memcpy(my_schema_table, ++res, my_len);
+ my_schema_table[my_len] = 0;
+ Query->Append(Quote);
+ Query->Append(my_schema_table);
+ Query->Append(Quote);
+ free(my_schema_table);
+ }
+ else
+ {
+ // Put table name between identifier quotes in case in contains blanks
+ Query->Append(Quote);
+ Query->Append(buf);
+ Query->Append(Quote);
+ }
+
} else
Query->Append(buf);