1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-07 00:04:31 +03:00

Merge remote-tracking branch 'connect/10.2' into 10.2

This commit is contained in:
Vicențiu Ciorbaru
2018-03-18 15:05:27 +02:00
85 changed files with 2377 additions and 1655 deletions

View File

@@ -326,6 +326,30 @@ IF(NOT TARGET connect)
RETURN() RETURN()
ENDIF() ENDIF()
IF(WIN32)
IF (libmongoc-1.0_FOUND)
SET_TARGET_PROPERTIES(connect PROPERTIES LINK_FLAGS
"/DELAYLOAD:libbson-1.0.dll /DELAYLOAD:libmongoc-1.0.dll")
ENDIF(libmongoc-1.0_FOUND)
ENDIF(WIN32)
# Install some extra files that belong to connect engine
IF(WIN32)
# install ha_connect.lib
GET_TARGET_PROPERTY(CONNECT_LOCATION connect LOCATION)
STRING(REPLACE "dll" "lib" CONNECT_LIB ${CONNECT_LOCATION})
IF(CMAKE_CONFIGURATION_TYPES)
STRING(REPLACE "${CMAKE_CFG_INTDIR}" "\${CMAKE_INSTALL_CONFIG_NAME}"
CONNECT_LIB ${CONNECT_LIB})
ENDIF()
INSTALL(FILES ${CONNECT_LIB}
DESTINATION ${INSTALL_PLUGINDIR} COMPONENT connect-engine)
ENDIF(WIN32)
IF(NOT TARGET connect)
RETURN()
ENDIF()
# Install some extra files that belong to connect engine # Install some extra files that belong to connect engine
IF(WIN32) IF(WIN32)
# install ha_connect.lib # install ha_connect.lib

View File

@@ -1,9 +1,13 @@
package wrappers; package wrappers;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.Console; import java.io.Console;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
public class Client { public class Client {
static boolean DEBUG = true; static boolean DEBUG = true;
@@ -58,6 +62,9 @@ public class Client {
String query; String query;
System.out.println("Successfully connected to " + parms[1]); System.out.println("Successfully connected to " + parms[1]);
s = jdi.GetQuoteString();
System.out.println("Qstr = '" + s + "'");
while ((query = getLine("Query: ", false)) != null) { while ((query = getLine("Query: ", false)) != null) {
n = jdi.Execute(query); n = jdi.Execute(query);
System.out.println("Returned n = " + n); System.out.println("Returned n = " + n);
@@ -79,7 +86,11 @@ public class Client {
private static void PrintResult(int ncol) { private static void PrintResult(int ncol) {
// Get result set meta data // Get result set meta data
int i; int i;
Date date = new Date(0);
Time time = new Time(0);
Timestamp tsp = new Timestamp(0);
String columnName; String columnName;
Object job;
// Get the column names; column indices start from 1 // Get the column names; column indices start from 1
for (i = 1; i <= ncol; i++) { for (i = 1; i <= ncol; i++) {
@@ -112,6 +123,7 @@ public class Client {
case java.sql.Types.VARCHAR: case java.sql.Types.VARCHAR:
case java.sql.Types.LONGVARCHAR: case java.sql.Types.LONGVARCHAR:
case java.sql.Types.CHAR: case java.sql.Types.CHAR:
case 1111:
System.out.print(jdi.StringField(i, null)); System.out.print(jdi.StringField(i, null));
break; break;
case java.sql.Types.INTEGER: case java.sql.Types.INTEGER:
@@ -120,14 +132,17 @@ public class Client {
case java.sql.Types.BIGINT: case java.sql.Types.BIGINT:
System.out.print(jdi.BigintField(i, null)); System.out.print(jdi.BigintField(i, null));
break; break;
case java.sql.Types.TIMESTAMP:
System.out.print(jdi.TimestampField(i, null));
break;
case java.sql.Types.TIME: case java.sql.Types.TIME:
System.out.print(jdi.TimeField(i, null)); time.setTime((long)jdi.TimeField(i, null) * 1000);
System.out.print(time);
break; break;
case java.sql.Types.DATE: case java.sql.Types.DATE:
System.out.print(jdi.DateField(i, null)); date.setTime((long)jdi.DateField(i, null) * 1000);
System.out.print(date);
break;
case java.sql.Types.TIMESTAMP:
tsp.setTime((long)jdi.TimestampField(i, null) * 1000);
System.out.print(tsp);
break; break;
case java.sql.Types.SMALLINT: case java.sql.Types.SMALLINT:
System.out.print(jdi.IntField(i, null)); System.out.print(jdi.IntField(i, null));
@@ -141,6 +156,8 @@ public class Client {
case java.sql.Types.BOOLEAN: case java.sql.Types.BOOLEAN:
System.out.print(jdi.BooleanField(i, null)); System.out.print(jdi.BooleanField(i, null));
default: default:
job = jdi.ObjectField(i, null);
System.out.print(job.toString());
break; break;
} // endswitch Type } // endswitch Type

Binary file not shown.

View File

@@ -1,10 +1,22 @@
package wrappers; package wrappers;
import java.math.*; import java.math.BigDecimal;
import java.sql.*; import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.Date;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.Collections; import java.util.Collections;
import java.util.Hashtable; import java.util.Hashtable;
import java.util.List; import java.util.List;
import java.util.UUID;
import javax.sql.DataSource; import javax.sql.DataSource;
@@ -223,6 +235,24 @@ public class JdbcInterface {
} // end of SetTimestampParm } // end of SetTimestampParm
public void SetUuidParm(int i, String s) {
try {
UUID uuid;
if (s == null)
uuid = null;
else if (s.isEmpty())
uuid = UUID.randomUUID();
else
uuid = UUID.fromString(s);
pstmt.setObject(i, uuid);
} catch (Exception e) {
SetErrmsg(e);
} // end try/catch
} // end of SetUuidParm
public int SetNullParm(int i, int typ) { public int SetNullParm(int i, int typ) {
int rc = 0; int rc = 0;
@@ -481,6 +511,8 @@ public class JdbcInterface {
System.out.println("Executing query '" + query + "'"); System.out.println("Executing query '" + query + "'");
try { try {
if (rs != null)
rs.close();
rs = stmt.executeQuery(query); rs = stmt.executeQuery(query);
rsmd = rs.getMetaData(); rsmd = rs.getMetaData();
ncol = rsmd.getColumnCount(); ncol = rsmd.getColumnCount();
@@ -708,7 +740,7 @@ public class JdbcInterface {
return 0; return 0;
} // end of TimestampField } // end of TimestampField
public Object ObjectField(int n, String name) { public Object ObjectField(int n, String name) {
if (rs == null) { if (rs == null) {
System.out.println("No result set"); System.out.println("No result set");
} else try { } else try {
@@ -720,6 +752,22 @@ public class JdbcInterface {
return null; return null;
} // end of ObjectField } // end of ObjectField
public String UuidField(int n, String name) {
Object job;
if (rs == null) {
System.out.println("No result set");
} else
try {
job = (n > 0) ? rs.getObject(n) : rs.getObject(name);
return job.toString();
} catch (SQLException se) {
SetErrmsg(se);
} // end try/catch
return null;
} // end of UuidField
public int GetDrivers(String[] s, int mxs) { public int GetDrivers(String[] s, int mxs) {
int n = 0; int n = 0;
List<Driver> drivers = Collections.list(DriverManager.getDrivers()); List<Driver> drivers = Collections.list(DriverManager.getDrivers());

View File

@@ -1,9 +1,10 @@
package wrappers; package wrappers;
import java.sql.*; import java.sql.SQLException;
import java.util.Hashtable; import java.util.Hashtable;
import javax.sql.DataSource; import javax.sql.DataSource;
import org.postgresql.jdbc2.optional.PoolingDataSource; import org.postgresql.jdbc2.optional.PoolingDataSource;
public class PostgresqlInterface extends JdbcInterface { public class PostgresqlInterface extends JdbcInterface {
@@ -19,7 +20,7 @@ public class PostgresqlInterface extends JdbcInterface {
} // end of constructor } // end of constructor
@Override @Override
public int JdbcConnect(String[] parms, int fsize, boolean scrollable) { public int JdbcConnect(String[] parms, int fsize, boolean scrollable) {
int rc = 0; int rc = 0;
String url = parms[1]; String url = parms[1];

View File

@@ -82,7 +82,7 @@ PARRAY MakeValueArray(PGLOBAL g, PPARM pp)
if ((valtyp = pp->Type) != TYPE_STRING) if ((valtyp = pp->Type) != TYPE_STRING)
len = 1; len = 1;
if (trace) if (trace(1))
htrc("valtyp=%d len=%d\n", valtyp, len); htrc("valtyp=%d len=%d\n", valtyp, len);
/*********************************************************************/ /*********************************************************************/
@@ -287,7 +287,7 @@ bool ARRAY::AddValue(PGLOBAL g, PSZ strp)
return true; return true;
} // endif Type } // endif Type
if (trace) if (trace(1))
htrc(" adding string(%d): '%s'\n", Nval, strp); htrc(" adding string(%d): '%s'\n", Nval, strp);
//Value->SetValue_psz(strp); //Value->SetValue_psz(strp);
@@ -306,7 +306,7 @@ bool ARRAY::AddValue(PGLOBAL g, void *p)
return true; return true;
} // endif Type } // endif Type
if (trace) if (trace(1))
htrc(" adding pointer(%d): %p\n", Nval, p); htrc(" adding pointer(%d): %p\n", Nval, p);
Vblp->SetValue((PSZ)p, Nval++); Vblp->SetValue((PSZ)p, Nval++);
@@ -323,7 +323,7 @@ bool ARRAY::AddValue(PGLOBAL g, short n)
return true; return true;
} // endif Type } // endif Type
if (trace) if (trace(1))
htrc(" adding SHORT(%d): %hd\n", Nval, n); htrc(" adding SHORT(%d): %hd\n", Nval, n);
//Value->SetValue(n); //Value->SetValue(n);
@@ -342,7 +342,7 @@ bool ARRAY::AddValue(PGLOBAL g, int n)
return true; return true;
} // endif Type } // endif Type
if (trace) if (trace(1))
htrc(" adding int(%d): %d\n", Nval, n); htrc(" adding int(%d): %d\n", Nval, n);
//Value->SetValue(n); //Value->SetValue(n);
@@ -361,7 +361,7 @@ bool ARRAY::AddValue(PGLOBAL g, double d)
return true; return true;
} // endif Type } // endif Type
if (trace) if (trace(1))
htrc(" adding float(%d): %lf\n", Nval, d); htrc(" adding float(%d): %lf\n", Nval, d);
Value->SetValue(d); Value->SetValue(d);
@@ -380,7 +380,7 @@ bool ARRAY::AddValue(PGLOBAL g, PXOB xp)
return true; return true;
} // endif Type } // endif Type
if (trace) if (trace(1))
htrc(" adding (%d) from xp=%p\n", Nval, xp); htrc(" adding (%d) from xp=%p\n", Nval, xp);
//AddValue(xp->GetValue()); //AddValue(xp->GetValue());
@@ -399,7 +399,7 @@ bool ARRAY::AddValue(PGLOBAL g, PVAL vp)
return true; return true;
} // endif Type } // endif Type
if (trace) if (trace(1))
htrc(" adding (%d) from vp=%p\n", Nval, vp); htrc(" adding (%d) from vp=%p\n", Nval, vp);
Vblp->SetValue(vp, Nval++); Vblp->SetValue(vp, Nval++);
@@ -990,7 +990,7 @@ PSZ ARRAY::MakeArrayList(PGLOBAL g)
len += strlen(tp); len += strlen(tp);
} // enfor i } // enfor i
if (trace) if (trace(1))
htrc("Arraylist: len=%d\n", len); htrc("Arraylist: len=%d\n", len);
p = (char *)PlugSubAlloc(g, NULL, len); p = (char *)PlugSubAlloc(g, NULL, len);
@@ -1003,7 +1003,7 @@ PSZ ARRAY::MakeArrayList(PGLOBAL g)
strcat(p, (++i == Nval) ? ")" : ","); strcat(p, (++i == Nval) ? ")" : ",");
} // enfor i } // enfor i
if (trace) if (trace(1))
htrc("Arraylist: newlen=%d\n", strlen(p)); htrc("Arraylist: newlen=%d\n", strlen(p));
return p; return p;

View File

@@ -241,7 +241,7 @@ int BLKFILARI::BlockEval(PGLOBAL)
break; break;
} // endswitch Opc } // endswitch Opc
if (trace) if (trace(1))
htrc("BlockEval: op=%d n=%d rc=%d\n", Opc, n, Result); htrc("BlockEval: op=%d n=%d rc=%d\n", Opc, n, Result);
return Result; return Result;
@@ -338,7 +338,7 @@ int BLKFILAR2::BlockEval(PGLOBAL)
break; break;
} // endswitch Opc } // endswitch Opc
if (trace) if (trace(1))
htrc("BlockEval2: op=%d n=%d rc=%d\n", Opc, n, Result); htrc("BlockEval2: op=%d n=%d rc=%d\n", Opc, n, Result);
return Result; return Result;
@@ -474,7 +474,7 @@ int BLKFILMR2::BlockEval(PGLOBAL)
break; break;
} // endswitch Opc } // endswitch Opc
if (trace) if (trace(1))
htrc("BlockEval2: op=%d n=%d rc=%d\n", Opc, n, Result); htrc("BlockEval2: op=%d n=%d rc=%d\n", Opc, n, Result);
return Result; return Result;
@@ -567,7 +567,7 @@ int BLKSPCARI::BlockEval(PGLOBAL)
break; break;
} // endswitch Opc } // endswitch Opc
if (trace) if (trace(1))
htrc("BlockEval: op=%d n=%d rc=%d\n", Opc, n, Result); htrc("BlockEval: op=%d n=%d rc=%d\n", Opc, n, Result);
return Result; return Result;

View File

@@ -38,8 +38,8 @@ typedef class BLOCK *PBLOCK;
class DllExport BLOCK { class DllExport BLOCK {
public: public:
void * operator new(size_t size, PGLOBAL g, void *p = NULL) { void * operator new(size_t size, PGLOBAL g, void *p = NULL) {
// if (trace > 3) if (trace(256))
// htrc("New BLOCK: size=%d g=%p p=%p\n", size, g, p); htrc("New BLOCK: size=%d g=%p p=%p\n", size, g, p);
return (PlugSubAlloc(g, p, size)); return (PlugSubAlloc(g, p, size));
} // end of new } // end of new

View File

@@ -45,6 +45,7 @@ enum USETEMP {TMP_NO = 0, /* Never */
/***********************************************************************/ /***********************************************************************/
enum TYPCONV {TPC_NO = 0, /* Never */ enum TYPCONV {TPC_NO = 0, /* Never */
TPC_YES = 1, /* Always */ TPC_YES = 1, /* Always */
TPC_SKIP = 2}; /* Skip TEXT columns */ TPC_FORCE = 2, /* Also convert BLOBs */
TPC_SKIP = 3}; /* Skip TEXT columns */
#endif // _CHKLVL_DEFINED_ #endif // _CHKLVL_DEFINED_

View File

@@ -280,7 +280,7 @@ bool CMgoConn::MakeCursor(PGLOBAL g)
all = true; all = true;
if (Pcg->Pipe) { if (Pcg->Pipe) {
if (trace) if (trace(1))
htrc("Pipeline: %s\n", options); htrc("Pipeline: %s\n", options);
p = strrchr(options, ']'); p = strrchr(options, ']');
@@ -330,7 +330,7 @@ bool CMgoConn::MakeCursor(PGLOBAL g)
*(char*)p = ']'; // Restore Colist for discovery *(char*)p = ']'; // Restore Colist for discovery
p = s->GetStr(); p = s->GetStr();
if (trace) if (trace(33))
htrc("New Pipeline: %s\n", p); htrc("New Pipeline: %s\n", p);
Query = bson_new_from_json((const uint8_t *)p, -1, &Error); Query = bson_new_from_json((const uint8_t *)p, -1, &Error);
@@ -350,7 +350,7 @@ bool CMgoConn::MakeCursor(PGLOBAL g)
} else { } else {
if (Pcg->Filter || filp) { if (Pcg->Filter || filp) {
if (trace) { if (trace(1)) {
if (Pcg->Filter) if (Pcg->Filter)
htrc("Filter: %s\n", Pcg->Filter); htrc("Filter: %s\n", Pcg->Filter);
@@ -377,7 +377,7 @@ bool CMgoConn::MakeCursor(PGLOBAL g)
tp->SetFilter(NULL); // Not needed anymore tp->SetFilter(NULL); // Not needed anymore
} // endif To_Filter } // endif To_Filter
if (trace) if (trace(33))
htrc("selector: %s\n", s->GetStr()); htrc("selector: %s\n", s->GetStr());
s->Resize(s->GetLength() + 1); s->Resize(s->GetLength() + 1);
@@ -393,7 +393,7 @@ bool CMgoConn::MakeCursor(PGLOBAL g)
if (!all) { if (!all) {
if (options && *options) { if (options && *options) {
if (trace) if (trace(1))
htrc("options=%s\n", options); htrc("options=%s\n", options);
p = options; p = options;
@@ -450,10 +450,10 @@ int CMgoConn::ReadNext(PGLOBAL g)
if (!Cursor && MakeCursor(g)) { if (!Cursor && MakeCursor(g)) {
rc = RC_FX; rc = RC_FX;
} else if (mongoc_cursor_next(Cursor, &Document)) { } else if (mongoc_cursor_next(Cursor, &Document)) {
if (trace > 1) { if (trace(512)) {
bson_iter_t iter; bson_iter_t iter;
ShowDocument(&iter, Document, ""); ShowDocument(&iter, Document, "");
} else if (trace == 1) } else if (trace(1))
htrc("%s\n", GetDocument(g)); htrc("%s\n", GetDocument(g));
} else if (mongoc_cursor_error(Cursor, &Error)) { } else if (mongoc_cursor_error(Cursor, &Error)) {
@@ -589,7 +589,7 @@ int CMgoConn::Write(PGLOBAL g)
if (DocWrite(g, Fpc)) if (DocWrite(g, Fpc))
return RC_FX; return RC_FX;
if (trace) { if (trace(2)) {
char *str = bson_as_json(Fpc->Child, NULL); char *str = bson_as_json(Fpc->Child, NULL);
htrc("Inserting: %s\n", str); htrc("Inserting: %s\n", str);
bson_free(str); bson_free(str);
@@ -623,7 +623,7 @@ int CMgoConn::Write(PGLOBAL g)
} // endif iter } // endif iter
if (b) { if (b) {
if (trace) { if (trace(2)) {
char *str = bson_as_json(query, NULL); char *str = bson_as_json(query, NULL);
htrc("update query: %s\n", str); htrc("update query: %s\n", str);
bson_free(str); bson_free(str);

View File

@@ -76,7 +76,7 @@ COLBLK::COLBLK(PCOL col1, PTDB tdbp)
//To_Orig = col1; //To_Orig = col1;
To_Tdb = tdbp; To_Tdb = tdbp;
if (trace > 1) if (trace(2))
htrc(" copying COLBLK %s from %p to %p\n", Name, col1, this); htrc(" copying COLBLK %s from %p to %p\n", Name, col1, this);
if (tdbp) if (tdbp)
@@ -115,7 +115,7 @@ bool COLBLK::SetFormat(PGLOBAL, FORMAT& fmt)
{ {
fmt = Format; fmt = Format;
if (trace > 1) if (trace(2))
htrc("COLBLK: %p format=%c(%d,%d)\n", htrc("COLBLK: %p format=%c(%d,%d)\n",
this, *fmt.Type, fmt.Length, fmt.Prec); this, *fmt.Type, fmt.Length, fmt.Prec);
@@ -128,7 +128,7 @@ bool COLBLK::SetFormat(PGLOBAL, FORMAT& fmt)
/***********************************************************************/ /***********************************************************************/
bool COLBLK::Eval(PGLOBAL g) bool COLBLK::Eval(PGLOBAL g)
{ {
if (trace > 1) if (trace(2))
htrc("Col Eval: %s status=%.4X\n", Name, Status); htrc("Col Eval: %s status=%.4X\n", Name, Status);
if (!GetStatus(BUF_READ)) { if (!GetStatus(BUF_READ)) {
@@ -165,7 +165,7 @@ bool COLBLK::InitValue(PGLOBAL g)
AddStatus(BUF_READY); AddStatus(BUF_READY);
Value->SetNullable(Nullable); Value->SetNullable(Nullable);
if (trace > 1) if (trace(2))
htrc(" colp=%p type=%d value=%p coluse=%.4X status=%.4X\n", htrc(" colp=%p type=%d value=%p coluse=%.4X status=%.4X\n",
this, Buf_Type, Value, ColUse, Status); this, Buf_Type, Value, ColUse, Status);

View File

@@ -92,7 +92,7 @@ void CntEndDB(PGLOBAL g)
free(dbuserp); free(dbuserp);
if (trace) if (trace(1))
htrc("CntEndDB: Freeing Dup\n"); htrc("CntEndDB: Freeing Dup\n");
g->Activityp->Aptr = NULL; g->Activityp->Aptr = NULL;
@@ -112,14 +112,14 @@ bool CntCheckDB(PGLOBAL g, PHC handler, const char *pathname)
bool rc= false; bool rc= false;
PDBUSER dbuserp= PlgGetUser(g); PDBUSER dbuserp= PlgGetUser(g);
if (trace) { if (trace(1)) {
printf("CntCheckDB: dbuserp=%p\n", dbuserp); printf("CntCheckDB: dbuserp=%p\n", dbuserp);
} // endif trace } // endif trace
if (!dbuserp || !handler) if (!dbuserp || !handler)
return true; return true;
if (trace) if (trace(1))
printf("cat=%p oldhandler=%p newhandler=%p\n", dbuserp->Catalog, printf("cat=%p oldhandler=%p newhandler=%p\n", dbuserp->Catalog,
(dbuserp->Catalog) ? ((MYCAT*)dbuserp->Catalog)->GetHandler() : NULL, (dbuserp->Catalog) ? ((MYCAT*)dbuserp->Catalog)->GetHandler() : NULL,
handler); handler);
@@ -150,7 +150,7 @@ bool CntCheckDB(PGLOBAL g, PHC handler, const char *pathname)
/*********************************************************************/ /*********************************************************************/
sprintf(g->Message, MSG(DATABASE_LOADED), "???"); sprintf(g->Message, MSG(DATABASE_LOADED), "???");
if (trace) if (trace(1))
printf("msg=%s\n", g->Message); printf("msg=%s\n", g->Message);
return rc; return rc;
@@ -198,7 +198,7 @@ PTDB CntGetTDB(PGLOBAL g, LPCSTR name, MODE mode, PHC h)
PDBUSER dup = PlgGetUser(g); PDBUSER dup = PlgGetUser(g);
volatile PCATLG cat = (dup) ? dup->Catalog : NULL; // Safe over throw volatile PCATLG cat = (dup) ? dup->Catalog : NULL; // Safe over throw
if (trace) if (trace(1))
printf("CntGetTDB: name=%s mode=%d cat=%p\n", name, mode, cat); printf("CntGetTDB: name=%s mode=%d cat=%p\n", name, mode, cat);
if (!cat) if (!cat)
@@ -208,7 +208,7 @@ PTDB CntGetTDB(PGLOBAL g, LPCSTR name, MODE mode, PHC h)
// Get table object from the catalog // Get table object from the catalog
tabp = new(g) XTAB(name); tabp = new(g) XTAB(name);
if (trace) if (trace(1))
printf("CntGetTDB: tabp=%p\n", tabp); printf("CntGetTDB: tabp=%p\n", tabp);
// Perhaps this should be made thread safe // Perhaps this should be made thread safe
@@ -218,13 +218,13 @@ PTDB CntGetTDB(PGLOBAL g, LPCSTR name, MODE mode, PHC h)
printf("CntGetTDB: %s\n", g->Message); printf("CntGetTDB: %s\n", g->Message);
} catch (int n) { } catch (int n) {
if (trace) if (trace(1))
htrc("Exception %d: %s\n", n, g->Message); htrc("Exception %d: %s\n", n, g->Message);
} catch (const char *msg) { } catch (const char *msg) {
strcpy(g->Message, msg); strcpy(g->Message, msg);
} // end catch } // end catch
if (trace) if (trace(1))
printf("Returning tdbp=%p mode=%d\n", tdbp, mode); printf("Returning tdbp=%p mode=%d\n", tdbp, mode);
return tdbp; return tdbp;
@@ -243,7 +243,7 @@ bool CntOpenTable(PGLOBAL g, PTDB tdbp, MODE mode, char *c1, char *c2,
//PCOLUMN cp; //PCOLUMN cp;
PDBUSER dup= PlgGetUser(g); PDBUSER dup= PlgGetUser(g);
if (trace) if (trace(1))
printf("CntOpenTable: tdbp=%p mode=%d\n", tdbp, mode); printf("CntOpenTable: tdbp=%p mode=%d\n", tdbp, mode);
if (!tdbp) { if (!tdbp) {
@@ -260,7 +260,7 @@ bool CntOpenTable(PGLOBAL g, PTDB tdbp, MODE mode, char *c1, char *c2,
} else for (p = c1; *p; p += n) { } else for (p = c1; *p; p += n) {
// Allocate only used column blocks // Allocate only used column blocks
if (trace) if (trace(1))
printf("Allocating column %s\n", p); printf("Allocating column %s\n", p);
g->Message[0] = 0; // To check whether ColDB made an error message g->Message[0] = 0; // To check whether ColDB made an error message
@@ -325,7 +325,7 @@ bool CntOpenTable(PGLOBAL g, PTDB tdbp, MODE mode, char *c1, char *c2,
tdbp->SetSetCols(tdbp->GetColumns()); tdbp->SetSetCols(tdbp->GetColumns());
// Now do open the physical table // Now do open the physical table
if (trace) if (trace(1))
printf("Opening table %s in mode %d tdbp=%p\n", printf("Opening table %s in mode %d tdbp=%p\n",
tdbp->GetName(), mode, tdbp); tdbp->GetName(), mode, tdbp);
@@ -341,7 +341,7 @@ bool CntOpenTable(PGLOBAL g, PTDB tdbp, MODE mode, char *c1, char *c2,
} // endif del } // endif del
if (trace) if (trace(1))
printf("About to open the table: tdbp=%p\n", tdbp); printf("About to open the table: tdbp=%p\n", tdbp);
if (mode != MODE_ANY && mode != MODE_ALTER) { if (mode != MODE_ANY && mode != MODE_ALTER) {
@@ -356,7 +356,7 @@ bool CntOpenTable(PGLOBAL g, PTDB tdbp, MODE mode, char *c1, char *c2,
rcop = false; rcop = false;
} catch (int n) { } catch (int n) {
if (trace) if (trace(1))
htrc("Exception %d: %s\n", n, g->Message); htrc("Exception %d: %s\n", n, g->Message);
} catch (const char *msg) { } catch (const char *msg) {
strcpy(g->Message, msg); strcpy(g->Message, msg);
@@ -399,12 +399,13 @@ RCODE EvalColumns(PGLOBAL g, PTDB tdbp, bool reset, bool mrr)
} // endfor colp } // endfor colp
} catch (int n) { } catch (int n) {
if (trace) if (trace(1))
printf("Error %d reading columns: %s\n", n, g->Message); printf("Error %d reading columns: %s\n", n, g->Message);
rc = RC_FX; rc = RC_FX;
} catch (const char *msg) { } catch (const char *msg) {
strcpy(g->Message, msg); strcpy(g->Message, msg);
rc = RC_NF;
} // end catch } // end catch
return rc; return rc;
@@ -549,7 +550,7 @@ int CntCloseTable(PGLOBAL g, PTDB tdbp, bool nox, bool abort)
return rc; return rc;
} // endif !USE_OPEN } // endif !USE_OPEN
if (trace) if (trace(1))
printf("CntCloseTable: tdbp=%p mode=%d nox=%d abort=%d\n", printf("CntCloseTable: tdbp=%p mode=%d nox=%d abort=%d\n",
tdbp, tdbp->GetMode(), nox, abort); tdbp, tdbp->GetMode(), nox, abort);
@@ -579,11 +580,11 @@ int CntCloseTable(PGLOBAL g, PTDB tdbp, bool nox, bool abort)
tdbp->CloseDB(g); tdbp->CloseDB(g);
tdbp->SetAbort(false); tdbp->SetAbort(false);
if (trace > 1) if (trace(2))
printf("Table %s closed\n", tdbp->GetName()); printf("Table %s closed\n", tdbp->GetName());
if (!nox && tdbp->GetMode() != MODE_READ && tdbp->GetMode() != MODE_ANY) { if (!nox && tdbp->GetMode() != MODE_READ && tdbp->GetMode() != MODE_ANY) {
if (trace > 1) if (trace(2))
printf("About to reset opt\n"); printf("About to reset opt\n");
if (!tdbp->IsRemote()) { if (!tdbp->IsRemote()) {
@@ -603,7 +604,7 @@ int CntCloseTable(PGLOBAL g, PTDB tdbp, bool nox, bool abort)
rc = RC_FX; rc = RC_FX;
} // end catch } // end catch
if (trace > 1) if (trace(2))
htrc("Done rc=%d\n", rc); htrc("Done rc=%d\n", rc);
return (rc == RC_OK || rc == RC_INFO) ? 0 : rc; return (rc == RC_OK || rc == RC_INFO) ? 0 : rc;
@@ -922,7 +923,7 @@ int CntIndexRange(PGLOBAL g, PTDB ptdb, const uchar* *key, uint *len,
valp->SetBinValue((void*)p); valp->SetBinValue((void*)p);
#endif // !WORDS_BIGENDIAN #endif // !WORDS_BIGENDIAN
if (trace) { if (trace(1)) {
char bf[32]; char bf[32];
printf("i=%d n=%d key=%s\n", i, n, valp->GetCharString(bf)); printf("i=%d n=%d key=%s\n", i, n, valp->GetCharString(bf));
} // endif trace } // endif trace
@@ -944,7 +945,7 @@ int CntIndexRange(PGLOBAL g, PTDB ptdb, const uchar* *key, uint *len,
xbp->SetNval(n); xbp->SetNval(n);
if (trace) if (trace(1))
printf("xbp=%p Nval=%d i=%d incl=%d\n", xbp, n, i, incl[i]); printf("xbp=%p Nval=%d i=%d incl=%d\n", xbp, n, i, incl[i]);
k[i]= xbp->Range(g, i + 1, incl[i]); k[i]= xbp->Range(g, i + 1, incl[i]);
@@ -953,7 +954,7 @@ int CntIndexRange(PGLOBAL g, PTDB ptdb, const uchar* *key, uint *len,
} // endfor i } // endfor i
if (trace) if (trace(1))
printf("k1=%d k0=%d\n", k[1], k[0]); printf("k1=%d k0=%d\n", k[1], k[0]);
return k[1] - k[0]; return k[1] - k[0];

View File

@@ -90,7 +90,7 @@ int MAPFAM::GetFileLength(PGLOBAL g)
len = (To_Fb && To_Fb->Count) ? To_Fb->Length : TXTFAM::GetFileLength(g); len = (To_Fb && To_Fb->Count) ? To_Fb->Length : TXTFAM::GetFileLength(g);
if (trace) if (trace(1))
htrc("Mapped file length=%d\n", len); htrc("Mapped file length=%d\n", len);
return len; return len;
@@ -128,7 +128,7 @@ bool MAPFAM::OpenTableFile(PGLOBAL g)
&& fp->Count && fp->Mode == mode) && fp->Count && fp->Mode == mode)
break; break;
if (trace) if (trace(1))
htrc("Mapping file, fp=%p\n", fp); htrc("Mapping file, fp=%p\n", fp);
} else } else
@@ -166,7 +166,7 @@ bool MAPFAM::OpenTableFile(PGLOBAL g)
sprintf(g->Message, MSG(OPEN_MODE_ERROR), sprintf(g->Message, MSG(OPEN_MODE_ERROR),
"map", (int) rc, filename); "map", (int) rc, filename);
if (trace) if (trace(1))
htrc("CreateFileMap: %s\n", g->Message); htrc("CreateFileMap: %s\n", g->Message);
return (mode == MODE_READ && rc == ENOENT) return (mode == MODE_READ && rc == ENOENT)
@@ -227,7 +227,7 @@ bool MAPFAM::OpenTableFile(PGLOBAL g)
Fpos = Mempos = Memory; Fpos = Mempos = Memory;
Top = Memory + len; Top = Memory + len;
if (trace) if (trace(1))
htrc("fp=%p count=%d MapView=%p len=%d Top=%p\n", htrc("fp=%p count=%d MapView=%p len=%d Top=%p\n",
fp, fp->Count, Memory, len, Top); fp, fp->Count, Memory, len, Top);
@@ -407,7 +407,7 @@ int MAPFAM::DeleteRecords(PGLOBAL g, int irc)
{ {
int n; int n;
if (trace) if (trace(1))
htrc("MAP DeleteDB: irc=%d mempos=%p tobuf=%p Tpos=%p Spos=%p\n", htrc("MAP DeleteDB: irc=%d mempos=%p tobuf=%p Tpos=%p Spos=%p\n",
irc, Mempos, To_Buf, Tpos, Spos); irc, Mempos, To_Buf, Tpos, Spos);
@@ -417,7 +417,7 @@ int MAPFAM::DeleteRecords(PGLOBAL g, int irc)
/*******************************************************************/ /*******************************************************************/
Fpos = Top; Fpos = Top;
if (trace) if (trace(1))
htrc("Fpos placed at file top=%p\n", Fpos); htrc("Fpos placed at file top=%p\n", Fpos);
} // endif irc } // endif irc
@@ -435,7 +435,7 @@ int MAPFAM::DeleteRecords(PGLOBAL g, int irc)
memmove(Tpos, Spos, n); memmove(Tpos, Spos, n);
Tpos += n; Tpos += n;
if (trace) if (trace(1))
htrc("move %d bytes\n", n); htrc("move %d bytes\n", n);
} // endif n } // endif n
@@ -443,7 +443,7 @@ int MAPFAM::DeleteRecords(PGLOBAL g, int irc)
if (irc == RC_OK) { if (irc == RC_OK) {
Spos = Mempos; // New start position Spos = Mempos; // New start position
if (trace) if (trace(1))
htrc("after: Tpos=%p Spos=%p\n", Tpos, Spos); htrc("after: Tpos=%p Spos=%p\n", Tpos, Spos);
} else if (To_Fb) { // Can be NULL for deleted files } else if (To_Fb) { // Can be NULL for deleted files
@@ -473,7 +473,7 @@ int MAPFAM::DeleteRecords(PGLOBAL g, int irc)
return RC_FX; return RC_FX;
} // endif } // endif
if (trace) if (trace(1))
htrc("done, Tpos=%p newsize=%d drc=%d\n", Tpos, n, drc); htrc("done, Tpos=%p newsize=%d drc=%d\n", Tpos, n, drc);
if (!SetEndOfFile(fp->Handle)) { if (!SetEndOfFile(fp->Handle)) {
@@ -511,7 +511,7 @@ void MAPFAM::CloseTableFile(PGLOBAL g, bool)
PlugCloseFile(g, To_Fb); PlugCloseFile(g, To_Fb);
//To_Fb = NULL; // To get correct file size in Cardinality //To_Fb = NULL; // To get correct file size in Cardinality
if (trace) if (trace(1))
htrc("MAP Close: closing %s count=%d\n", htrc("MAP Close: closing %s count=%d\n",
To_File, (To_Fb) ? To_Fb->Count : 0); To_File, (To_Fb) ? To_Fb->Count : 0);

View File

@@ -203,7 +203,7 @@ PQRYRES DBFColumns(PGLOBAL g, PCSZ dp, PCSZ fn, bool info)
PQRYRES qrp; PQRYRES qrp;
PCOLRES crp; PCOLRES crp;
if (trace) if (trace(1))
htrc("DBFColumns: File %s\n", SVP(fn)); htrc("DBFColumns: File %s\n", SVP(fn));
if (!info) { if (!info) {
@@ -245,7 +245,7 @@ PQRYRES DBFColumns(PGLOBAL g, PCSZ dp, PCSZ fn, bool info)
return qrp; return qrp;
} // endif info } // endif info
if (trace) { if (trace(1)) {
htrc("Structure of %s\n", filename); htrc("Structure of %s\n", filename);
htrc("headlen=%hd reclen=%hd degree=%d\n", htrc("headlen=%hd reclen=%hd degree=%d\n",
mainhead.Headlen(), mainhead.Reclen(), fields); mainhead.Headlen(), mainhead.Reclen(), fields);
@@ -271,7 +271,7 @@ PQRYRES DBFColumns(PGLOBAL g, PCSZ dp, PCSZ fn, bool info)
} else } else
len = thisfield.Length; len = thisfield.Length;
if (trace) if (trace(1))
htrc("%-11s %c %6ld %3d %2d %3d %3d\n", htrc("%-11s %c %6ld %3d %2d %3d %3d\n",
thisfield.Name, thisfield.Type, thisfield.Offset, len, thisfield.Name, thisfield.Type, thisfield.Offset, len,
thisfield.Decimals, thisfield.Setfield, thisfield.Mdxfield); thisfield.Decimals, thisfield.Setfield, thisfield.Mdxfield);
@@ -522,14 +522,14 @@ bool DBFFAM::OpenTableFile(PGLOBAL g)
PlugSetPath(filename, To_File, Tdbp->GetPath()); PlugSetPath(filename, To_File, Tdbp->GetPath());
if (!(Stream = PlugOpenFile(g, filename, opmode))) { if (!(Stream = PlugOpenFile(g, filename, opmode))) {
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
return (mode == MODE_READ && errno == ENOENT) return (mode == MODE_READ && errno == ENOENT)
? PushWarning(g, Tdbp) : true; ? PushWarning(g, Tdbp) : true;
} // endif Stream } // endif Stream
if (trace) if (trace(1))
htrc("File %s is open in mode %s\n", filename, opmode); htrc("File %s is open in mode %s\n", filename, opmode);
To_Fb = dbuserp->Openlist; // Keep track of File block To_Fb = dbuserp->Openlist; // Keep track of File block
@@ -938,7 +938,7 @@ void DBFFAM::CloseTableFile(PGLOBAL g, bool abort)
rc = PlugCloseFile(g, To_Fb); rc = PlugCloseFile(g, To_Fb);
fin: fin:
if (trace) if (trace(1))
htrc("DBF CloseTableFile: closing %s mode=%d wrc=%d rc=%d\n", htrc("DBF CloseTableFile: closing %s mode=%d wrc=%d rc=%d\n",
To_File, mode, wrc, rc); To_File, mode, wrc, rc);

View File

@@ -322,7 +322,7 @@ int FIXFAM::ReadBuffer(PGLOBAL g)
return RC_FX; return RC_FX;
} // endif fseek } // endif fseek
if (trace > 1) if (trace(2))
htrc("File position is now %d\n", ftell(Stream)); htrc("File position is now %d\n", ftell(Stream));
if (Padded) if (Padded)
@@ -344,7 +344,7 @@ int FIXFAM::ReadBuffer(PGLOBAL g)
sprintf(g->Message, MSG(READ_ERROR), To_File, strerror(errno)); sprintf(g->Message, MSG(READ_ERROR), To_File, strerror(errno));
#endif #endif
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
return RC_FX; return RC_FX;
@@ -361,7 +361,7 @@ int FIXFAM::ReadBuffer(PGLOBAL g)
/***********************************************************************/ /***********************************************************************/
int FIXFAM::WriteBuffer(PGLOBAL g) int FIXFAM::WriteBuffer(PGLOBAL g)
{ {
if (trace > 1) if (trace(2))
htrc("FIX WriteDB: Mode=%d buf=%p line=%p Nrec=%d Rbuf=%d CurNum=%d\n", htrc("FIX WriteDB: Mode=%d buf=%p line=%p Nrec=%d Rbuf=%d CurNum=%d\n",
Tdbp->GetMode(), To_Buf, Tdbp->GetLine(), Nrec, Rbuf, CurNum); Tdbp->GetMode(), To_Buf, Tdbp->GetLine(), Nrec, Rbuf, CurNum);
@@ -374,7 +374,7 @@ int FIXFAM::WriteBuffer(PGLOBAL g)
return RC_OK; // We write only full blocks return RC_OK; // We write only full blocks
} // endif CurNum } // endif CurNum
if (trace > 1) if (trace(2))
htrc(" First line is '%.*s'\n", Lrecl - 2, To_Buf); htrc(" First line is '%.*s'\n", Lrecl - 2, To_Buf);
// Now start the writing process. // Now start the writing process.
@@ -388,7 +388,7 @@ int FIXFAM::WriteBuffer(PGLOBAL g)
CurNum = 0; CurNum = 0;
Tdbp->SetLine(To_Buf); Tdbp->SetLine(To_Buf);
if (trace > 1) if (trace(2))
htrc("write done\n"); htrc("write done\n");
} else { // Mode == MODE_UPDATE } else { // Mode == MODE_UPDATE
@@ -431,7 +431,7 @@ int FIXFAM::DeleteRecords(PGLOBAL g, int irc)
/* file, and at the end erase all trailing records. */ /* file, and at the end erase all trailing records. */
/* This will be experimented. */ /* This will be experimented. */
/*********************************************************************/ /*********************************************************************/
if (trace > 1) if (trace(2))
htrc("DOS DeleteDB: rc=%d UseTemp=%d Fpos=%d Tpos=%d Spos=%d\n", htrc("DOS DeleteDB: rc=%d UseTemp=%d Fpos=%d Tpos=%d Spos=%d\n",
irc, UseTemp, Fpos, Tpos, Spos); irc, UseTemp, Fpos, Tpos, Spos);
@@ -441,7 +441,7 @@ int FIXFAM::DeleteRecords(PGLOBAL g, int irc)
/*******************************************************************/ /*******************************************************************/
Fpos = Tdbp->Cardinality(g); Fpos = Tdbp->Cardinality(g);
if (trace > 1) if (trace(2))
htrc("Fpos placed at file end=%d\n", Fpos); htrc("Fpos placed at file end=%d\n", Fpos);
} else // Fpos is the deleted line position } else // Fpos is the deleted line position
@@ -491,7 +491,7 @@ int FIXFAM::DeleteRecords(PGLOBAL g, int irc)
OldBlk = -2; // To force fseek to be executed on next block OldBlk = -2; // To force fseek to be executed on next block
} // endif moved } // endif moved
if (trace > 1) if (trace(2))
htrc("after: Tpos=%d Spos=%d\n", Tpos, Spos); htrc("after: Tpos=%d Spos=%d\n", Tpos, Spos);
} else { } else {
@@ -540,7 +540,7 @@ int FIXFAM::DeleteRecords(PGLOBAL g, int irc)
close(h); close(h);
if (trace > 1) if (trace(2))
htrc("done, h=%d irc=%d\n", h, irc); htrc("done, h=%d irc=%d\n", h, irc);
} // endif UseTemp } // endif UseTemp
@@ -572,7 +572,7 @@ bool FIXFAM::MoveIntermediateLines(PGLOBAL g, bool *b)
req = (size_t)MY_MIN(n, Dbflen); req = (size_t)MY_MIN(n, Dbflen);
len = fread(DelBuf, Lrecl, req, Stream); len = fread(DelBuf, Lrecl, req, Stream);
if (trace > 1) if (trace(2))
htrc("after read req=%d len=%d\n", req, len); htrc("after read req=%d len=%d\n", req, len);
if (len != req) { if (len != req) {
@@ -591,13 +591,13 @@ bool FIXFAM::MoveIntermediateLines(PGLOBAL g, bool *b)
return true; return true;
} // endif } // endif
if (trace > 1) if (trace(2))
htrc("after write pos=%d\n", ftell(Stream)); htrc("after write pos=%d\n", ftell(Stream));
Tpos += (int)req; Tpos += (int)req;
Spos += (int)req; Spos += (int)req;
if (trace > 1) if (trace(2))
htrc("loop: Tpos=%d Spos=%d\n", Tpos, Spos); htrc("loop: Tpos=%d Spos=%d\n", Tpos, Spos);
*b = true; *b = true;
@@ -648,7 +648,7 @@ void FIXFAM::CloseTableFile(PGLOBAL g, bool abort)
rc = PlugCloseFile(g, To_Fb); rc = PlugCloseFile(g, To_Fb);
fin: fin:
if (trace) if (trace(1))
htrc("FIX CloseTableFile: closing %s mode=%d wrc=%d rc=%d\n", htrc("FIX CloseTableFile: closing %s mode=%d wrc=%d rc=%d\n",
To_File, mode, wrc, rc); To_File, mode, wrc, rc);
@@ -718,7 +718,7 @@ int BGXFAM::BigRead(PGLOBAL g __attribute__((unused)),
DWORD nbr, drc, len = (DWORD)req; DWORD nbr, drc, len = (DWORD)req;
bool brc = ReadFile(h, inbuf, len, &nbr, NULL); bool brc = ReadFile(h, inbuf, len, &nbr, NULL);
if (trace > 1) if (trace(2))
htrc("after read req=%d brc=%d nbr=%d\n", req, brc, nbr); htrc("after read req=%d brc=%d nbr=%d\n", req, brc, nbr);
if (!brc) { if (!brc) {
@@ -730,7 +730,7 @@ int BGXFAM::BigRead(PGLOBAL g __attribute__((unused)),
(LPTSTR)buf, sizeof(buf), NULL); (LPTSTR)buf, sizeof(buf), NULL);
sprintf(g->Message, MSG(READ_ERROR), To_File, buf); sprintf(g->Message, MSG(READ_ERROR), To_File, buf);
if (trace > 1) if (trace(2))
htrc("BIGREAD: %s\n", g->Message); htrc("BIGREAD: %s\n", g->Message);
rc = -1; rc = -1;
@@ -757,7 +757,7 @@ bool BGXFAM::BigWrite(PGLOBAL g, HANDLE h, void *inbuf, int req)
DWORD nbw, drc, len = (DWORD)req; DWORD nbw, drc, len = (DWORD)req;
bool brc = WriteFile(h, inbuf, len, &nbw, NULL); bool brc = WriteFile(h, inbuf, len, &nbw, NULL);
if (trace > 1) if (trace(2))
htrc("after write req=%d brc=%d nbw=%d\n", req, brc, nbw); htrc("after write req=%d brc=%d nbw=%d\n", req, brc, nbw);
if (!brc || nbw != len) { if (!brc || nbw != len) {
@@ -775,7 +775,7 @@ bool BGXFAM::BigWrite(PGLOBAL g, HANDLE h, void *inbuf, int req)
sprintf(g->Message, MSG(WRITE_STRERROR), fn, buf); sprintf(g->Message, MSG(WRITE_STRERROR), fn, buf);
if (trace > 1) if (trace(2))
htrc("BIGWRITE: nbw=%d len=%d errno=%d %s\n", htrc("BIGWRITE: nbw=%d len=%d errno=%d %s\n",
nbw, len, drc, g->Message); nbw, len, drc, g->Message);
@@ -790,7 +790,7 @@ bool BGXFAM::BigWrite(PGLOBAL g, HANDLE h, void *inbuf, int req)
sprintf(g->Message, MSG(WRITE_STRERROR), fn, strerror(errno)); sprintf(g->Message, MSG(WRITE_STRERROR), fn, strerror(errno));
if (trace > 1) if (trace(2))
htrc("BIGWRITE: nbw=%d len=%d errno=%d %s\n", htrc("BIGWRITE: nbw=%d len=%d errno=%d %s\n",
nbw, len, errno, g->Message); nbw, len, errno, g->Message);
@@ -828,7 +828,7 @@ bool BGXFAM::OpenTableFile(PGLOBAL g)
PlugSetPath(filename, To_File, Tdbp->GetPath()); PlugSetPath(filename, To_File, Tdbp->GetPath());
if (trace) if (trace(1))
htrc("OpenTableFile: filename=%s mode=%d\n", filename, mode); htrc("OpenTableFile: filename=%s mode=%d\n", filename, mode);
#if defined(__WIN__) #if defined(__WIN__)
@@ -888,7 +888,7 @@ bool BGXFAM::OpenTableFile(PGLOBAL g)
} else } else
rc = 0; rc = 0;
if (trace > 1) if (trace(2))
htrc(" rc=%d access=%p share=%p creation=%d handle=%p fn=%s\n", htrc(" rc=%d access=%p share=%p creation=%d handle=%p fn=%s\n",
rc, access, share, creation, Hfile, filename); rc, access, share, creation, Hfile, filename);
@@ -942,7 +942,7 @@ bool BGXFAM::OpenTableFile(PGLOBAL g)
} else } else
rc = 0; rc = 0;
if (trace > 1) if (trace(2))
htrc(" rc=%d oflag=%p tmode=%p handle=%p fn=%s\n", htrc(" rc=%d oflag=%p tmode=%p handle=%p fn=%s\n",
rc, oflag, tmode, Hfile, filename); rc, oflag, tmode, Hfile, filename);
@@ -1026,11 +1026,11 @@ int BGXFAM::Cardinality(PGLOBAL g)
if (Hfile == INVALID_HANDLE_VALUE) { if (Hfile == INVALID_HANDLE_VALUE) {
int h = open64(filename, O_RDONLY, 0); int h = open64(filename, O_RDONLY, 0);
if (trace) if (trace(1))
htrc(" h=%d\n", h); htrc(" h=%d\n", h);
if (h == INVALID_HANDLE_VALUE) { if (h == INVALID_HANDLE_VALUE) {
if (trace) if (trace(1))
htrc(" errno=%d ENOENT=%d\n", errno, ENOENT); htrc(" errno=%d ENOENT=%d\n", errno, ENOENT);
if (errno != ENOENT) { if (errno != ENOENT) {
@@ -1074,7 +1074,7 @@ int BGXFAM::Cardinality(PGLOBAL g)
} else } else
card = (int)(fsize / (BIGINT)Lrecl); // Fixed length file card = (int)(fsize / (BIGINT)Lrecl); // Fixed length file
if (trace) if (trace(1))
htrc(" Computed max_K=%d fsize=%lf lrecl=%d\n", htrc(" Computed max_K=%d fsize=%lf lrecl=%d\n",
card, (double)fsize, Lrecl); card, (double)fsize, Lrecl);
@@ -1181,7 +1181,7 @@ int BGXFAM::ReadBuffer(PGLOBAL g)
if (BigSeek(g, Hfile, (BIGINT)Fpos * (BIGINT)Lrecl)) if (BigSeek(g, Hfile, (BIGINT)Fpos * (BIGINT)Lrecl))
return RC_FX; return RC_FX;
if (trace > 1) if (trace(2))
htrc("File position is now %d\n", Fpos); htrc("File position is now %d\n", Fpos);
nbr = BigRead(g, Hfile, To_Buf, (Padded) ? Blksize : Lrecl * Nrec); nbr = BigRead(g, Hfile, To_Buf, (Padded) ? Blksize : Lrecl * Nrec);
@@ -1205,7 +1205,7 @@ int BGXFAM::ReadBuffer(PGLOBAL g)
/***********************************************************************/ /***********************************************************************/
int BGXFAM::WriteBuffer(PGLOBAL g) int BGXFAM::WriteBuffer(PGLOBAL g)
{ {
if (trace > 1) if (trace(2))
htrc("BIG WriteDB: Mode=%d buf=%p line=%p Nrec=%d Rbuf=%d CurNum=%d\n", htrc("BIG WriteDB: Mode=%d buf=%p line=%p Nrec=%d Rbuf=%d CurNum=%d\n",
Tdbp->GetMode(), To_Buf, Tdbp->GetLine(), Nrec, Rbuf, CurNum); Tdbp->GetMode(), To_Buf, Tdbp->GetLine(), Nrec, Rbuf, CurNum);
@@ -1218,7 +1218,7 @@ int BGXFAM::WriteBuffer(PGLOBAL g)
return RC_OK; // We write only full blocks return RC_OK; // We write only full blocks
} // endif CurNum } // endif CurNum
if (trace > 1) if (trace(2))
htrc(" First line is '%.*s'\n", Lrecl - 2, To_Buf); htrc(" First line is '%.*s'\n", Lrecl - 2, To_Buf);
// Now start the writing process. // Now start the writing process.
@@ -1229,7 +1229,7 @@ int BGXFAM::WriteBuffer(PGLOBAL g)
CurNum = 0; CurNum = 0;
Tdbp->SetLine(To_Buf); Tdbp->SetLine(To_Buf);
if (trace > 1) if (trace(2))
htrc("write done\n"); htrc("write done\n");
} else { // Mode == MODE_UPDATE } else { // Mode == MODE_UPDATE
@@ -1270,7 +1270,7 @@ int BGXFAM::DeleteRecords(PGLOBAL g, int irc)
/* file, and at the end erase all trailing records. */ /* file, and at the end erase all trailing records. */
/* This will be experimented. */ /* This will be experimented. */
/*********************************************************************/ /*********************************************************************/
if (trace > 1) if (trace(2))
htrc("BGX DeleteDB: rc=%d UseTemp=%d Fpos=%d Tpos=%d Spos=%d\n", htrc("BGX DeleteDB: rc=%d UseTemp=%d Fpos=%d Tpos=%d Spos=%d\n",
irc, UseTemp, Fpos, Tpos, Spos); irc, UseTemp, Fpos, Tpos, Spos);
@@ -1280,7 +1280,7 @@ int BGXFAM::DeleteRecords(PGLOBAL g, int irc)
/*******************************************************************/ /*******************************************************************/
Fpos = Tdbp->Cardinality(g); Fpos = Tdbp->Cardinality(g);
if (trace > 1) if (trace(2))
htrc("Fpos placed at file end=%d\n", Fpos); htrc("Fpos placed at file end=%d\n", Fpos);
} else // Fpos is the deleted line position } else // Fpos is the deleted line position
@@ -1318,7 +1318,7 @@ int BGXFAM::DeleteRecords(PGLOBAL g, int irc)
return RC_FX; return RC_FX;
if (irc == RC_OK) { if (irc == RC_OK) {
if (trace) if (trace(1))
assert(Spos == Fpos); assert(Spos == Fpos);
Spos++; // New start position is on next line Spos++; // New start position is on next line
@@ -1330,7 +1330,7 @@ int BGXFAM::DeleteRecords(PGLOBAL g, int irc)
OldBlk = -2; // To force fseek to be executed on next block OldBlk = -2; // To force fseek to be executed on next block
} // endif moved } // endif moved
if (trace > 1) if (trace(2))
htrc("after: Tpos=%d Spos=%d\n", Tpos, Spos); htrc("after: Tpos=%d Spos=%d\n", Tpos, Spos);
} else if (irc != RC_OK) { } else if (irc != RC_OK) {
@@ -1459,7 +1459,7 @@ bool BGXFAM::MoveIntermediateLines(PGLOBAL g, bool *b)
Tpos += (int)req; Tpos += (int)req;
Spos += (int)req; Spos += (int)req;
if (trace > 1) if (trace(2))
htrc("loop: Tpos=%d Spos=%d\n", Tpos, Spos); htrc("loop: Tpos=%d Spos=%d\n", Tpos, Spos);
*b = true; *b = true;
@@ -1510,7 +1510,7 @@ void BGXFAM::CloseTableFile(PGLOBAL g, bool abort)
rc = PlugCloseFile(g, To_Fb); rc = PlugCloseFile(g, To_Fb);
fin: fin:
if (trace) if (trace(1))
htrc("BGX CloseTableFile: closing %s mode=%d wrc=%d rc=%d\n", htrc("BGX CloseTableFile: closing %s mode=%d wrc=%d rc=%d\n",
To_File, mode, wrc, rc); To_File, mode, wrc, rc);

View File

@@ -203,7 +203,7 @@ bool GZFAM::AllocateBuffer(PGLOBAL g)
Buflen = Lrecl + 2; // Lrecl does not include CRLF Buflen = Lrecl + 2; // Lrecl does not include CRLF
//Buflen *= ((Mode == MODE_DELETE) ? DOS_BUFF_LEN : 1); NIY //Buflen *= ((Mode == MODE_DELETE) ? DOS_BUFF_LEN : 1); NIY
if (trace) if (trace(1))
htrc("SubAllocating a buffer of %d bytes\n", Buflen); htrc("SubAllocating a buffer of %d bytes\n", Buflen);
To_Buf = (char*)PlugSubAlloc(g, NULL, Buflen); To_Buf = (char*)PlugSubAlloc(g, NULL, Buflen);
@@ -347,7 +347,7 @@ int GZFAM::ReadBuffer(PGLOBAL g)
} else } else
rc = Zerror(g); rc = Zerror(g);
if (trace > 1) if (trace(2))
htrc(" Read: '%s' rc=%d\n", To_Buf, rc); htrc(" Read: '%s' rc=%d\n", To_Buf, rc);
return rc; return rc;
@@ -389,7 +389,7 @@ void GZFAM::CloseTableFile(PGLOBAL, bool)
{ {
int rc = gzclose(Zfile); int rc = gzclose(Zfile);
if (trace) if (trace(1))
htrc("GZ CloseDB: closing %s rc=%d\n", To_File, rc); htrc("GZ CloseDB: closing %s rc=%d\n", To_File, rc);
Zfile = NULL; // So we can know whether table is open Zfile = NULL; // So we can know whether table is open
@@ -702,7 +702,7 @@ void ZBKFAM::CloseTableFile(PGLOBAL g, bool)
} else } else
rc = gzclose(Zfile); rc = gzclose(Zfile);
if (trace) if (trace(1))
htrc("GZ CloseDB: closing %s rc=%d\n", To_File, rc); htrc("GZ CloseDB: closing %s rc=%d\n", To_File, rc);
Zfile = NULL; // So we can know whether table is open Zfile = NULL; // So we can know whether table is open
@@ -1382,7 +1382,7 @@ void ZLBFAM::CloseTableFile(PGLOBAL g, bool)
} else } else
rc = fclose(Stream); rc = fclose(Stream);
if (trace) if (trace(1))
htrc("ZLB CloseTableFile: closing %s mode=%d rc=%d\n", htrc("ZLB CloseTableFile: closing %s mode=%d rc=%d\n",
To_File, Tdbp->GetMode(), rc); To_File, Tdbp->GetMode(), rc);
@@ -1408,7 +1408,7 @@ void ZLBFAM::Rewind(void)
rewind(Stream); rewind(Stream);
if (!(st = fread(Zlenp, sizeof(int), 1, Stream)) && trace) if (!(st = fread(Zlenp, sizeof(int), 1, Stream)) && trace(1))
htrc("fread error %d in Rewind", errno); htrc("fread error %d in Rewind", errno);
fseek(Stream, *Zlenp + sizeof(int), SEEK_SET); fseek(Stream, *Zlenp + sizeof(int), SEEK_SET);

View File

@@ -194,12 +194,12 @@ int TXTFAM::GetFileLength(PGLOBAL g)
PlugSetPath(filename, To_File, Tdbp->GetPath()); PlugSetPath(filename, To_File, Tdbp->GetPath());
h= global_open(g, MSGID_OPEN_MODE_STRERROR, filename, _O_RDONLY); h= global_open(g, MSGID_OPEN_MODE_STRERROR, filename, _O_RDONLY);
if (trace) if (trace(1))
htrc("GetFileLength: fn=%s h=%d\n", filename, h); htrc("GetFileLength: fn=%s h=%d\n", filename, h);
if (h == -1) { if (h == -1) {
if (errno != ENOENT) { if (errno != ENOENT) {
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
len = -1; len = -1;
@@ -249,7 +249,7 @@ int TXTFAM::Cardinality(PGLOBAL g)
} // endif Padded } // endif Padded
if (trace) if (trace(1))
htrc(" Computed max_K=%d Filen=%d lrecl=%d\n", htrc(" Computed max_K=%d Filen=%d lrecl=%d\n",
card, len, Lrecl); card, len, Lrecl);
@@ -390,7 +390,7 @@ int TXTFAM::UpdateSortedRows(PGLOBAL g)
return RC_OK; return RC_OK;
err: err:
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
return RC_FX; return RC_FX;
@@ -439,7 +439,7 @@ int TXTFAM::DeleteSortedRows(PGLOBAL g)
return RC_OK; return RC_OK;
err: err:
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
return RC_FX; return RC_FX;
@@ -512,7 +512,7 @@ int DOSFAM::GetFileLength(PGLOBAL g)
if ((len = _filelength(_fileno(Stream))) < 0) if ((len = _filelength(_fileno(Stream))) < 0)
sprintf(g->Message, MSG(FILELEN_ERROR), "_filelength", To_File); sprintf(g->Message, MSG(FILELEN_ERROR), "_filelength", To_File);
if (trace) if (trace(1))
htrc("File length=%d\n", len); htrc("File length=%d\n", len);
return len; return len;
@@ -598,14 +598,14 @@ bool DOSFAM::OpenTableFile(PGLOBAL g)
PlugSetPath(filename, To_File, Tdbp->GetPath()); PlugSetPath(filename, To_File, Tdbp->GetPath());
if (!(Stream = PlugOpenFile(g, filename, opmode))) { if (!(Stream = PlugOpenFile(g, filename, opmode))) {
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
return (mode == MODE_READ && errno == ENOENT) return (mode == MODE_READ && errno == ENOENT)
? PushWarning(g, Tdbp) : true; ? PushWarning(g, Tdbp) : true;
} // endif Stream } // endif Stream
if (trace) if (trace(1))
htrc("File %s open Stream=%p mode=%s\n", filename, Stream, opmode); htrc("File %s open Stream=%p mode=%s\n", filename, Stream, opmode);
To_Fb = dbuserp->Openlist; // Keep track of File block To_Fb = dbuserp->Openlist; // Keep track of File block
@@ -628,7 +628,7 @@ bool DOSFAM::AllocateBuffer(PGLOBAL g)
// Lrecl does not include line ending // Lrecl does not include line ending
Buflen = Lrecl + Ending + ((Bin) ? 1 : 0) + 1; // Sergei Buflen = Lrecl + Ending + ((Bin) ? 1 : 0) + 1; // Sergei
if (trace) if (trace(1))
htrc("SubAllocating a buffer of %d bytes\n", Buflen); htrc("SubAllocating a buffer of %d bytes\n", Buflen);
To_Buf = (char*)PlugSubAlloc(g, NULL, Buflen); To_Buf = (char*)PlugSubAlloc(g, NULL, Buflen);
@@ -768,7 +768,7 @@ int DOSFAM::ReadBuffer(PGLOBAL g)
if (!Stream) if (!Stream)
return RC_EF; return RC_EF;
if (trace > 1) if (trace(2))
htrc("ReadBuffer: Tdbp=%p To_Line=%p Placed=%d\n", htrc("ReadBuffer: Tdbp=%p To_Line=%p Placed=%d\n",
Tdbp, Tdbp->To_Line, Placed); Tdbp, Tdbp->To_Line, Placed);
@@ -782,7 +782,7 @@ int DOSFAM::ReadBuffer(PGLOBAL g)
CurBlk = (int)Rows++; CurBlk = (int)Rows++;
if (trace > 1) if (trace(2))
htrc("ReadBuffer: CurBlk=%d\n", CurBlk); htrc("ReadBuffer: CurBlk=%d\n", CurBlk);
/********************************************************************/ /********************************************************************/
@@ -803,14 +803,14 @@ int DOSFAM::ReadBuffer(PGLOBAL g)
} else } else
Placed = false; Placed = false;
if (trace > 1) if (trace(2))
htrc(" About to read: stream=%p To_Buf=%p Buflen=%d\n", htrc(" About to read: stream=%p To_Buf=%p Buflen=%d\n",
Stream, To_Buf, Buflen); Stream, To_Buf, Buflen);
if (fgets(To_Buf, Buflen, Stream)) { if (fgets(To_Buf, Buflen, Stream)) {
p = To_Buf + strlen(To_Buf) - 1; p = To_Buf + strlen(To_Buf) - 1;
if (trace > 1) if (trace(2))
htrc(" Read: To_Buf=%p p=%c\n", To_Buf, To_Buf, p); htrc(" Read: To_Buf=%p p=%c\n", To_Buf, To_Buf, p);
#if defined(__WIN__) #if defined(__WIN__)
@@ -838,7 +838,7 @@ int DOSFAM::ReadBuffer(PGLOBAL g)
} else if (*p == '\n') } else if (*p == '\n')
*p = '\0'; // Eliminate ending new-line character *p = '\0'; // Eliminate ending new-line character
if (trace > 1) if (trace(2))
htrc(" To_Buf='%s'\n", To_Buf); htrc(" To_Buf='%s'\n", To_Buf);
strcpy(Tdbp->To_Line, To_Buf); strcpy(Tdbp->To_Line, To_Buf);
@@ -853,13 +853,13 @@ int DOSFAM::ReadBuffer(PGLOBAL g)
sprintf(g->Message, MSG(READ_ERROR), To_File, strerror(0)); sprintf(g->Message, MSG(READ_ERROR), To_File, strerror(0));
#endif #endif
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
rc = RC_FX; rc = RC_FX;
} // endif's fgets } // endif's fgets
if (trace > 1) if (trace(2))
htrc("ReadBuffer: rc=%d\n", rc); htrc("ReadBuffer: rc=%d\n", rc);
IsRead = true; IsRead = true;
@@ -895,7 +895,7 @@ int DOSFAM::WriteBuffer(PGLOBAL g)
/*******************************************************************/ /*******************************************************************/
curpos = ftell(Stream); curpos = ftell(Stream);
if (trace) if (trace(1))
htrc("Last : %d cur: %d\n", Fpos, curpos); htrc("Last : %d cur: %d\n", Fpos, curpos);
if (UseTemp) { if (UseTemp) {
@@ -937,7 +937,7 @@ int DOSFAM::WriteBuffer(PGLOBAL g)
return RC_FX; return RC_FX;
} // endif } // endif
if (trace) if (trace(1))
htrc("write done\n"); htrc("write done\n");
return RC_OK; return RC_OK;
@@ -960,7 +960,7 @@ int DOSFAM::DeleteRecords(PGLOBAL g, int irc)
/* file, and at the end erase all trailing records. */ /* file, and at the end erase all trailing records. */
/* This will be experimented. */ /* This will be experimented. */
/*********************************************************************/ /*********************************************************************/
if (trace) if (trace(1))
htrc( htrc(
"DOS DeleteDB: rc=%d UseTemp=%d curpos=%d Fpos=%d Tpos=%d Spos=%d\n", "DOS DeleteDB: rc=%d UseTemp=%d curpos=%d Fpos=%d Tpos=%d Spos=%d\n",
irc, UseTemp, curpos, Fpos, Tpos, Spos); irc, UseTemp, curpos, Fpos, Tpos, Spos);
@@ -972,7 +972,7 @@ int DOSFAM::DeleteRecords(PGLOBAL g, int irc)
fseek(Stream, 0, SEEK_END); fseek(Stream, 0, SEEK_END);
Fpos = ftell(Stream); Fpos = ftell(Stream);
if (trace) if (trace(1))
htrc("Fpos placed at file end=%d\n", Fpos); htrc("Fpos placed at file end=%d\n", Fpos);
} // endif irc } // endif irc
@@ -1015,7 +1015,7 @@ int DOSFAM::DeleteRecords(PGLOBAL g, int irc)
Spos = GetNextPos(); // New start position Spos = GetNextPos(); // New start position
if (trace) if (trace(1))
htrc("after: Tpos=%d Spos=%d\n", Tpos, Spos); htrc("after: Tpos=%d Spos=%d\n", Tpos, Spos);
} else { } else {
@@ -1058,7 +1058,7 @@ int DOSFAM::DeleteRecords(PGLOBAL g, int irc)
close(h); close(h);
if (trace) if (trace(1))
htrc("done, h=%d irc=%d\n", h, irc); htrc("done, h=%d irc=%d\n", h, irc);
} // endif !UseTemp } // endif !UseTemp
@@ -1083,7 +1083,7 @@ bool DOSFAM::OpenTempFile(PGLOBAL g)
strcat(PlugRemoveType(tempname, tempname), ".t"); strcat(PlugRemoveType(tempname, tempname), ".t");
if (!(T_Stream = PlugOpenFile(g, tempname, "wb"))) { if (!(T_Stream = PlugOpenFile(g, tempname, "wb"))) {
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
rc = true; rc = true;
@@ -1112,7 +1112,7 @@ bool DOSFAM::MoveIntermediateLines(PGLOBAL g, bool *b)
req = (size_t)MY_MIN(n, Dbflen); req = (size_t)MY_MIN(n, Dbflen);
len = fread(DelBuf, 1, req, Stream); len = fread(DelBuf, 1, req, Stream);
if (trace) if (trace(1))
htrc("after read req=%d len=%d\n", req, len); htrc("after read req=%d len=%d\n", req, len);
if (len != req) { if (len != req) {
@@ -1131,13 +1131,13 @@ bool DOSFAM::MoveIntermediateLines(PGLOBAL g, bool *b)
return true; return true;
} // endif } // endif
if (trace) if (trace(1))
htrc("after write pos=%d\n", ftell(Stream)); htrc("after write pos=%d\n", ftell(Stream));
Tpos += (int)req; Tpos += (int)req;
Spos += (int)req; Spos += (int)req;
if (trace) if (trace(1))
htrc("loop: Tpos=%d Spos=%d\n", Tpos, Spos); htrc("loop: Tpos=%d Spos=%d\n", Tpos, Spos);
*b = true; *b = true;
@@ -1217,7 +1217,7 @@ void DOSFAM::CloseTableFile(PGLOBAL g, bool abort)
} else { } else {
rc = PlugCloseFile(g, To_Fb); rc = PlugCloseFile(g, To_Fb);
if (trace) if (trace(1))
htrc("DOS Close: closing %s rc=%d\n", To_File, rc); htrc("DOS Close: closing %s rc=%d\n", To_File, rc);
} // endif UseTemp } // endif UseTemp
@@ -1453,7 +1453,7 @@ int BLKFAM::ReadBuffer(PGLOBAL g)
// Calculate the length of block to read // Calculate the length of block to read
BlkLen = BlkPos[CurBlk + 1] - BlkPos[CurBlk]; BlkLen = BlkPos[CurBlk + 1] - BlkPos[CurBlk];
if (trace) if (trace(1))
htrc("File position is now %d\n", ftell(Stream)); htrc("File position is now %d\n", ftell(Stream));
// Read the entire next block // Read the entire next block
@@ -1487,7 +1487,7 @@ int BLKFAM::ReadBuffer(PGLOBAL g)
sprintf(g->Message, MSG(READ_ERROR), To_File, strerror(errno)); sprintf(g->Message, MSG(READ_ERROR), To_File, strerror(errno));
#endif #endif
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
return RC_FX; return RC_FX;
@@ -1637,7 +1637,7 @@ void BLKFAM::CloseTableFile(PGLOBAL g, bool abort)
rc = PlugCloseFile(g, To_Fb); rc = PlugCloseFile(g, To_Fb);
if (trace) if (trace(1))
htrc("BLK CloseTableFile: closing %s mode=%d wrc=%d rc=%d\n", htrc("BLK CloseTableFile: closing %s mode=%d wrc=%d rc=%d\n",
To_File, Tdbp->GetMode(), wrc, rc); To_File, Tdbp->GetMode(), wrc, rc);

View File

@@ -336,7 +336,7 @@ int VCTFAM::Cardinality(PGLOBAL g)
else else
sprintf(g->Message, MSG(NOT_FIXED_LEN), To_File, len, clen); sprintf(g->Message, MSG(NOT_FIXED_LEN), To_File, len, clen);
if (trace) if (trace(1))
htrc(" Computed max_K=%d Filen=%d Clen=%d\n", card, len, clen); htrc(" Computed max_K=%d Filen=%d Clen=%d\n", card, len, clen);
} else } else
@@ -469,14 +469,14 @@ bool VCTFAM::OpenTableFile(PGLOBAL g)
PlugSetPath(filename, To_File, Tdbp->GetPath()); PlugSetPath(filename, To_File, Tdbp->GetPath());
if (!(Stream = PlugOpenFile(g, filename, opmode))) { if (!(Stream = PlugOpenFile(g, filename, opmode))) {
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
return (mode == MODE_READ && errno == ENOENT) return (mode == MODE_READ && errno == ENOENT)
? PushWarning(g, Tdbp) : true; ? PushWarning(g, Tdbp) : true;
} // endif Stream } // endif Stream
if (trace) if (trace(1))
htrc("File %s is open in mode %s\n", filename, opmode); htrc("File %s is open in mode %s\n", filename, opmode);
To_Fb = dbuserp->Openlist; // Keep track of File block To_Fb = dbuserp->Openlist; // Keep track of File block
@@ -581,7 +581,7 @@ bool VCTFAM::InitInsert(PGLOBAL g)
cp->ReadBlock(g); cp->ReadBlock(g);
} catch (int n) { } catch (int n) {
if (trace) if (trace(1))
htrc("Exception %d: %s\n", n, g->Message); htrc("Exception %d: %s\n", n, g->Message);
rc = true; rc = true;
} catch (const char *msg) { } catch (const char *msg) {
@@ -652,7 +652,7 @@ int VCTFAM::ReadBuffer(PGLOBAL g)
OldBlk = CurBlk; // Last block actually read OldBlk = CurBlk; // Last block actually read
} // endif oldblk } // endif oldblk
if (trace) if (trace(1))
htrc(" Read: CurNum=%d CurBlk=%d rc=%d\n", CurNum, CurBlk, RC_OK); htrc(" Read: CurNum=%d CurBlk=%d rc=%d\n", CurNum, CurBlk, RC_OK);
return rc; return rc;
@@ -663,7 +663,7 @@ int VCTFAM::ReadBuffer(PGLOBAL g)
/***********************************************************************/ /***********************************************************************/
int VCTFAM::WriteBuffer(PGLOBAL g) int VCTFAM::WriteBuffer(PGLOBAL g)
{ {
if (trace) if (trace(1))
htrc("VCT WriteBuffer: R%d Mode=%d CurNum=%d CurBlk=%d\n", htrc("VCT WriteBuffer: R%d Mode=%d CurNum=%d CurBlk=%d\n",
Tdbp->GetTdb_No(), Tdbp->GetMode(), CurNum, CurBlk); Tdbp->GetTdb_No(), Tdbp->GetMode(), CurNum, CurBlk);
@@ -756,7 +756,7 @@ int VCTFAM::DeleteRecords(PGLOBAL g, int irc)
{ {
bool eof = false; bool eof = false;
if (trace) if (trace(1))
htrc("VCT DeleteDB: rc=%d UseTemp=%d Fpos=%d Tpos=%d Spos=%d\n", htrc("VCT DeleteDB: rc=%d UseTemp=%d Fpos=%d Tpos=%d Spos=%d\n",
irc, UseTemp, Fpos, Tpos, Spos); irc, UseTemp, Fpos, Tpos, Spos);
@@ -766,7 +766,7 @@ int VCTFAM::DeleteRecords(PGLOBAL g, int irc)
/*******************************************************************/ /*******************************************************************/
Fpos = (Block - 1) * Nrec + Last; Fpos = (Block - 1) * Nrec + Last;
if (trace) if (trace(1))
htrc("Fpos placed at file end=%d\n", Fpos); htrc("Fpos placed at file end=%d\n", Fpos);
eof = UseTemp && !MaxBlk; eof = UseTemp && !MaxBlk;
@@ -807,7 +807,7 @@ int VCTFAM::DeleteRecords(PGLOBAL g, int irc)
#endif #endif
Spos++; // New start position is on next line Spos++; // New start position is on next line
if (trace) if (trace(1))
htrc("after: Tpos=%d Spos=%d\n", Tpos, Spos); htrc("after: Tpos=%d Spos=%d\n", Tpos, Spos);
} else { } else {
@@ -856,7 +856,7 @@ int VCTFAM::DeleteRecords(PGLOBAL g, int irc)
close(h); close(h);
if (trace) if (trace(1))
htrc("done, h=%d irc=%d\n", h, irc); htrc("done, h=%d irc=%d\n", h, irc);
} else } else
@@ -899,7 +899,7 @@ bool VCTFAM::OpenTempFile(PGLOBAL g)
opmode = "wb"; opmode = "wb";
if (!(T_Stream = PlugOpenFile(g, tempname, opmode))) { if (!(T_Stream = PlugOpenFile(g, tempname, opmode))) {
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
rc = true; rc = true;
@@ -947,7 +947,7 @@ bool VCTFAM::MoveIntermediateLines(PGLOBAL g, bool *b)
len = fread(To_Buf, Clens[i], req, Stream); len = fread(To_Buf, Clens[i], req, Stream);
if (trace) if (trace(1))
htrc("after read req=%d len=%d\n", req, len); htrc("after read req=%d len=%d\n", req, len);
if (len != req) { if (len != req) {
@@ -976,7 +976,7 @@ bool VCTFAM::MoveIntermediateLines(PGLOBAL g, bool *b)
} // endif UseTemp } // endif UseTemp
if (trace) if (trace(1))
htrc("after write pos=%d\n", ftell(Stream)); htrc("after write pos=%d\n", ftell(Stream));
} // endfor i } // endfor i
@@ -1007,7 +1007,7 @@ bool VCTFAM::MoveIntermediateLines(PGLOBAL g, bool *b)
} // endif UseTemp } // endif UseTemp
if (trace) if (trace(1))
htrc("loop: Tpos=%d Spos=%d\n", Tpos, Spos); htrc("loop: Tpos=%d Spos=%d\n", Tpos, Spos);
} // endfor n } // endfor n
@@ -1144,7 +1144,7 @@ void VCTFAM::CloseTableFile(PGLOBAL g, bool abort)
if (!(UseTemp && T_Stream)) if (!(UseTemp && T_Stream))
rc = PlugCloseFile(g, To_Fb); rc = PlugCloseFile(g, To_Fb);
if (trace) if (trace(1))
htrc("VCT CloseTableFile: closing %s wrc=%d rc=%d\n", htrc("VCT CloseTableFile: closing %s wrc=%d rc=%d\n",
To_File, wrc, rc); To_File, wrc, rc);
@@ -1217,7 +1217,7 @@ bool VCTFAM::ReadBlock(PGLOBAL g, PVCTCOL colp)
else // Blocked vector format else // Blocked vector format
len = Nrec * (colp->Deplac + Lrecl * CurBlk); len = Nrec * (colp->Deplac + Lrecl * CurBlk);
if (trace) if (trace(1))
htrc("len=%d Nrec=%d Deplac=%d Lrecl=%d CurBlk=%d maxblk=%d\n", htrc("len=%d Nrec=%d Deplac=%d Lrecl=%d CurBlk=%d maxblk=%d\n",
len, Nrec, colp->Deplac, Lrecl, CurBlk, MaxBlk); len, Nrec, colp->Deplac, Lrecl, CurBlk, MaxBlk);
@@ -1236,13 +1236,13 @@ bool VCTFAM::ReadBlock(PGLOBAL g, PVCTCOL colp)
sprintf(g->Message, MSG(READ_ERROR), sprintf(g->Message, MSG(READ_ERROR),
To_File, strerror(errno)); To_File, strerror(errno));
if (trace) if (trace(1))
htrc(" Read error: %s\n", g->Message); htrc(" Read error: %s\n", g->Message);
return true; return true;
} // endif } // endif
if (trace) if (trace(1))
num_read++; num_read++;
return false; return false;
@@ -1268,7 +1268,7 @@ bool VCTFAM::WriteBlock(PGLOBAL g, PVCTCOL colp)
else // Old VCT format else // Old VCT format
len = Nrec * (colp->Deplac + Lrecl * colp->ColBlk); len = Nrec * (colp->Deplac + Lrecl * colp->ColBlk);
if (trace) if (trace(1))
htrc("modif=%d len=%d Nrec=%d Deplac=%d Lrecl=%d colblk=%d\n", htrc("modif=%d len=%d Nrec=%d Deplac=%d Lrecl=%d colblk=%d\n",
Modif, len, Nrec, colp->Deplac, Lrecl, colp->ColBlk); Modif, len, Nrec, colp->Deplac, Lrecl, colp->ColBlk);
@@ -1287,7 +1287,7 @@ bool VCTFAM::WriteBlock(PGLOBAL g, PVCTCOL colp)
sprintf(g->Message, MSG(WRITE_STRERROR), sprintf(g->Message, MSG(WRITE_STRERROR),
(UseTemp) ? To_Fbt->Fname : To_File, strerror(errno)); (UseTemp) ? To_Fbt->Fname : To_File, strerror(errno));
if (trace) if (trace(1))
htrc("Write error: %s\n", strerror(errno)); htrc("Write error: %s\n", strerror(errno));
return true; return true;
@@ -1358,7 +1358,7 @@ bool VCMFAM::OpenTableFile(PGLOBAL g)
&& fp->Count && fp->Mode == mode) && fp->Count && fp->Mode == mode)
break; break;
if (trace) if (trace(1))
htrc("Mapping VCM file, fp=%p cnt=%d\n", fp, fp->Count); htrc("Mapping VCM file, fp=%p cnt=%d\n", fp, fp->Count);
} else } else
@@ -1416,7 +1416,7 @@ bool VCMFAM::OpenTableFile(PGLOBAL g)
sprintf(g->Message, MSG(OPEN_MODE_ERROR), sprintf(g->Message, MSG(OPEN_MODE_ERROR),
"map", (int) rc, filename); "map", (int) rc, filename);
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
return (mode == MODE_READ && rc == ENOENT) return (mode == MODE_READ && rc == ENOENT)
@@ -1467,7 +1467,7 @@ bool VCMFAM::OpenTableFile(PGLOBAL g)
To_Fb = fp; // Useful when closing To_Fb = fp; // Useful when closing
if (trace) if (trace(1))
htrc("fp=%p count=%d MapView=%p len=%d Top=%p\n", htrc("fp=%p count=%d MapView=%p len=%d Top=%p\n",
fp, fp->Count, Memory, len); fp, fp->Count, Memory, len);
@@ -1551,7 +1551,7 @@ bool VCMFAM::InitInsert(PGLOBAL g)
cp->ReadBlock(g); cp->ReadBlock(g);
} catch (int n) { } catch (int n) {
if (trace) if (trace(1))
htrc("Exception %d: %s\n", n, g->Message); htrc("Exception %d: %s\n", n, g->Message);
rc = true; rc = true;
} catch (const char *msg) { } catch (const char *msg) {
@@ -1567,7 +1567,7 @@ bool VCMFAM::InitInsert(PGLOBAL g)
/***********************************************************************/ /***********************************************************************/
int VCMFAM::WriteBuffer(PGLOBAL g) int VCMFAM::WriteBuffer(PGLOBAL g)
{ {
if (trace) if (trace(1))
htrc("VCM WriteBuffer: R%d Mode=%d CurNum=%d CurBlk=%d\n", htrc("VCM WriteBuffer: R%d Mode=%d CurNum=%d CurBlk=%d\n",
Tdbp->GetTdb_No(), Tdbp->GetMode(), CurNum, CurBlk); Tdbp->GetTdb_No(), Tdbp->GetMode(), CurNum, CurBlk);
@@ -1608,7 +1608,7 @@ int VCMFAM::WriteBuffer(PGLOBAL g)
/***********************************************************************/ /***********************************************************************/
int VCMFAM::DeleteRecords(PGLOBAL g, int irc) int VCMFAM::DeleteRecords(PGLOBAL g, int irc)
{ {
if (trace) if (trace(1))
htrc("VCM DeleteDB: irc=%d tobuf=%p Tpos=%p Spos=%p\n", htrc("VCM DeleteDB: irc=%d tobuf=%p Tpos=%p Spos=%p\n",
irc, To_Buf, Tpos, Spos); irc, To_Buf, Tpos, Spos);
@@ -1618,7 +1618,7 @@ int VCMFAM::DeleteRecords(PGLOBAL g, int irc)
/*******************************************************************/ /*******************************************************************/
Fpos = (Block - 1) * Nrec + Last; Fpos = (Block - 1) * Nrec + Last;
if (trace) if (trace(1))
htrc("Fpos placed at file top=%p\n", Fpos); htrc("Fpos placed at file top=%p\n", Fpos);
} else // Fpos is the Deleted line position } else // Fpos is the Deleted line position
@@ -1636,7 +1636,7 @@ int VCMFAM::DeleteRecords(PGLOBAL g, int irc)
if (irc == RC_OK) { if (irc == RC_OK) {
Spos = Fpos + 1; // New start position Spos = Fpos + 1; // New start position
if (trace) if (trace(1))
htrc("after: Tpos=%p Spos=%p\n", Tpos, Spos); htrc("after: Tpos=%p Spos=%p\n", Tpos, Spos);
} else { } else {
@@ -1680,7 +1680,7 @@ int VCMFAM::DeleteRecords(PGLOBAL g, int irc)
return RC_FX; return RC_FX;
} // endif } // endif
if (trace) if (trace(1))
htrc("done, Tpos=%p newsize=%d drc=%d\n", Tpos, n, drc); htrc("done, Tpos=%p newsize=%d drc=%d\n", Tpos, n, drc);
if (!SetEndOfFile(fp->Handle)) { if (!SetEndOfFile(fp->Handle)) {
@@ -1755,7 +1755,7 @@ bool VCMFAM::MoveIntermediateLines(PGLOBAL, bool *)
Tpos += n; Tpos += n;
} // endif MaxBlk } // endif MaxBlk
if (trace) if (trace(1))
htrc("move %d bytes\n", n); htrc("move %d bytes\n", n);
} // endif n } // endif n
@@ -1812,14 +1812,14 @@ bool VCMFAM::ReadBlock(PGLOBAL, PVCTCOL colp)
/*********************************************************************/ /*********************************************************************/
mempos = Memcol[i] + n * CurBlk; mempos = Memcol[i] + n * CurBlk;
if (trace) if (trace(1))
htrc("mempos=%p i=%d Nrec=%d Clen=%d CurBlk=%d\n", htrc("mempos=%p i=%d Nrec=%d Clen=%d CurBlk=%d\n",
mempos, i, Nrec, colp->Clen, CurBlk); mempos, i, Nrec, colp->Clen, CurBlk);
if (colp->GetStatus(BUF_MAPPED)) if (colp->GetStatus(BUF_MAPPED))
colp->Blk->SetValPointer(mempos); colp->Blk->SetValPointer(mempos);
if (trace) if (trace(1))
num_read++; num_read++;
return false; return false;
@@ -1843,7 +1843,7 @@ bool VCMFAM::WriteBlock(PGLOBAL, PVCTCOL colp __attribute__((unused)))
/*********************************************************************/ /*********************************************************************/
mempos = Memcol[i] + n * CurBlk; mempos = Memcol[i] + n * CurBlk;
if (trace) if (trace(1))
htrc("modif=%d mempos=%p i=%d Nrec=%d Clen=%d colblk=%d\n", htrc("modif=%d mempos=%p i=%d Nrec=%d Clen=%d colblk=%d\n",
Modif, mempos, i, Nrec, colp->Clen, colp->ColBlk); Modif, mempos, i, Nrec, colp->Clen, colp->ColBlk);
@@ -2008,14 +2008,14 @@ bool VECFAM::OpenColumnFile(PGLOBAL g, PCSZ opmode, int i)
sprintf(filename, Colfn, i+1); sprintf(filename, Colfn, i+1);
if (!(Streams[i] = PlugOpenFile(g, filename, opmode))) { if (!(Streams[i] = PlugOpenFile(g, filename, opmode))) {
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
return (Tdbp->GetMode() == MODE_READ && errno == ENOENT) return (Tdbp->GetMode() == MODE_READ && errno == ENOENT)
? PushWarning(g, Tdbp) : true; ? PushWarning(g, Tdbp) : true;
} // endif Streams } // endif Streams
if (trace) if (trace(1))
htrc("File %s is open in mode %s\n", filename, opmode); htrc("File %s is open in mode %s\n", filename, opmode);
To_Fbs[i] = dup->Openlist; // Keep track of File blocks To_Fbs[i] = dup->Openlist; // Keep track of File blocks
@@ -2163,7 +2163,7 @@ void VECFAM::ResetBuffer(PGLOBAL g)
/***********************************************************************/ /***********************************************************************/
int VECFAM::WriteBuffer(PGLOBAL g) int VECFAM::WriteBuffer(PGLOBAL g)
{ {
if (trace) if (trace(1))
htrc("VCT WriteBuffer: R%d Mode=%d CurNum=%d CurBlk=%d\n", htrc("VCT WriteBuffer: R%d Mode=%d CurNum=%d CurBlk=%d\n",
Tdbp->GetTdb_No(), Tdbp->GetMode(), CurNum, CurBlk); Tdbp->GetTdb_No(), Tdbp->GetMode(), CurNum, CurBlk);
@@ -2205,7 +2205,7 @@ int VECFAM::WriteBuffer(PGLOBAL g)
/***********************************************************************/ /***********************************************************************/
int VECFAM::DeleteRecords(PGLOBAL g, int irc) int VECFAM::DeleteRecords(PGLOBAL g, int irc)
{ {
if (trace) if (trace(1))
htrc("VEC DeleteDB: rc=%d UseTemp=%d Fpos=%d Tpos=%d Spos=%d\n", htrc("VEC DeleteDB: rc=%d UseTemp=%d Fpos=%d Tpos=%d Spos=%d\n",
irc, UseTemp, Fpos, Tpos, Spos); irc, UseTemp, Fpos, Tpos, Spos);
@@ -2215,7 +2215,7 @@ int VECFAM::DeleteRecords(PGLOBAL g, int irc)
/*******************************************************************/ /*******************************************************************/
Fpos = Cardinality(g); Fpos = Cardinality(g);
if (trace) if (trace(1))
htrc("Fpos placed at file end=%d\n", Fpos); htrc("Fpos placed at file end=%d\n", Fpos);
} else // Fpos is the Deleted line position } else // Fpos is the Deleted line position
@@ -2251,7 +2251,7 @@ int VECFAM::DeleteRecords(PGLOBAL g, int irc)
#endif #endif
Spos++; // New start position is on next line Spos++; // New start position is on next line
if (trace) if (trace(1))
htrc("after: Tpos=%d Spos=%d\n", Tpos, Spos); htrc("after: Tpos=%d Spos=%d\n", Tpos, Spos);
} else { } else {
@@ -2294,7 +2294,7 @@ int VECFAM::DeleteRecords(PGLOBAL g, int irc)
close(h); close(h);
if (trace) if (trace(1))
htrc("done, h=%d irc=%d\n", h, irc); htrc("done, h=%d irc=%d\n", h, irc);
} // endfor i } // endfor i
@@ -2332,7 +2332,7 @@ bool VECFAM::OpenTempFile(PGLOBAL g)
sprintf(tempname, Tempat, i+1); sprintf(tempname, Tempat, i+1);
if (!(T_Streams[i] = PlugOpenFile(g, tempname, "wb"))) { if (!(T_Streams[i] = PlugOpenFile(g, tempname, "wb"))) {
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
return true; return true;
@@ -2391,7 +2391,7 @@ bool VECFAM::MoveIntermediateLines(PGLOBAL g, bool *)
len = fread(To_Buf, Clens[i], req, Streams[i]); len = fread(To_Buf, Clens[i], req, Streams[i]);
if (trace) if (trace(1))
htrc("after read req=%d len=%d\n", req, len); htrc("after read req=%d len=%d\n", req, len);
if (len != req) { if (len != req) {
@@ -2410,7 +2410,7 @@ bool VECFAM::MoveIntermediateLines(PGLOBAL g, bool *)
return true; return true;
} // endif } // endif
if (trace) if (trace(1))
htrc("after write pos=%d\n", ftell(Streams[i])); htrc("after write pos=%d\n", ftell(Streams[i]));
} // endfor i } // endfor i
@@ -2418,7 +2418,7 @@ bool VECFAM::MoveIntermediateLines(PGLOBAL g, bool *)
Tpos += (int)req; Tpos += (int)req;
Spos += (int)req; Spos += (int)req;
if (trace) if (trace(1))
htrc("loop: Tpos=%d Spos=%d\n", Tpos, Spos); htrc("loop: Tpos=%d Spos=%d\n", Tpos, Spos);
b = true; b = true;
@@ -2541,7 +2541,7 @@ void VECFAM::CloseTableFile(PGLOBAL g, bool abort)
To_Fbs[i] = NULL; To_Fbs[i] = NULL;
} // endif Streams } // endif Streams
if (trace) if (trace(1))
htrc("VCT CloseTableFile: closing %s wrc=%d rc=%d\n", To_File, wrc, rc); htrc("VCT CloseTableFile: closing %s wrc=%d rc=%d\n", To_File, wrc, rc);
} // end of CloseTableFile } // end of CloseTableFile
@@ -2560,7 +2560,7 @@ bool VECFAM::ReadBlock(PGLOBAL g, PVCTCOL colp)
len = Nrec * colp->Clen * CurBlk; len = Nrec * colp->Clen * CurBlk;
i = colp->Index - 1; i = colp->Index - 1;
if (trace) if (trace(1))
htrc("len=%d i=%d Nrec=%d Deplac=%d Lrecl=%d CurBlk=%d\n", htrc("len=%d i=%d Nrec=%d Deplac=%d Lrecl=%d CurBlk=%d\n",
len, i, Nrec, colp->Deplac, Lrecl, CurBlk); len, i, Nrec, colp->Deplac, Lrecl, CurBlk);
@@ -2586,13 +2586,13 @@ bool VECFAM::ReadBlock(PGLOBAL g, PVCTCOL colp)
sprintf(g->Message, MSG(READ_ERROR), sprintf(g->Message, MSG(READ_ERROR),
fn, strerror(errno)); fn, strerror(errno));
if (trace) if (trace(1))
htrc(" Read error: %s\n", g->Message); htrc(" Read error: %s\n", g->Message);
return true; return true;
} // endif } // endif
if (trace) if (trace(1))
num_read++; num_read++;
return false; return false;
@@ -2615,7 +2615,7 @@ bool VECFAM::WriteBlock(PGLOBAL g, PVCTCOL colp)
len = Nrec * colp->Clen * colp->ColBlk; len = Nrec * colp->Clen * colp->ColBlk;
i = colp->Index - 1; i = colp->Index - 1;
if (trace) if (trace(1))
htrc("modif=%d len=%d i=%d Nrec=%d Deplac=%d Lrecl=%d colblk=%d\n", htrc("modif=%d len=%d i=%d Nrec=%d Deplac=%d Lrecl=%d colblk=%d\n",
Modif, len, i, Nrec, colp->Deplac, Lrecl, colp->ColBlk); Modif, len, i, Nrec, colp->Deplac, Lrecl, colp->ColBlk);
@@ -2638,7 +2638,7 @@ bool VECFAM::WriteBlock(PGLOBAL g, PVCTCOL colp)
sprintf(fn, (UseTemp) ? Tempat : Colfn, colp->Index); sprintf(fn, (UseTemp) ? Tempat : Colfn, colp->Index);
sprintf(g->Message, MSG(WRITE_STRERROR), fn, strerror(errno)); sprintf(g->Message, MSG(WRITE_STRERROR), fn, strerror(errno));
if (trace) if (trace(1))
htrc("Write error: %s\n", strerror(errno)); htrc("Write error: %s\n", strerror(errno));
return true; return true;
@@ -2782,7 +2782,7 @@ bool VMPFAM::MapColumnFile(PGLOBAL g, MODE mode, int i)
&& fp->Count && fp->Mode == mode) && fp->Count && fp->Mode == mode)
break; break;
if (trace) if (trace(1))
htrc("Mapping file, fp=%p\n", fp); htrc("Mapping file, fp=%p\n", fp);
} else } else
@@ -2807,7 +2807,7 @@ bool VMPFAM::MapColumnFile(PGLOBAL g, MODE mode, int i)
if (!(*g->Message)) if (!(*g->Message))
sprintf(g->Message, MSG(OPEN_MODE_ERROR), sprintf(g->Message, MSG(OPEN_MODE_ERROR),
"map", (int) rc, filename); "map", (int) rc, filename);
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
return (mode == MODE_READ && rc == ENOENT) return (mode == MODE_READ && rc == ENOENT)
@@ -2858,7 +2858,7 @@ bool VMPFAM::MapColumnFile(PGLOBAL g, MODE mode, int i)
To_Fbs[i] = fp; // Useful when closing To_Fbs[i] = fp; // Useful when closing
if (trace) if (trace(1))
htrc("fp=%p count=%d MapView=%p len=%d\n", htrc("fp=%p count=%d MapView=%p len=%d\n",
fp, fp->Count, Memcol[i], len); fp, fp->Count, Memcol[i], len);
@@ -2903,7 +2903,7 @@ int VMPFAM::DeleteRecords(PGLOBAL g, int irc)
int i; int i;
int m, n; int m, n;
if (trace) if (trace(1))
htrc("VMP DeleteDB: irc=%d tobuf=%p Tpos=%p Spos=%p\n", htrc("VMP DeleteDB: irc=%d tobuf=%p Tpos=%p Spos=%p\n",
irc, To_Buf, Tpos, Spos); irc, To_Buf, Tpos, Spos);
@@ -2913,7 +2913,7 @@ int VMPFAM::DeleteRecords(PGLOBAL g, int irc)
/*******************************************************************/ /*******************************************************************/
Fpos = (Block - 1) * Nrec + Last; Fpos = (Block - 1) * Nrec + Last;
if (trace) if (trace(1))
htrc("Fpos placed at file top=%p\n", Fpos); htrc("Fpos placed at file top=%p\n", Fpos);
} else // Fpos is the Deleted line position } else // Fpos is the Deleted line position
@@ -2936,7 +2936,7 @@ int VMPFAM::DeleteRecords(PGLOBAL g, int irc)
Tpos += n; Tpos += n;
if (trace) if (trace(1))
htrc("move %d bytes\n", n); htrc("move %d bytes\n", n);
} // endif n } // endif n
@@ -2944,7 +2944,7 @@ int VMPFAM::DeleteRecords(PGLOBAL g, int irc)
if (irc == RC_OK) { if (irc == RC_OK) {
Spos = Fpos + 1; // New start position Spos = Fpos + 1; // New start position
if (trace) if (trace(1))
htrc("after: Tpos=%p Spos=%p\n", Tpos, Spos); htrc("after: Tpos=%p Spos=%p\n", Tpos, Spos);
} else { } else {
@@ -2981,7 +2981,7 @@ int VMPFAM::DeleteRecords(PGLOBAL g, int irc)
return RC_FX; return RC_FX;
} // endif } // endif
if (trace) if (trace(1))
htrc("done, Tpos=%p newsize=%d drc=%d\n", Tpos, n, drc); htrc("done, Tpos=%p newsize=%d drc=%d\n", Tpos, n, drc);
if (!SetEndOfFile(fp->Handle)) { if (!SetEndOfFile(fp->Handle)) {
@@ -3088,7 +3088,7 @@ bool BGVFAM::BigRead(PGLOBAL g, HANDLE h, void *inbuf, int req)
DWORD nbr, drc, len = (DWORD)req; DWORD nbr, drc, len = (DWORD)req;
bool brc = ReadFile(h, inbuf, len, &nbr, NULL); bool brc = ReadFile(h, inbuf, len, &nbr, NULL);
if (trace) if (trace(1))
htrc("after read req=%d brc=%d nbr=%d\n", req, brc, nbr); htrc("after read req=%d brc=%d nbr=%d\n", req, brc, nbr);
if (!brc || nbr != len) { if (!brc || nbr != len) {
@@ -3105,7 +3105,7 @@ bool BGVFAM::BigRead(PGLOBAL g, HANDLE h, void *inbuf, int req)
sprintf(g->Message, MSG(READ_ERROR), To_File, buf); sprintf(g->Message, MSG(READ_ERROR), To_File, buf);
if (trace) if (trace(1))
htrc("BIGREAD: %s\n", g->Message); htrc("BIGREAD: %s\n", g->Message);
rc = true; rc = true;
@@ -3119,7 +3119,7 @@ bool BGVFAM::BigRead(PGLOBAL g, HANDLE h, void *inbuf, int req)
sprintf(g->Message, MSG(READ_ERROR), fn, strerror(errno)); sprintf(g->Message, MSG(READ_ERROR), fn, strerror(errno));
if (trace) if (trace(1))
htrc("BIGREAD: nbr=%d len=%d errno=%d %s\n", htrc("BIGREAD: nbr=%d len=%d errno=%d %s\n",
nbr, len, errno, g->Message); nbr, len, errno, g->Message);
@@ -3141,7 +3141,7 @@ bool BGVFAM::BigWrite(PGLOBAL g, HANDLE h, void *inbuf, int req)
DWORD nbw, drc, len = (DWORD)req; DWORD nbw, drc, len = (DWORD)req;
bool brc = WriteFile(h, inbuf, len, &nbw, NULL); bool brc = WriteFile(h, inbuf, len, &nbw, NULL);
if (trace) if (trace(1))
htrc("after write req=%d brc=%d nbw=%d\n", req, brc, nbw); htrc("after write req=%d brc=%d nbw=%d\n", req, brc, nbw);
if (!brc || nbw != len) { if (!brc || nbw != len) {
@@ -3159,7 +3159,7 @@ bool BGVFAM::BigWrite(PGLOBAL g, HANDLE h, void *inbuf, int req)
sprintf(g->Message, MSG(WRITE_STRERROR), fn, buf); sprintf(g->Message, MSG(WRITE_STRERROR), fn, buf);
if (trace) if (trace(1))
htrc("BIGWRITE: nbw=%d len=%d errno=%d %s\n", htrc("BIGWRITE: nbw=%d len=%d errno=%d %s\n",
nbw, len, drc, g->Message); nbw, len, drc, g->Message);
@@ -3174,7 +3174,7 @@ bool BGVFAM::BigWrite(PGLOBAL g, HANDLE h, void *inbuf, int req)
sprintf(g->Message, MSG(WRITE_STRERROR), fn, strerror(errno)); sprintf(g->Message, MSG(WRITE_STRERROR), fn, strerror(errno));
if (trace) if (trace(1))
htrc("BIGWRITE: nbw=%d len=%d errno=%d %s\n", htrc("BIGWRITE: nbw=%d len=%d errno=%d %s\n",
nbw, len, errno, g->Message); nbw, len, errno, g->Message);
@@ -3224,7 +3224,7 @@ int BGVFAM::GetBlockInfo(PGLOBAL g)
if (h == INVALID_HANDLE_VALUE || !_filelength(h)) { if (h == INVALID_HANDLE_VALUE || !_filelength(h)) {
#endif // !__WIN__ #endif // !__WIN__
// Consider this is a void table // Consider this is a void table
if (trace) if (trace(1))
htrc("Void table h=%d\n", h); htrc("Void table h=%d\n", h);
Last = Nrec; Last = Nrec;
@@ -3248,7 +3248,7 @@ int BGVFAM::GetBlockInfo(PGLOBAL g)
Block = (vh.NumRec > 0) ? (vh.NumRec + Nrec - 1) / Nrec : 0; Block = (vh.NumRec > 0) ? (vh.NumRec + Nrec - 1) / Nrec : 0;
Last = (vh.NumRec + Nrec - 1) % Nrec + 1; Last = (vh.NumRec + Nrec - 1) % Nrec + 1;
if (trace) if (trace(1))
htrc("Block=%d Last=%d\n", Block, Last); htrc("Block=%d Last=%d\n", Block, Last);
} // endif's } // endif's
@@ -3348,7 +3348,7 @@ bool BGVFAM::MakeEmptyFile(PGLOBAL g, PCSZ fn)
of.QuadPart = (BIGINT)n + (BIGINT)MaxBlk * (BIGINT)Blksize - (BIGINT)1; of.QuadPart = (BIGINT)n + (BIGINT)MaxBlk * (BIGINT)Blksize - (BIGINT)1;
if (trace) if (trace(1))
htrc("MEF: of=%lld n=%d maxblk=%d blksize=%d\n", htrc("MEF: of=%lld n=%d maxblk=%d blksize=%d\n",
of.QuadPart, n, MaxBlk, Blksize); of.QuadPart, n, MaxBlk, Blksize);
@@ -3394,7 +3394,7 @@ bool BGVFAM::MakeEmptyFile(PGLOBAL g, PCSZ fn)
pos = (BIGINT)n + (BIGINT)MaxBlk * (BIGINT)Blksize - (BIGINT)1; pos = (BIGINT)n + (BIGINT)MaxBlk * (BIGINT)Blksize - (BIGINT)1;
if (trace) if (trace(1))
htrc("MEF: pos=%lld n=%d maxblk=%d blksize=%d\n", htrc("MEF: pos=%lld n=%d maxblk=%d blksize=%d\n",
pos, n, MaxBlk, Blksize); pos, n, MaxBlk, Blksize);
@@ -3439,7 +3439,7 @@ bool BGVFAM::OpenTableFile(PGLOBAL g)
PlugSetPath(filename, To_File, Tdbp->GetPath()); PlugSetPath(filename, To_File, Tdbp->GetPath());
if (trace) if (trace(1))
htrc("OpenTableFile: filename=%s mode=%d Last=%d\n", htrc("OpenTableFile: filename=%s mode=%d Last=%d\n",
filename, mode, Last); filename, mode, Last);
@@ -3516,7 +3516,7 @@ bool BGVFAM::OpenTableFile(PGLOBAL g)
strcat(g->Message, filename); strcat(g->Message, filename);
} // endif Hfile } // endif Hfile
if (trace) if (trace(1))
htrc(" rc=%d access=%p share=%p creation=%d handle=%p fn=%s\n", htrc(" rc=%d access=%p share=%p creation=%d handle=%p fn=%s\n",
rc, access, share, creation, Hfile, filename); rc, access, share, creation, Hfile, filename);
@@ -3605,7 +3605,7 @@ bool BGVFAM::OpenTableFile(PGLOBAL g)
strcat(g->Message, strerror(errno)); strcat(g->Message, strerror(errno));
} // endif Hfile } // endif Hfile
if (trace) if (trace(1))
htrc(" rc=%d oflag=%p mode=%p handle=%d fn=%s\n", htrc(" rc=%d oflag=%p mode=%p handle=%d fn=%s\n",
rc, oflag, mode, Hfile, filename); rc, oflag, mode, Hfile, filename);
#endif // UNIX #endif // UNIX
@@ -3626,7 +3626,7 @@ bool BGVFAM::OpenTableFile(PGLOBAL g)
To_Fb->Mode = mode; To_Fb->Mode = mode;
To_Fb->Handle = Hfile; To_Fb->Handle = Hfile;
if (trace) if (trace(1))
htrc("File %s is open in mode %d\n", filename, mode); htrc("File %s is open in mode %d\n", filename, mode);
if (del) if (del)
@@ -3729,7 +3729,7 @@ bool BGVFAM::AllocateBuffer(PGLOBAL g)
/***********************************************************************/ /***********************************************************************/
int BGVFAM::WriteBuffer(PGLOBAL g) int BGVFAM::WriteBuffer(PGLOBAL g)
{ {
if (trace) if (trace(1))
htrc("BGV WriteDB: R%d Mode=%d CurNum=%d CurBlk=%d\n", htrc("BGV WriteDB: R%d Mode=%d CurNum=%d CurBlk=%d\n",
Tdbp->GetTdb_No(), Tdbp->GetMode(), CurNum, CurBlk); Tdbp->GetTdb_No(), Tdbp->GetMode(), CurNum, CurBlk);
@@ -3829,7 +3829,7 @@ int BGVFAM::DeleteRecords(PGLOBAL g, int irc)
/* 2 - directly move the not deleted lines inside the original */ /* 2 - directly move the not deleted lines inside the original */
/* file, and at the end erase all trailing records. */ /* file, and at the end erase all trailing records. */
/*********************************************************************/ /*********************************************************************/
if (trace) if (trace(1))
htrc("BGV DeleteDB: irc=%d UseTemp=%d Fpos=%d Tpos=%d Spos=%d\n", htrc("BGV DeleteDB: irc=%d UseTemp=%d Fpos=%d Tpos=%d Spos=%d\n",
irc, UseTemp, Fpos, Tpos, Spos); irc, UseTemp, Fpos, Tpos, Spos);
@@ -3839,7 +3839,7 @@ int BGVFAM::DeleteRecords(PGLOBAL g, int irc)
/*******************************************************************/ /*******************************************************************/
Fpos = (Block - 1) * Nrec + Last; Fpos = (Block - 1) * Nrec + Last;
if (trace) if (trace(1))
htrc("Fpos placed at file end=%d\n", Fpos); htrc("Fpos placed at file end=%d\n", Fpos);
eof = UseTemp && !MaxBlk; eof = UseTemp && !MaxBlk;
@@ -3878,7 +3878,7 @@ int BGVFAM::DeleteRecords(PGLOBAL g, int irc)
#endif #endif
Spos++; // New start position is on next line Spos++; // New start position is on next line
if (trace) if (trace(1))
htrc("after: Tpos=%d Spos=%d\n", Tpos, Spos); htrc("after: Tpos=%d Spos=%d\n", Tpos, Spos);
} else { } else {
@@ -4065,7 +4065,7 @@ bool BGVFAM::MoveIntermediateLines(PGLOBAL g, bool *b)
} // endif Usetemp... } // endif Usetemp...
if (trace) if (trace(1))
htrc("loop: Tpos=%d Spos=%d\n", Tpos, Spos); htrc("loop: Tpos=%d Spos=%d\n", Tpos, Spos);
} // endfor n } // endfor n
@@ -4201,7 +4201,7 @@ void BGVFAM::CloseTableFile(PGLOBAL g, bool abort)
if (Hfile != INVALID_HANDLE_VALUE) if (Hfile != INVALID_HANDLE_VALUE)
rc = PlugCloseFile(g, To_Fb); rc = PlugCloseFile(g, To_Fb);
if (trace) if (trace(1))
htrc("BGV CloseTableFile: closing %s wrc=%d rc=%d\n", htrc("BGV CloseTableFile: closing %s wrc=%d rc=%d\n",
To_File, wrc, rc); To_File, wrc, rc);
@@ -4247,7 +4247,7 @@ bool BGVFAM::ReadBlock(PGLOBAL g, PVCTCOL colp)
pos = (BIGINT)Nrec * ((BIGINT)colp->Deplac pos = (BIGINT)Nrec * ((BIGINT)colp->Deplac
+ (BIGINT)Lrecl * (BIGINT)CurBlk); + (BIGINT)Lrecl * (BIGINT)CurBlk);
if (trace) if (trace(1))
htrc("RB: offset=%lld Nrec=%d Deplac=%d Lrecl=%d CurBlk=%d MaxBlk=%d\n", htrc("RB: offset=%lld Nrec=%d Deplac=%d Lrecl=%d CurBlk=%d MaxBlk=%d\n",
pos, Nrec, colp->Deplac, Lrecl, CurBlk, MaxBlk); pos, Nrec, colp->Deplac, Lrecl, CurBlk, MaxBlk);
@@ -4257,7 +4257,7 @@ bool BGVFAM::ReadBlock(PGLOBAL g, PVCTCOL colp)
if (BigRead(g, Hfile, colp->Blk->GetValPointer(), colp->Clen * Nrec)) if (BigRead(g, Hfile, colp->Blk->GetValPointer(), colp->Clen * Nrec))
return true; return true;
if (trace) if (trace(1))
num_read++; num_read++;
return false; return false;
@@ -4284,7 +4284,7 @@ bool BGVFAM::WriteBlock(PGLOBAL g, PVCTCOL colp)
pos = (BIGINT)Nrec * ((BIGINT)colp->Deplac pos = (BIGINT)Nrec * ((BIGINT)colp->Deplac
+ (BIGINT)Lrecl * (BIGINT)colp->ColBlk); + (BIGINT)Lrecl * (BIGINT)colp->ColBlk);
if (trace) if (trace(1))
htrc("WB: offset=%lld Nrec=%d Deplac=%d Lrecl=%d ColBlk=%d\n", htrc("WB: offset=%lld Nrec=%d Deplac=%d Lrecl=%d ColBlk=%d\n",
pos, Nrec, colp->Deplac, Lrecl, colp->ColBlk); pos, Nrec, colp->Deplac, Lrecl, colp->ColBlk);

View File

@@ -699,7 +699,7 @@ bool UNZIPUTL::openEntry(PGLOBAL g)
entryopen = true; entryopen = true;
} // endif rc } // endif rc
if (trace) if (trace(1))
htrc("Openning entry%s %s\n", fn, (entryopen) ? "oked" : "failed"); htrc("Openning entry%s %s\n", fn, (entryopen) ? "oked" : "failed");
return !entryopen; return !entryopen;
@@ -751,7 +751,7 @@ int UNZFAM::GetFileLength(PGLOBAL g)
int len = (zutp && zutp->entryopen) ? (int)(Top - Memory) int len = (zutp && zutp->entryopen) ? (int)(Top - Memory)
: TXTFAM::GetFileLength(g) * 3; : TXTFAM::GetFileLength(g) * 3;
if (trace) if (trace(1))
htrc("Zipped file length=%d\n", len); htrc("Zipped file length=%d\n", len);
return len; return len;

View File

@@ -298,7 +298,7 @@ PFIL FILTER::Link(PGLOBAL g, PFIL fil2)
{ {
PFIL fil1; PFIL fil1;
if (trace) if (trace(1))
htrc("Linking filter %p with op=%d... to filter %p with op=%d\n", htrc("Linking filter %p with op=%d... to filter %p with op=%d\n",
this, Opc, fil2, (fil2) ? fil2->Opc : 0); this, Opc, fil2, (fil2) ? fil2->Opc : 0);
@@ -352,7 +352,7 @@ int FILTER::CheckColumn(PGLOBAL g, PSQL sqlp, PXOB &p, int &ag)
char errmsg[MAX_STR] = ""; char errmsg[MAX_STR] = "";
int agg, k, n = 0; int agg, k, n = 0;
if (trace) if (trace(1))
htrc("FILTER CheckColumn: sqlp=%p ag=%d\n", sqlp, ag); htrc("FILTER CheckColumn: sqlp=%p ag=%d\n", sqlp, ag);
switch (Opc) { switch (Opc) {
@@ -537,7 +537,7 @@ PFIL FILTER::SortJoin(PGLOBAL g)
bool FILTER::FindJoinFilter(POPJOIN opj, PFIL fprec, bool teq, bool tek, bool FILTER::FindJoinFilter(POPJOIN opj, PFIL fprec, bool teq, bool tek,
bool tk2, bool tc2, bool tix, bool thx) bool tk2, bool tc2, bool tix, bool thx)
{ {
if (trace) if (trace(1))
htrc("FindJoinFilter: opj=%p fprec=%p tests=(%d,%d,%d,%d)\n", htrc("FindJoinFilter: opj=%p fprec=%p tests=(%d,%d,%d,%d)\n",
opj, fprec, teq, tek, tk2, tc2); opj, fprec, teq, tek, tk2, tc2);
@@ -864,7 +864,7 @@ bool FILTER::CheckLocal(PTDB tdbp)
{ {
bool local = TRUE; bool local = TRUE;
if (trace) { if (trace(1)) {
if (tdbp) if (tdbp)
htrc("CheckLocal: filp=%p R%d\n", this, tdbp->GetTdb_No()); htrc("CheckLocal: filp=%p R%d\n", this, tdbp->GetTdb_No());
else else
@@ -874,7 +874,7 @@ bool FILTER::CheckLocal(PTDB tdbp)
for (int i = 0; local && i < 2; i++) for (int i = 0; local && i < 2; i++)
local = Arg(i)->CheckLocal(tdbp); local = Arg(i)->CheckLocal(tdbp);
if (trace) if (trace(1))
htrc("FCL: returning %d\n", local); htrc("FCL: returning %d\n", local);
return (local); return (local);
@@ -980,7 +980,7 @@ bool FILTER::Convert(PGLOBAL g, bool having)
{ {
int i, comtype = TYPE_ERROR; int i, comtype = TYPE_ERROR;
if (trace) if (trace(1))
htrc("converting(?) %s %p opc=%d\n", htrc("converting(?) %s %p opc=%d\n",
(having) ? "having" : "filter", this, Opc); (having) ? "having" : "filter", this, Opc);
@@ -1011,7 +1011,7 @@ bool FILTER::Convert(PGLOBAL g, bool having)
return TRUE; return TRUE;
} // endswitch } // endswitch
if (trace) if (trace(1))
htrc("Filter(%d): Arg type=%d\n", i, GetArgType(i)); htrc("Filter(%d): Arg type=%d\n", i, GetArgType(i));
// Set default values // Set default values
@@ -1056,7 +1056,7 @@ bool FILTER::Convert(PGLOBAL g, bool having)
return TRUE; return TRUE;
} // endif } // endif
if (trace) if (trace(1))
htrc(" comtype=%d, B_T(%d)=%d Val(%d)=%p\n", htrc(" comtype=%d, B_T(%d)=%d Val(%d)=%p\n",
comtype, i, Test[i].B_T, i, Val(i)); comtype, i, Test[i].B_T, i, Val(i));
@@ -1064,7 +1064,7 @@ bool FILTER::Convert(PGLOBAL g, bool having)
// Set or allocate the filter argument values and buffers // Set or allocate the filter argument values and buffers
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
if (trace) if (trace(1))
htrc(" conv type %d ? i=%d B_T=%d comtype=%d\n", htrc(" conv type %d ? i=%d B_T=%d comtype=%d\n",
GetArgType(i), i, Test[i].B_T, comtype); GetArgType(i), i, Test[i].B_T, comtype);
@@ -1141,7 +1141,7 @@ bool FILTER::Convert(PGLOBAL g, bool having)
TEST: // Test for possible Eval optimization TEST: // Test for possible Eval optimization
if (trace) if (trace(1))
htrc("Filp %p op=%d argtypes=(%d,%d)\n", htrc("Filp %p op=%d argtypes=(%d,%d)\n",
this, Opc, GetArgType(0), GetArgType(1)); this, Opc, GetArgType(0), GetArgType(1));
@@ -1230,7 +1230,7 @@ bool FILTER::Eval(PGLOBAL g)
else if (Test[i].Conv) else if (Test[i].Conv)
Val(i)->SetValue_pval(Arg(i)->GetValue()); Val(i)->SetValue_pval(Arg(i)->GetValue());
if (trace) if (trace(1))
htrc(" Filter: op=%d type=%d %d B_T=%d %d val=%p %p\n", htrc(" Filter: op=%d type=%d %d B_T=%d %d val=%p %p\n",
Opc, GetArgType(0), GetArgType(1), Test[0].B_T, Test[1].B_T, Opc, GetArgType(0), GetArgType(1), Test[0].B_T, Test[1].B_T,
Val(0), Val(1)); Val(0), Val(1));
@@ -1270,7 +1270,7 @@ bool FILTER::Eval(PGLOBAL g)
goto FilterError; goto FilterError;
} // endswitch Type } // endswitch Type
if (trace) { if (trace(1)) {
htrc(" IN filtering: ap=%p\n", ap); htrc(" IN filtering: ap=%p\n", ap);
if (ap) if (ap)
@@ -1360,7 +1360,7 @@ bool FILTER::Eval(PGLOBAL g)
goto FilterError; goto FilterError;
} // endswitch Opc } // endswitch Opc
if (trace) if (trace(1))
htrc("Eval: filter %p Opc=%d result=%d\n", htrc("Eval: filter %p Opc=%d result=%d\n",
this, Opc, Value->GetIntValue()); this, Opc, Value->GetIntValue());
@@ -1692,7 +1692,7 @@ PFIL PrepareFilter(PGLOBAL g, PFIL fp, bool having)
{ {
PFIL filp = NULL; PFIL filp = NULL;
if (trace) if (trace(1))
htrc("PrepareFilter: fp=%p having=%d\n", fp, having); htrc("PrepareFilter: fp=%p having=%d\n", fp, having);
while (fp) { while (fp) {
@@ -1714,7 +1714,7 @@ PFIL PrepareFilter(PGLOBAL g, PFIL fp, bool having)
filp->Next = NULL; filp->Next = NULL;
} // endwhile } // endwhile
if (trace) if (trace(1))
htrc(" returning filp=%p\n", filp); htrc(" returning filp=%p\n", filp);
return filp; return filp;
@@ -1740,7 +1740,7 @@ DllExport bool ApplyFilter(PGLOBAL g, PFIL filp)
if (filp->Eval(g)) if (filp->Eval(g))
throw (int)TYPE_FILTER; throw (int)TYPE_FILTER;
if (trace > 1) if (trace(2))
htrc("PlugFilter filp=%p result=%d\n", htrc("PlugFilter filp=%p result=%d\n",
filp, filp->GetResult()); filp, filp->GetResult());

View File

@@ -52,7 +52,7 @@
/***********************************************************************/ /***********************************************************************/
/* Define access to the thread based trace value. */ /* Define access to the thread based trace value. */
/***********************************************************************/ /***********************************************************************/
#define trace GetTraceValue() #define trace(T) (bool)(GetTraceValue() & (uint)T)
/***********************************************************************/ /***********************************************************************/
/* Miscellaneous Constants */ /* Miscellaneous Constants */
@@ -220,14 +220,19 @@ DllExport BOOL PlugIsAbsolutePath(LPCSTR path);
DllExport bool AllocSarea(PGLOBAL, uint); DllExport bool AllocSarea(PGLOBAL, uint);
DllExport void FreeSarea(PGLOBAL); DllExport void FreeSarea(PGLOBAL);
DllExport BOOL PlugSubSet(PGLOBAL, void *, uint); DllExport BOOL PlugSubSet(PGLOBAL, void *, uint);
DllExport void *PlugSubAlloc(PGLOBAL, void *, size_t);
DllExport char *PlugDup(PGLOBAL g, const char *str); DllExport char *PlugDup(PGLOBAL g, const char *str);
DllExport void *MakePtr(void *, OFFSET); DllExport void *MakePtr(void *, OFFSET);
DllExport void htrc(char const *fmt, ...); DllExport void htrc(char const *fmt, ...);
DllExport int GetTraceValue(void); //DllExport int GetTraceValue(void);
DllExport uint GetTraceValue(void);
#if defined(__cplusplus) #if defined(__cplusplus)
} // extern "C" } // extern "C"
#endif #endif
/***********************************************************************/
/* Non exported routine declarations. */
/***********************************************************************/
void *PlugSubAlloc(PGLOBAL, void *, size_t); // Does throw
/*-------------------------- End of Global.H --------------------------*/ /*-------------------------- End of Global.H --------------------------*/

View File

@@ -174,9 +174,9 @@
#define JSONMAX 10 // JSON Default max grp size #define JSONMAX 10 // JSON Default max grp size
extern "C" { extern "C" {
char version[]= "Version 1.06.0005 October 14, 2017"; char version[]= "Version 1.06.0007 March 11, 2018";
#if defined(__WIN__) #if defined(__WIN__)
char compver[]= "Version 1.06.0005 " __DATE__ " " __TIME__; char compver[]= "Version 1.06.0007 " __DATE__ " " __TIME__;
char slash= '\\'; char slash= '\\';
#else // !__WIN__ #else // !__WIN__
char slash= '/'; char slash= '/';
@@ -266,16 +266,38 @@ static char *strz(PGLOBAL g, LEX_STRING &ls)
/***********************************************************************/ /***********************************************************************/
/* CONNECT session variables definitions. */ /* CONNECT session variables definitions. */
/***********************************************************************/ /***********************************************************************/
// Tracing: 0 no, 1 yes, >1 more tracing // Tracing: 0 no, 1 yes, 2 more, 4 index... 511 all
static MYSQL_THDVAR_INT(xtrace, const char *xtrace_names[] =
PLUGIN_VAR_RQCMDARG, "Console trace value.", {
NULL, NULL, 0, 0, INT_MAX, 1); "YES", "MORE", "INDEX", "MEMORY", "SUBALLOC",
"QUERY", "STMT", "HANDLER", "BLOCK", "MONGO", NullS
};
TYPELIB xtrace_typelib =
{
array_elements(xtrace_names) - 1, "xtrace_typelib",
xtrace_names, NULL
};
static MYSQL_THDVAR_SET(
xtrace, // name
PLUGIN_VAR_RQCMDARG, // opt
"Trace values.", // comment
NULL, // check
NULL, // update function
0, // def (NO)
&xtrace_typelib); // typelib
// Getting exact info values // Getting exact info values
static MYSQL_THDVAR_BOOL(exact_info, PLUGIN_VAR_RQCMDARG, static MYSQL_THDVAR_BOOL(exact_info, PLUGIN_VAR_RQCMDARG,
"Getting exact info values", "Getting exact info values",
NULL, NULL, 0); NULL, NULL, 0);
// Enabling cond_push
static MYSQL_THDVAR_BOOL(cond_push, PLUGIN_VAR_RQCMDARG,
"Enabling cond_push",
NULL, NULL, 1); // YES by default
/** /**
Temporary file usage: Temporary file usage:
no: Not using temporary file no: Not using temporary file
@@ -314,17 +336,18 @@ static MYSQL_THDVAR_UINT(work_size,
static MYSQL_THDVAR_INT(conv_size, static MYSQL_THDVAR_INT(conv_size,
PLUGIN_VAR_RQCMDARG, // opt PLUGIN_VAR_RQCMDARG, // opt
"Size used when converting TEXT columns.", "Size used when converting TEXT columns.",
NULL, NULL, SZCONV, 0, 65500, 1); NULL, NULL, SZCONV, 0, 65500, 8192);
/** /**
Type conversion: Type conversion:
no: Unsupported types -> TYPE_ERROR no: Unsupported types -> TYPE_ERROR
yes: TEXT -> VARCHAR yes: TEXT -> VARCHAR
force: Do it also for ODBC BINARY and BLOBs
skip: skip unsupported type columns in Discovery skip: skip unsupported type columns in Discovery
*/ */
const char *xconv_names[]= const char *xconv_names[]=
{ {
"NO", "YES", "SKIP", NullS "NO", "YES", "FORCE", "SKIP", NullS
}; };
TYPELIB xconv_typelib= TYPELIB xconv_typelib=
@@ -339,7 +362,7 @@ static MYSQL_THDVAR_ENUM(
"Unsupported types conversion.", // comment "Unsupported types conversion.", // comment
NULL, // check NULL, // check
NULL, // update function NULL, // update function
0, // def (no) 1, // def (yes)
&xconv_typelib); // typelib &xconv_typelib); // typelib
// Null representation for JSON values // Null representation for JSON values
@@ -364,12 +387,17 @@ static MYSQL_THDVAR_STR(java_wrapper,
NULL, NULL, "wrappers/JdbcInterface"); NULL, NULL, "wrappers/JdbcInterface");
#endif // JAVA_SUPPORT #endif // JAVA_SUPPORT
#if 0 // This is apparently not acceptable for a plugin // This is apparently not acceptable for a plugin so it is undocumented
#if defined(JAVA_SUPPORT) || defined(CMGO_SUPPORT)
// Enabling MONGO table type // Enabling MONGO table type
#if defined(MONGO_SUPPORT) || (MYSQL_VERSION_ID > 100200)
static MYSQL_THDVAR_BOOL(enable_mongo, PLUGIN_VAR_RQCMDARG, static MYSQL_THDVAR_BOOL(enable_mongo, PLUGIN_VAR_RQCMDARG,
"Enabling the MongoDB access", "Enabling the MongoDB access", NULL, NULL, 1);
NULL, NULL, MONGO_ENABLED); #else // !version 2,3
#endif // 0 static MYSQL_THDVAR_BOOL(enable_mongo, PLUGIN_VAR_RQCMDARG,
"Enabling the MongoDB access", NULL, NULL, 0);
#endif // !version 2,3
#endif // JAVA_SUPPORT || CMGO_SUPPORT
#if defined(XMSG) || defined(NEWMSG) #if defined(XMSG) || defined(NEWMSG)
const char *language_names[]= const char *language_names[]=
@@ -401,9 +429,10 @@ handlerton *connect_hton= NULL;
/***********************************************************************/ /***********************************************************************/
/* Function to export session variable values to other source files. */ /* Function to export session variable values to other source files. */
/***********************************************************************/ /***********************************************************************/
extern "C" int GetTraceValue(void) uint GetTraceValue(void)
{return connect_hton ? THDVAR(current_thd, xtrace) : 0;} {return (uint)(connect_hton ? THDVAR(current_thd, xtrace) : 0);}
bool ExactInfo(void) {return THDVAR(current_thd, exact_info);} bool ExactInfo(void) {return THDVAR(current_thd, exact_info);}
bool CondPushEnabled(void) {return THDVAR(current_thd, cond_push);}
USETEMP UseTemp(void) {return (USETEMP)THDVAR(current_thd, use_tempfile);} USETEMP UseTemp(void) {return (USETEMP)THDVAR(current_thd, use_tempfile);}
int GetConvSize(void) {return THDVAR(current_thd, conv_size);} int GetConvSize(void) {return THDVAR(current_thd, conv_size);}
TYPCONV GetTypeConv(void) {return (TYPCONV)THDVAR(current_thd, type_conv);} TYPCONV GetTypeConv(void) {return (TYPCONV)THDVAR(current_thd, type_conv);}
@@ -419,22 +448,20 @@ void SetWorkSize(uint)
push_warning(current_thd, Sql_condition::WARN_LEVEL_WARN, 0, push_warning(current_thd, Sql_condition::WARN_LEVEL_WARN, 0,
"Work size too big, try setting a smaller value"); "Work size too big, try setting a smaller value");
} // end of SetWorkSize } // end of SetWorkSize
#if defined(XMSG) || defined(NEWMSG)
extern "C" const char *msglang(void)
{
return language_names[THDVAR(current_thd, msg_lang)];
} // end of msglang
#else // !XMSG && !NEWMSG
#if defined(JAVA_SUPPORT) #if defined(JAVA_SUPPORT)
char *GetJavaWrapper(void) char *GetJavaWrapper(void)
{return connect_hton ? THDVAR(current_thd, java_wrapper) : (char*)"wrappers/JdbcInterface";} {return connect_hton ? THDVAR(current_thd, java_wrapper) : (char*)"wrappers/JdbcInterface";}
#endif // JAVA_SUPPORT #endif // JAVA_SUPPORT
#if defined(JAVA_SUPPORT) #if defined(JAVA_SUPPORT) || defined(CMGO_SUPPORT)
//bool MongoEnabled(void) { return THDVAR(current_thd, enable_mongo); } bool MongoEnabled(void) {return THDVAR(current_thd, enable_mongo);}
#endif // JAVA_SUPPORT #endif // JAVA_SUPPORT || CMGO_SUPPORT
#if defined(XMSG) || defined(NEWMSG)
extern "C" const char *msglang(void)
{return language_names[THDVAR(current_thd, msg_lang)];}
#else // !XMSG && !NEWMSG
extern "C" const char *msglang(void) extern "C" const char *msglang(void)
{ {
#if defined(FRENCH) #if defined(FRENCH)
@@ -726,7 +753,7 @@ static int connect_init_func(void *p)
connect_hton->tablefile_extensions= ha_connect_exts; connect_hton->tablefile_extensions= ha_connect_exts;
connect_hton->discover_table_structure= connect_assisted_discovery; connect_hton->discover_table_structure= connect_assisted_discovery;
if (trace) if (trace(128))
sql_print_information("connect_init: hton=%p", p); sql_print_information("connect_init: hton=%p", p);
DTVAL::SetTimeShift(); // Initialize time zone shift once for all DTVAL::SetTimeShift(); // Initialize time zone shift once for all
@@ -818,7 +845,7 @@ static handler* connect_create_handler(handlerton *hton,
{ {
handler *h= new (mem_root) ha_connect(hton, table); handler *h= new (mem_root) ha_connect(hton, table);
if (trace) if (trace(128))
htrc("New CONNECT %p, table: %.*s\n", h, htrc("New CONNECT %p, table: %.*s\n", h,
table ? table->table_name.length : 6, table ? table->table_name.length : 6,
table ? table->table_name.str : "<null>"); table ? table->table_name.str : "<null>");
@@ -874,7 +901,7 @@ ha_connect::ha_connect(handlerton *hton, TABLE_SHARE *table_arg)
/****************************************************************************/ /****************************************************************************/
ha_connect::~ha_connect(void) ha_connect::~ha_connect(void)
{ {
if (trace) if (trace(128))
htrc("Delete CONNECT %p, table: %.*s, xp=%p count=%d\n", this, htrc("Delete CONNECT %p, table: %.*s, xp=%p count=%d\n", this,
table ? table->s->table_name.length : 6, table ? table->s->table_name.length : 6,
table ? table->s->table_name.str : "<null>", table ? table->s->table_name.str : "<null>",
@@ -1658,7 +1685,7 @@ PIXDEF ha_connect::GetIndexInfo(TABLE_SHARE *s)
s= table->s; s= table->s;
for (int n= 0; (unsigned)n < s->keynames.count; n++) { for (int n= 0; (unsigned)n < s->keynames.count; n++) {
if (trace) if (trace(1))
htrc("Getting created index %d info\n", n + 1); htrc("Getting created index %d info\n", n + 1);
// Find the index to describe // Find the index to describe
@@ -2006,7 +2033,7 @@ bool ha_connect::CheckColumnList(PGLOBAL g)
} // endif } // endif
} catch (int n) { } catch (int n) {
if (trace) if (trace(1))
htrc("Exception %d: %s\n", n, g->Message); htrc("Exception %d: %s\n", n, g->Message);
brc = true; brc = true;
} catch (const char *msg) { } catch (const char *msg) {
@@ -2063,7 +2090,7 @@ int ha_connect::MakeRecord(char *buf)
PCOL colp= NULL; PCOL colp= NULL;
DBUG_ENTER("ha_connect::MakeRecord"); DBUG_ENTER("ha_connect::MakeRecord");
if (trace > 1) if (trace(2))
htrc("Maps: read=%08X write=%08X vcol=%08X defr=%08X defw=%08X\n", htrc("Maps: read=%08X write=%08X vcol=%08X defr=%08X defw=%08X\n",
*table->read_set->bitmap, *table->write_set->bitmap, *table->read_set->bitmap, *table->write_set->bitmap,
(table->vcol_set) ? *table->vcol_set->bitmap : 0, (table->vcol_set) ? *table->vcol_set->bitmap : 0,
@@ -2587,14 +2614,14 @@ PFIL ha_connect::CondFilter(PGLOBAL g, Item *cond)
if (!cond) if (!cond)
return NULL; return NULL;
if (trace) if (trace(1))
htrc("Cond type=%d\n", cond->type()); htrc("Cond type=%d\n", cond->type());
if (cond->type() == COND::COND_ITEM) { if (cond->type() == COND::COND_ITEM) {
PFIL fp; PFIL fp;
Item_cond *cond_item= (Item_cond *)cond; Item_cond *cond_item= (Item_cond *)cond;
if (trace) if (trace(1))
htrc("Cond: Ftype=%d name=%s\n", cond_item->functype(), htrc("Cond: Ftype=%d name=%s\n", cond_item->functype(),
cond_item->func_name()); cond_item->func_name());
@@ -2628,7 +2655,7 @@ PFIL ha_connect::CondFilter(PGLOBAL g, Item *cond)
Item_func *condf= (Item_func *)cond; Item_func *condf= (Item_func *)cond;
Item* *args= condf->arguments(); Item* *args= condf->arguments();
if (trace) if (trace(1))
htrc("Func type=%d argnum=%d\n", condf->functype(), htrc("Func type=%d argnum=%d\n", condf->functype(),
condf->argument_count()); condf->argument_count());
@@ -2657,11 +2684,11 @@ PFIL ha_connect::CondFilter(PGLOBAL g, Item *cond)
return NULL; return NULL;
for (i= 0; i < condf->argument_count(); i++) { for (i= 0; i < condf->argument_count(); i++) {
if (trace) if (trace(1))
htrc("Argtype(%d)=%d\n", i, args[i]->type()); htrc("Argtype(%d)=%d\n", i, args[i]->type());
if (i >= 2 && !ismul) { if (i >= 2 && !ismul) {
if (trace) if (trace(1))
htrc("Unexpected arg for vop=%d\n", vop); htrc("Unexpected arg for vop=%d\n", vop);
continue; continue;
@@ -2691,7 +2718,7 @@ PFIL ha_connect::CondFilter(PGLOBAL g, Item *cond)
break; break;
} // endswitch type } // endswitch type
if (trace) { if (trace(1)) {
htrc("Field index=%d\n", pField->field->field_index); htrc("Field index=%d\n", pField->field->field_index);
htrc("Field name=%s\n", pField->field->field_name); htrc("Field name=%s\n", pField->field->field_name);
} // endif trace } // endif trace
@@ -2738,7 +2765,7 @@ PFIL ha_connect::CondFilter(PGLOBAL g, Item *cond)
return NULL; return NULL;
} // endswitch type } // endswitch type
if (trace) if (trace(1))
htrc("Value type=%hd\n", pp->Type); htrc("Value type=%hd\n", pp->Type);
// Append the value to the argument list // Append the value to the argument list
@@ -2756,7 +2783,7 @@ PFIL ha_connect::CondFilter(PGLOBAL g, Item *cond)
filp= MakeFilter(g, colp, pop, pfirst, neg); filp= MakeFilter(g, colp, pop, pfirst, neg);
} else { } else {
if (trace) if (trace(1))
htrc("Unsupported condition\n"); htrc("Unsupported condition\n");
return NULL; return NULL;
@@ -2782,7 +2809,7 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, const Item *cond)
if (!cond) if (!cond)
return NULL; return NULL;
if (trace) if (trace(1))
htrc("Cond type=%d\n", cond->type()); htrc("Cond type=%d\n", cond->type());
if (cond->type() == COND::COND_ITEM) { if (cond->type() == COND::COND_ITEM) {
@@ -2795,7 +2822,7 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, const Item *cond)
else else
pb0= pb1= pb2= ph0= ph1= ph2= NULL; pb0= pb1= pb2= ph0= ph1= ph2= NULL;
if (trace) if (trace(1))
htrc("Cond: Ftype=%d name=%s\n", cond_item->functype(), htrc("Cond: Ftype=%d name=%s\n", cond_item->functype(),
cond_item->func_name()); cond_item->func_name());
@@ -2881,7 +2908,7 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, const Item *cond)
filp->Bd = filp->Hv = false; filp->Bd = filp->Hv = false;
if (trace) if (trace(1))
htrc("Func type=%d argnum=%d\n", condf->functype(), htrc("Func type=%d argnum=%d\n", condf->functype(),
condf->argument_count()); condf->argument_count());
@@ -2918,11 +2945,11 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, const Item *cond)
return NULL; return NULL;
for (i= 0; i < condf->argument_count(); i++) { for (i= 0; i < condf->argument_count(); i++) {
if (trace) if (trace(1))
htrc("Argtype(%d)=%d\n", i, args[i]->type()); htrc("Argtype(%d)=%d\n", i, args[i]->type());
if (i >= 2 && !ismul) { if (i >= 2 && !ismul) {
if (trace) if (trace(1))
htrc("Unexpected arg for vop=%d\n", vop); htrc("Unexpected arg for vop=%d\n", vop);
continue; continue;
@@ -2965,7 +2992,7 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, const Item *cond)
} // endif's } // endif's
if (trace) { if (trace(1)) {
htrc("Field index=%d\n", pField->field->field_index); htrc("Field index=%d\n", pField->field->field_index);
htrc("Field name=%s\n", pField->field->field_name); htrc("Field name=%s\n", pField->field->field_name);
htrc("Field type=%d\n", pField->field->type()); htrc("Field type=%d\n", pField->field->type());
@@ -3003,7 +3030,7 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, const Item *cond)
if ((res= pval->val_str(&tmp)) == NULL) if ((res= pval->val_str(&tmp)) == NULL)
return NULL; // To be clarified return NULL; // To be clarified
if (trace) if (trace(1))
htrc("Value=%.*s\n", res->length(), res->ptr()); htrc("Value=%.*s\n", res->length(), res->ptr());
// IN and BETWEEN clauses should be col VOP list // IN and BETWEEN clauses should be col VOP list
@@ -3144,7 +3171,7 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, const Item *cond)
filp->Bd = true; filp->Bd = true;
} else { } else {
if (trace) if (trace(1))
htrc("Unsupported condition\n"); htrc("Unsupported condition\n");
return NULL; return NULL;
@@ -3177,7 +3204,7 @@ const COND *ha_connect::cond_push(const COND *cond)
{ {
DBUG_ENTER("ha_connect::cond_push"); DBUG_ENTER("ha_connect::cond_push");
if (tdbp) { if (tdbp && CondPushEnabled()) {
PGLOBAL& g= xp->g; PGLOBAL& g= xp->g;
AMT tty= tdbp->GetAmType(); AMT tty= tdbp->GetAmType();
bool x= (tty == TYPE_AM_MYX || tty == TYPE_AM_XDBC); bool x= (tty == TYPE_AM_MYX || tty == TYPE_AM_XDBC);
@@ -3211,7 +3238,7 @@ const COND *ha_connect::cond_push(const COND *cond)
if (filp->Having && strlen(filp->Having) > 255) if (filp->Having && strlen(filp->Having) > 255)
goto fin; // Memory collapse goto fin; // Memory collapse
if (trace) if (trace(1))
htrc("cond_push: %s\n", filp->Body); htrc("cond_push: %s\n", filp->Body);
tdbp->SetCond(cond); tdbp->SetCond(cond);
@@ -3237,7 +3264,7 @@ const COND *ha_connect::cond_push(const COND *cond)
} // endif tty } // endif tty
} catch (int n) { } catch (int n) {
if (trace) if (trace(1))
htrc("Exception %d: %s\n", n, g->Message); htrc("Exception %d: %s\n", n, g->Message);
} catch (const char *msg) { } catch (const char *msg) {
strcpy(g->Message, msg); strcpy(g->Message, msg);
@@ -3290,7 +3317,7 @@ bool ha_connect::get_error_message(int error, String* buf)
&my_charset_latin1, &my_charset_latin1,
&dummy_errors); &dummy_errors);
if (trace) if (trace(1))
htrc("GEM(%d): len=%u %s\n", error, len, g->Message); htrc("GEM(%d): len=%u %s\n", error, len, g->Message);
msg[len]= '\0'; msg[len]= '\0';
@@ -3342,7 +3369,7 @@ int ha_connect::open(const char *name, int mode, uint test_if_locked)
int rc= 0; int rc= 0;
DBUG_ENTER("ha_connect::open"); DBUG_ENTER("ha_connect::open");
if (trace) if (trace(1))
htrc("open: name=%s mode=%d test=%u\n", name, mode, test_if_locked); htrc("open: name=%s mode=%d test=%u\n", name, mode, test_if_locked);
if (!(share= get_share())) if (!(share= get_share()))
@@ -3417,7 +3444,7 @@ int ha_connect::optimize(THD* thd, HA_CHECK_OPT*)
rc = HA_ERR_INTERNAL_ERROR; rc = HA_ERR_INTERNAL_ERROR;
} catch (int n) { } catch (int n) {
if (trace) if (trace(1))
htrc("Exception %d: %s\n", n, g->Message); htrc("Exception %d: %s\n", n, g->Message);
rc = HA_ERR_INTERNAL_ERROR; rc = HA_ERR_INTERNAL_ERROR;
} catch (const char *msg) { } catch (const char *msg) {
@@ -3565,7 +3592,7 @@ int ha_connect::update_row(const uchar *old_data, uchar *new_data)
PGLOBAL& g= xp->g; PGLOBAL& g= xp->g;
DBUG_ENTER("ha_connect::update_row"); DBUG_ENTER("ha_connect::update_row");
if (trace > 1) if (trace(2))
htrc("update_row: old=%s new=%s\n", old_data, new_data); htrc("update_row: old=%s new=%s\n", old_data, new_data);
// Check values for possible change in indexed column // Check values for possible change in indexed column
@@ -3626,7 +3653,7 @@ int ha_connect::index_init(uint idx, bool sorted)
PGLOBAL& g= xp->g; PGLOBAL& g= xp->g;
DBUG_ENTER("index_init"); DBUG_ENTER("index_init");
if (trace) if (trace(1))
htrc("index_init: this=%p idx=%u sorted=%d\n", this, idx, sorted); htrc("index_init: this=%p idx=%u sorted=%d\n", this, idx, sorted);
if (GetIndexType(GetRealType()) == 2) { if (GetIndexType(GetRealType()) == 2) {
@@ -3679,7 +3706,7 @@ int ha_connect::index_init(uint idx, bool sorted)
rc= 0; rc= 0;
} // endif indexing } // endif indexing
if (trace) if (trace(1))
htrc("index_init: rc=%d indexing=%d active_index=%d\n", htrc("index_init: rc=%d indexing=%d active_index=%d\n",
rc, indexing, active_index); rc, indexing, active_index);
@@ -3726,7 +3753,7 @@ int ha_connect::ReadIndexed(uchar *buf, OPVAL op, const key_range *kr)
break; break;
} // endswitch RC } // endswitch RC
if (trace > 1) if (trace(2))
htrc("ReadIndexed: op=%d rc=%d\n", op, rc); htrc("ReadIndexed: op=%d rc=%d\n", op, rc);
table->status= (rc == RC_OK) ? 0 : STATUS_NOT_FOUND; table->status= (rc == RC_OK) ? 0 : STATUS_NOT_FOUND;
@@ -3769,7 +3796,7 @@ int ha_connect::index_read(uchar * buf, const uchar * key, uint key_len,
default: DBUG_RETURN(-1); break; default: DBUG_RETURN(-1); break;
} // endswitch find_flag } // endswitch find_flag
if (trace > 1) if (trace(2))
htrc("%p index_read: op=%d\n", this, op); htrc("%p index_read: op=%d\n", this, op);
if (indexing > 0) { if (indexing > 0) {
@@ -3933,7 +3960,7 @@ int ha_connect::rnd_init(bool scan)
alter= 1; alter= 1;
} // endif xmod } // endif xmod
if (trace) if (trace(1))
htrc("rnd_init: this=%p scan=%d xmod=%d alter=%d\n", htrc("rnd_init: this=%p scan=%d xmod=%d alter=%d\n",
this, scan, xmod, alter); this, scan, xmod, alter);
@@ -4039,7 +4066,7 @@ int ha_connect::rnd_next(uchar *buf)
break; break;
} // endswitch RC } // endswitch RC
if (trace > 1 && (rc || !(xp->nrd++ % 16384))) { if (trace(2) && (rc || !(xp->nrd++ % 16384))) {
ulonglong tb2= my_interval_timer(); ulonglong tb2= my_interval_timer();
double elapsed= (double) (tb2 - xp->tb1) / 1000000000ULL; double elapsed= (double) (tb2 - xp->tb1) / 1000000000ULL;
DBUG_PRINT("rnd_next", ("rc=%d nrd=%u fnd=%u nfd=%u sec=%.3lf\n", DBUG_PRINT("rnd_next", ("rc=%d nrd=%u fnd=%u nfd=%u sec=%.3lf\n",
@@ -4083,7 +4110,7 @@ void ha_connect::position(const uchar *)
DBUG_ENTER("ha_connect::position"); DBUG_ENTER("ha_connect::position");
my_store_ptr(ref, ref_length, (my_off_t)tdbp->GetRecpos()); my_store_ptr(ref, ref_length, (my_off_t)tdbp->GetRecpos());
if (trace > 1) if (trace(2))
htrc("position: pos=%d\n", tdbp->GetRecpos()); htrc("position: pos=%d\n", tdbp->GetRecpos());
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
@@ -4113,7 +4140,7 @@ int ha_connect::rnd_pos(uchar *buf, uchar *pos)
DBUG_ENTER("ha_connect::rnd_pos"); DBUG_ENTER("ha_connect::rnd_pos");
if (!tdbp->SetRecpos(xp->g, (int)my_get_ptr(pos, ref_length))) { if (!tdbp->SetRecpos(xp->g, (int)my_get_ptr(pos, ref_length))) {
if (trace) if (trace(1))
htrc("rnd_pos: %d\n", tdbp->GetRecpos()); htrc("rnd_pos: %d\n", tdbp->GetRecpos());
tdbp->SetFilter(NULL); tdbp->SetFilter(NULL);
@@ -4179,7 +4206,7 @@ int ha_connect::info(uint flag)
DBUG_RETURN(HA_ERR_INTERNAL_ERROR); DBUG_RETURN(HA_ERR_INTERNAL_ERROR);
} // endif g } // endif g
if (trace) if (trace(1))
htrc("%p In info: flag=%u valid_info=%d\n", this, flag, valid_info); htrc("%p In info: flag=%u valid_info=%d\n", this, flag, valid_info);
// tdbp must be available to get updated info // tdbp must be available to get updated info
@@ -4372,54 +4399,59 @@ bool ha_connect::check_privileges(THD *thd, PTOS options, char *dbn, bool quick)
my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0), "--secure-file-priv"); my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0), "--secure-file-priv");
return true; return true;
} // endif path } // endif path
}
} // endif !quick
} else } else
return false; return false;
// check FILE_ACL // Fall through
// fall through
case TAB_ODBC:
case TAB_JDBC:
case TAB_MYSQL: case TAB_MYSQL:
case TAB_MONGO:
case TAB_DIR: case TAB_DIR:
case TAB_MAC:
case TAB_WMI:
case TAB_ZIP: case TAB_ZIP:
case TAB_OEM: case TAB_OEM:
#ifdef NO_EMBEDDED_ACCESS_CHECKS #ifdef NO_EMBEDDED_ACCESS_CHECKS
return false; return false;
#endif #endif
/*
If table or table->mdl_ticket is NULL - it's a DLL, e.g. CREATE TABLE.
if the table has an MDL_EXCLUSIVE lock - it's a DDL too, e.g. the
insert step of CREATE ... SELECT.
Otherwise it's a DML, the table was normally opened, locked, /*
privilege were already checked, and table->grant.privilege is set. Check FILE_ACL
With SQL SECURITY DEFINER, table->grant.privilege has definer's privileges. If table or table->mdl_ticket is NULL - it's a DLL, e.g. CREATE TABLE.
if the table has an MDL_EXCLUSIVE lock - it's a DDL too, e.g. the
insert step of CREATE ... SELECT.
Otherwise it's a DML, the table was normally opened, locked,
privilege were already checked, and table->grant.privilege is set.
With SQL SECURITY DEFINER, table->grant.privilege has definer's privileges.
Unless we're in prelocking mode, in this case table->grant.privilege
is only checked in start_stmt(), not in external_lock().
*/
if (!table || !table->mdl_ticket || table->mdl_ticket->get_type() == MDL_EXCLUSIVE)
return check_access(thd, FILE_ACL, db, NULL, NULL, 0, 0);
Unless we're in prelocking mode, in this case table->grant.privilege if ((!quick && thd->lex->requires_prelocking()) || table->grant.privilege & FILE_ACL)
is only checked in start_stmt(), not in external_lock(). return false;
*/
if (!table || !table->mdl_ticket || table->mdl_ticket->get_type() == MDL_EXCLUSIVE)
return check_access(thd, FILE_ACL, db, NULL, NULL, 0, 0);
if ((!quick && thd->lex->requires_prelocking()) || table->grant.privilege & FILE_ACL)
return false;
status_var_increment(thd->status_var.access_denied_errors);
my_error(access_denied_error_code(thd->password), MYF(0),
thd->security_ctx->priv_user, thd->security_ctx->priv_host,
(thd->password ? ER(ER_YES) : ER(ER_NO)));
return true;
// This is temporary until a solution is found status_var_increment(thd->status_var.access_denied_errors);
my_error(access_denied_error_code(thd->password), MYF(0),
thd->security_ctx->priv_user, thd->security_ctx->priv_host,
(thd->password ? ER(ER_YES) : ER(ER_NO)));
return true;
case TAB_ODBC:
case TAB_JDBC:
case TAB_MONGO:
case TAB_MAC:
case TAB_WMI:
return false;
case TAB_TBL: case TAB_TBL:
case TAB_XCL: case TAB_XCL:
case TAB_PRX: case TAB_PRX:
case TAB_OCCUR: case TAB_OCCUR:
case TAB_PIVOT: case TAB_PIVOT:
case TAB_VIR: case TAB_VIR:
return false; // This is temporary until a solution is found
return false;
} // endswitch type } // endswitch type
my_printf_error(ER_UNKNOWN_ERROR, "check_privileges failed", MYF(0)); my_printf_error(ER_UNKNOWN_ERROR, "check_privileges failed", MYF(0));
@@ -4457,7 +4489,7 @@ MODE ha_connect::CheckMode(PGLOBAL g, THD *thd,
#if defined(DEVELOPMENT) #if defined(DEVELOPMENT)
if (true) { if (true) {
#else #else
if (trace) { if (trace(65)) {
#endif #endif
LEX_STRING *query_string= thd_query_string(thd); LEX_STRING *query_string= thd_query_string(thd);
htrc("%p check_mode: cmdtype=%d\n", this, thd_sql_command(thd)); htrc("%p check_mode: cmdtype=%d\n", this, thd_sql_command(thd));
@@ -4578,7 +4610,7 @@ MODE ha_connect::CheckMode(PGLOBAL g, THD *thd,
} // endif's newmode } // endif's newmode
if (trace) if (trace(1))
htrc("New mode=%d\n", newmode); htrc("New mode=%d\n", newmode);
return newmode; return newmode;
@@ -4656,7 +4688,7 @@ int ha_connect::external_lock(THD *thd, int lock_type)
DBUG_ASSERT(thd == current_thd); DBUG_ASSERT(thd == current_thd);
if (trace) if (trace(1))
htrc("external_lock: this=%p thd=%p xp=%p g=%p lock_type=%d\n", htrc("external_lock: this=%p thd=%p xp=%p g=%p lock_type=%d\n",
this, thd, xp, g, lock_type); this, thd, xp, g, lock_type);
@@ -4849,7 +4881,7 @@ int ha_connect::external_lock(THD *thd, int lock_type)
if (cras) if (cras)
g->Createas= 1; // To tell created table to ignore FLAG g->Createas= 1; // To tell created table to ignore FLAG
if (trace) { if (trace(1)) {
#if 0 #if 0
htrc("xcheck=%d cras=%d\n", xcheck, cras); htrc("xcheck=%d cras=%d\n", xcheck, cras);
@@ -4882,7 +4914,7 @@ int ha_connect::external_lock(THD *thd, int lock_type)
// Delay open until used fields are known // Delay open until used fields are known
} // endif tdbp } // endif tdbp
if (trace) if (trace(1))
htrc("external_lock: rc=%d\n", rc); htrc("external_lock: rc=%d\n", rc);
DBUG_RETURN(rc); DBUG_RETURN(rc);
@@ -5018,7 +5050,7 @@ int ha_connect::delete_or_rename_table(const char *name, const char *to)
THD *thd= current_thd; THD *thd= current_thd;
int sqlcom= thd_sql_command(thd); int sqlcom= thd_sql_command(thd);
if (trace) { if (trace(1)) {
if (to) if (to)
htrc("rename_table: this=%p thd=%p sqlcom=%d from=%s to=%s\n", htrc("rename_table: this=%p thd=%p sqlcom=%d from=%s to=%s\n",
this, thd, sqlcom, name, to); this, thd, sqlcom, name, to);
@@ -5129,7 +5161,7 @@ ha_rows ha_connect::records_in_range(uint inx, key_range *min_key,
if (index_init(inx, false)) if (index_init(inx, false))
DBUG_RETURN(HA_POS_ERROR); DBUG_RETURN(HA_POS_ERROR);
if (trace) if (trace(1))
htrc("records_in_range: inx=%d indexing=%d\n", inx, indexing); htrc("records_in_range: inx=%d indexing=%d\n", inx, indexing);
if (indexing > 0) { if (indexing > 0) {
@@ -5158,7 +5190,7 @@ ha_rows ha_connect::records_in_range(uint inx, key_range *min_key,
else else
rows= HA_POS_ERROR; rows= HA_POS_ERROR;
if (trace) if (trace(1))
htrc("records_in_range: rows=%llu\n", rows); htrc("records_in_range: rows=%llu\n", rows);
DBUG_RETURN(rows); DBUG_RETURN(rows);
@@ -5380,7 +5412,7 @@ static int init_table_share(THD* thd,
} // endif charset } // endif charset
if (trace) if (trace(1))
htrc("s_init: %.*s\n", sql->length(), sql->ptr()); htrc("s_init: %.*s\n", sql->length(), sql->ptr());
return table_s->init_from_sql_statement_string(thd, true, return table_s->init_from_sql_statement_string(thd, true,
@@ -5413,7 +5445,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
#endif // __WIN__ #endif // __WIN__
//int hdr, mxe; //int hdr, mxe;
int port = 0, mxr = 0, rc = 0, mul = 0, lrecl = 0; int port = 0, mxr = 0, rc = 0, mul = 0, lrecl = 0;
PCSZ tabtyp = NULL; //PCSZ tabtyp = NULL;
#if defined(ODBC_SUPPORT) #if defined(ODBC_SUPPORT)
POPARM sop= NULL; POPARM sop= NULL;
PCSZ ucnc= NULL; PCSZ ucnc= NULL;
@@ -5477,7 +5509,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
#endif // __WIN__ #endif // __WIN__
port= atoi(GetListOption(g, "port", topt->oplist, "0")); port= atoi(GetListOption(g, "port", topt->oplist, "0"));
#if defined(ODBC_SUPPORT) #if defined(ODBC_SUPPORT)
tabtyp = GetListOption(g, "Tabtype", topt->oplist, NULL); // tabtyp = GetListOption(g, "Tabtype", topt->oplist, NULL);
mxr= atoi(GetListOption(g,"maxres", topt->oplist, "0")); mxr= atoi(GetListOption(g,"maxres", topt->oplist, "0"));
cto= atoi(GetListOption(g,"ConnectTimeout", topt->oplist, "-1")); cto= atoi(GetListOption(g,"ConnectTimeout", topt->oplist, "-1"));
qto= atoi(GetListOption(g,"QueryTimeout", topt->oplist, "-1")); qto= atoi(GetListOption(g,"QueryTimeout", topt->oplist, "-1"));
@@ -5790,7 +5822,8 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
break; break;
case FNC_TABLE: case FNC_TABLE:
qrp = JDBCTables(g, shm, tab, tabtyp, mxr, true, sjp); // qrp = JDBCTables(g, shm, tab, tabtyp, mxr, true, sjp);
qrp = JDBCTables(g, shm, tab, NULL, mxr, true, sjp);
break; break;
#if 0 #if 0
case FNC_DSN: case FNC_DSN:
@@ -6093,7 +6126,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
} // endif ok } // endif ok
} catch (int n) { } catch (int n) {
if (trace) if (trace(1))
htrc("Exception %d: %s\n", n, g->Message); htrc("Exception %d: %s\n", n, g->Message);
rc = HA_ERR_INTERNAL_ERROR; rc = HA_ERR_INTERNAL_ERROR;
} catch (const char *msg) { } catch (const char *msg) {
@@ -6189,7 +6222,7 @@ int ha_connect::create(const char *name, TABLE *table_arg,
table= table_arg; // Used by called functions table= table_arg; // Used by called functions
if (trace) if (trace(1))
htrc("create: this=%p thd=%p xp=%p g=%p sqlcom=%d name=%s\n", htrc("create: this=%p thd=%p xp=%p g=%p sqlcom=%d name=%s\n",
this, thd, xp, g, sqlcom, GetTableName()); this, thd, xp, g, sqlcom, GetTableName());
@@ -6572,7 +6605,7 @@ int ha_connect::create(const char *name, TABLE *table_arg,
} // endif sqlcom } // endif sqlcom
if (trace) if (trace(1))
htrc("xchk=%p createas=%d\n", g->Xchk, g->Createas); htrc("xchk=%p createas=%d\n", g->Xchk, g->Createas);
if (options->zipped) { if (options->zipped) {
@@ -6943,7 +6976,7 @@ ha_connect::check_if_supported_inplace_alter(TABLE *altered_table,
xcp->newsep= xcp->SetName(g, GetStringOption("optname")); xcp->newsep= xcp->SetName(g, GetStringOption("optname"));
tshp= NULL; tshp= NULL;
if (trace && g->Xchk) if (trace(1) && g->Xchk)
htrc( htrc(
"oldsep=%d newsep=%d oldopn=%s newopn=%s oldpix=%p newpix=%p\n", "oldsep=%d newsep=%d oldopn=%s newopn=%s oldpix=%p newpix=%p\n",
xcp->oldsep, xcp->newsep, xcp->oldsep, xcp->newsep,
@@ -7207,10 +7240,11 @@ static struct st_mysql_sys_var* connect_system_variables[]= {
MYSQL_SYSVAR(class_path), MYSQL_SYSVAR(class_path),
MYSQL_SYSVAR(java_wrapper), MYSQL_SYSVAR(java_wrapper),
#endif // JAVA_SUPPORT #endif // JAVA_SUPPORT
#if defined(JAVA_SUPPORT) #if defined(JAVA_SUPPORT) || defined(CMGO_SUPPORT)
//MYSQL_SYSVAR(enable_mongo), MYSQL_SYSVAR(enable_mongo),
#endif // JAVA_SUPPORT #endif // JAVA_SUPPORT || CMGO_SUPPORT
NULL MYSQL_SYSVAR(cond_push),
NULL
}; };
maria_declare_plugin(connect) maria_declare_plugin(connect)
@@ -7223,10 +7257,10 @@ maria_declare_plugin(connect)
PLUGIN_LICENSE_GPL, PLUGIN_LICENSE_GPL,
connect_init_func, /* Plugin Init */ connect_init_func, /* Plugin Init */
connect_done_func, /* Plugin Deinit */ connect_done_func, /* Plugin Deinit */
0x0106, /* version number (1.05) */ 0x0107, /* version number (1.05) */
NULL, /* status variables */ NULL, /* status variables */
connect_system_variables, /* system variables */ connect_system_variables, /* system variables */
"1.06.0005", /* string version */ "1.06.0007", /* string version */
MariaDB_PLUGIN_MATURITY_STABLE /* maturity */ MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
} }
maria_declare_plugin_end; maria_declare_plugin_end;

View File

@@ -293,7 +293,7 @@ static PROFILESECTION *PROFILE_Load( FILE *file )
next_key = &section->key; next_key = &section->key;
prev_key = NULL; prev_key = NULL;
if (trace > 1) if (trace(2))
htrc("New section: '%s'\n",section->name); htrc("New section: '%s'\n",section->name);
continue; continue;
@@ -336,7 +336,7 @@ static PROFILESECTION *PROFILE_Load( FILE *file )
next_key = &key->next; next_key = &key->next;
prev_key = key; prev_key = key;
if (trace > 1) if (trace(2))
htrc("New key: name='%s', value='%s'\n", htrc("New key: name='%s', value='%s'\n",
key->name,key->value?key->value:"(none)"); key->name,key->value?key->value:"(none)");
@@ -359,7 +359,7 @@ static BOOL PROFILE_FlushFile(void)
FILE *file = NULL; FILE *file = NULL;
struct stat buf; struct stat buf;
if (trace > 1) if (trace(2))
htrc("PROFILE_FlushFile: CurProfile=%p\n", CurProfile); htrc("PROFILE_FlushFile: CurProfile=%p\n", CurProfile);
if (!CurProfile) { if (!CurProfile) {
@@ -398,7 +398,7 @@ static BOOL PROFILE_FlushFile(void)
return FALSE; return FALSE;
} // endif !file } // endif !file
if (trace > 1) if (trace(2))
htrc("Saving '%s'\n", CurProfile->filename); htrc("Saving '%s'\n", CurProfile->filename);
PROFILE_Save(file, CurProfile->section); PROFILE_Save(file, CurProfile->section);
@@ -447,7 +447,7 @@ static BOOL PROFILE_Open(LPCSTR filename)
struct stat buf; struct stat buf;
PROFILE *tempProfile; PROFILE *tempProfile;
if (trace > 1) if (trace(2))
htrc("PROFILE_Open: CurProfile=%p N=%d\n", CurProfile, N_CACHED_PROFILES); htrc("PROFILE_Open: CurProfile=%p N=%d\n", CurProfile, N_CACHED_PROFILES);
/* First time around */ /* First time around */
@@ -468,7 +468,7 @@ static BOOL PROFILE_Open(LPCSTR filename)
/* Check for a match */ /* Check for a match */
for (i = 0; i < N_CACHED_PROFILES; i++) { for (i = 0; i < N_CACHED_PROFILES; i++) {
if (trace > 1) if (trace(2))
htrc("MRU=%s i=%d\n", SVP(MRUProfile[i]->filename), i); htrc("MRU=%s i=%d\n", SVP(MRUProfile[i]->filename), i);
if (MRUProfile[i]->filename && !strcmp(filename, MRUProfile[i]->filename)) { if (MRUProfile[i]->filename && !strcmp(filename, MRUProfile[i]->filename)) {
@@ -483,11 +483,11 @@ static BOOL PROFILE_Open(LPCSTR filename)
} // endif i } // endif i
if (!stat(CurProfile->filename, &buf) && CurProfile->mtime == buf.st_mtime) { if (!stat(CurProfile->filename, &buf) && CurProfile->mtime == buf.st_mtime) {
if (trace > 1) if (trace(2))
htrc("(%s): already opened (mru=%d)\n", filename, i); htrc("(%s): already opened (mru=%d)\n", filename, i);
} else { } else {
if (trace > 1) if (trace(2))
htrc("(%s): already opened, needs refreshing (mru=%d)\n", filename, i); htrc("(%s): already opened, needs refreshing (mru=%d)\n", filename, i);
} // endif stat } // endif stat
@@ -535,11 +535,11 @@ static BOOL PROFILE_Open(LPCSTR filename)
// strcpy(p, filename); // strcpy(p, filename);
// _strlwr(p); // _strlwr(p);
if (trace > 1) if (trace(2))
htrc("Opening %s\n", filename); htrc("Opening %s\n", filename);
if ((file = fopen(filename, "r"))) { if ((file = fopen(filename, "r"))) {
if (trace > 1) if (trace(2))
htrc("(%s): found it\n", filename); htrc("(%s): found it\n", filename);
// CurProfile->unix_name = malloc(strlen(buffer)+1); // CurProfile->unix_name = malloc(strlen(buffer)+1);
@@ -574,12 +574,12 @@ void PROFILE_Close(LPCSTR filename)
struct stat buf; struct stat buf;
PROFILE *tempProfile; PROFILE *tempProfile;
if (trace > 1) if (trace(2))
htrc("PROFILE_Close: CurProfile=%p N=%d\n", CurProfile, N_CACHED_PROFILES); htrc("PROFILE_Close: CurProfile=%p N=%d\n", CurProfile, N_CACHED_PROFILES);
/* Check for a match */ /* Check for a match */
for (i = 0; i < N_CACHED_PROFILES; i++) { for (i = 0; i < N_CACHED_PROFILES; i++) {
if (trace > 1) if (trace(2))
htrc("MRU=%s i=%d\n", SVP(MRUProfile[i]->filename), i); htrc("MRU=%s i=%d\n", SVP(MRUProfile[i]->filename), i);
if (MRUProfile[i]->filename && !strcmp(filename, MRUProfile[i]->filename)) { if (MRUProfile[i]->filename && !strcmp(filename, MRUProfile[i]->filename)) {
@@ -591,7 +591,7 @@ void PROFILE_Close(LPCSTR filename)
CurProfile=tempProfile; CurProfile=tempProfile;
} // endif i } // endif i
if (trace > 1) { if (trace(2)) {
if (!stat(CurProfile->filename, &buf) && CurProfile->mtime == buf.st_mtime) if (!stat(CurProfile->filename, &buf) && CurProfile->mtime == buf.st_mtime)
htrc("(%s): already opened (mru=%d)\n", filename, i); htrc("(%s): already opened (mru=%d)\n", filename, i);
else else
@@ -620,7 +620,7 @@ void PROFILE_End(void)
{ {
int i; int i;
if (trace) if (trace(3))
htrc("PROFILE_End: CurProfile=%p N=%d\n", CurProfile, N_CACHED_PROFILES); htrc("PROFILE_End: CurProfile=%p N=%d\n", CurProfile, N_CACHED_PROFILES);
if (!CurProfile) // Sergey Vojtovich if (!CurProfile) // Sergey Vojtovich
@@ -628,7 +628,7 @@ void PROFILE_End(void)
/* Close all opened files and free the cache structure */ /* Close all opened files and free the cache structure */
for (i = 0; i < N_CACHED_PROFILES; i++) { for (i = 0; i < N_CACHED_PROFILES; i++) {
if (trace) if (trace(3))
htrc("MRU=%s i=%d\n", SVP(MRUProfile[i]->filename), i); htrc("MRU=%s i=%d\n", SVP(MRUProfile[i]->filename), i);
// CurProfile = MRUProfile[i]; Sergey Vojtovich // CurProfile = MRUProfile[i]; Sergey Vojtovich
@@ -894,7 +894,7 @@ static int PROFILE_GetSectionNames(LPSTR buffer, uint len)
uint f,l; uint f,l;
PROFILESECTION *section; PROFILESECTION *section;
if (trace > 1) if (trace(2))
htrc("GetSectionNames: buffer=%p len=%u\n", buffer, len); htrc("GetSectionNames: buffer=%p len=%u\n", buffer, len);
if (!buffer || !len) if (!buffer || !len)
@@ -909,17 +909,17 @@ static int PROFILE_GetSectionNames(LPSTR buffer, uint len)
buf = buffer; buf = buffer;
section = CurProfile->section; section = CurProfile->section;
if (trace > 1) if (trace(2))
htrc("GetSectionNames: section=%p\n", section); htrc("GetSectionNames: section=%p\n", section);
while (section != NULL) { while (section != NULL) {
if (trace > 1) if (trace(2))
htrc("section=%s\n", section->name); htrc("section=%s\n", section->name);
if (section->name[0]) { if (section->name[0]) {
l = strlen(section->name) + 1; l = strlen(section->name) + 1;
if (trace > 1) if (trace(2))
htrc("l=%u f=%u\n", l, f); htrc("l=%u f=%u\n", l, f);
if (l > f) { if (l > f) {
@@ -982,7 +982,7 @@ static int PROFILE_GetString(LPCSTR section, LPCSTR key_name,
key = PROFILE_Find(&CurProfile->section, section, key_name, FALSE, FALSE); key = PROFILE_Find(&CurProfile->section, section, key_name, FALSE, FALSE);
PROFILE_CopyEntry(buffer, (key && key->value) ? key->value : def_val, len, FALSE); PROFILE_CopyEntry(buffer, (key && key->value) ? key->value : def_val, len, FALSE);
if (trace > 1) if (trace(2))
htrc("('%s','%s','%s'): returning '%s'\n", htrc("('%s','%s','%s'): returning '%s'\n",
section, key_name, def_val, buffer ); section, key_name, def_val, buffer );
@@ -1010,7 +1010,7 @@ static BOOL PROFILE_SetString(LPCSTR section_name, LPCSTR key_name,
LPCSTR value, BOOL create_always) LPCSTR value, BOOL create_always)
{ {
if (!key_name) { /* Delete a whole section */ if (!key_name) { /* Delete a whole section */
if (trace > 1) if (trace(2))
htrc("Deleting('%s')\n", section_name); htrc("Deleting('%s')\n", section_name);
CurProfile->changed |= PROFILE_DeleteSection(&CurProfile->section, CurProfile->changed |= PROFILE_DeleteSection(&CurProfile->section,
@@ -1018,7 +1018,7 @@ static BOOL PROFILE_SetString(LPCSTR section_name, LPCSTR key_name,
return TRUE; /* Even if PROFILE_DeleteSection() has failed, return TRUE; /* Even if PROFILE_DeleteSection() has failed,
this is not an error on application's level.*/ this is not an error on application's level.*/
} else if (!value) { /* Delete a key */ } else if (!value) { /* Delete a key */
if (trace > 1) if (trace(2))
htrc("Deleting('%s','%s')\n", section_name, key_name); htrc("Deleting('%s','%s')\n", section_name, key_name);
CurProfile->changed |= PROFILE_DeleteKey(&CurProfile->section, CurProfile->changed |= PROFILE_DeleteKey(&CurProfile->section,
@@ -1027,7 +1027,7 @@ static BOOL PROFILE_SetString(LPCSTR section_name, LPCSTR key_name,
} else { /* Set the key value */ } else { /* Set the key value */
PROFILEKEY *key = PROFILE_Find(&CurProfile->section, section_name, PROFILEKEY *key = PROFILE_Find(&CurProfile->section, section_name,
key_name, TRUE, create_always); key_name, TRUE, create_always);
if (trace > 1) if (trace(2))
htrc("Setting('%s','%s','%s')\n", section_name, key_name, value); htrc("Setting('%s','%s','%s')\n", section_name, key_name, value);
if (!key) if (!key)
@@ -1040,17 +1040,17 @@ static BOOL PROFILE_SetString(LPCSTR section_name, LPCSTR key_name,
value++; value++;
if (!strcmp(key->value, value)) { if (!strcmp(key->value, value)) {
if (trace > 1) if (trace(2))
htrc(" no change needed\n" ); htrc(" no change needed\n" );
return TRUE; /* No change needed */ return TRUE; /* No change needed */
} // endif value } // endif value
if (trace > 1) if (trace(2))
htrc(" replacing '%s'\n", key->value); htrc(" replacing '%s'\n", key->value);
free(key->value); free(key->value);
} else if (trace > 1) } else if (trace(2))
htrc(" creating key\n" ); htrc(" creating key\n" );
key->value = (char*)malloc(strlen(value) + 1); key->value = (char*)malloc(strlen(value) + 1);
@@ -1345,7 +1345,7 @@ GetPrivateProfileSectionNames(LPSTR buffer, DWORD size, LPCSTR filename)
{ {
DWORD ret = 0; DWORD ret = 0;
if (trace > 1) if (trace(2))
htrc("GPPSN: filename=%s\n", filename); htrc("GPPSN: filename=%s\n", filename);
EnterCriticalSection(&PROFILE_CritSect); EnterCriticalSection(&PROFILE_CritSect);

View File

@@ -363,7 +363,7 @@ bool JAVAConn::GetJVM(PGLOBAL g)
bool JAVAConn::Open(PGLOBAL g) bool JAVAConn::Open(PGLOBAL g)
{ {
bool brc = true, err = false; bool brc = true, err = false;
jboolean jt = (trace > 0); jboolean jt = (trace(1));
// Link or check whether jvm library was linked // Link or check whether jvm library was linked
if (GetJVM(g)) if (GetJVM(g))
@@ -430,7 +430,7 @@ bool JAVAConn::Open(PGLOBAL g)
jpop->Append(cp); jpop->Append(cp);
} // endif cp } // endif cp
if (trace) { if (trace(1)) {
htrc("ClassPath=%s\n", ClassPath); htrc("ClassPath=%s\n", ClassPath);
htrc("CLASSPATH=%s\n", cp); htrc("CLASSPATH=%s\n", cp);
htrc("%s\n", jpop->GetStr()); htrc("%s\n", jpop->GetStr());
@@ -486,7 +486,7 @@ bool JAVAConn::Open(PGLOBAL g)
break; break;
} // endswitch rc } // endswitch rc
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
if (brc) if (brc)

View File

@@ -1,7 +1,7 @@
/************ Jdbconn C++ Functions Source Code File (.CPP) ************/ /************ Jdbconn C++ Functions Source Code File (.CPP) ************/
/* Name: JDBCONN.CPP Version 1.1 */ /* Name: JDBCONN.CPP Version 1.2 */
/* */ /* */
/* (C) Copyright to the author Olivier BERTRAND 2016-2017 */ /* (C) Copyright to the author Olivier BERTRAND 2016-2018 */
/* */ /* */
/* This file contains the JDBC connection classes functions. */ /* This file contains the JDBC connection classes functions. */
/***********************************************************************/ /***********************************************************************/
@@ -116,10 +116,26 @@ int TranslateJDBCType(int stp, char *tn, int prec, int& len, char& v)
return TYPE_ERROR; return TYPE_ERROR;
else else
len = MY_MIN(abs(len), GetConvSize()); len = MY_MIN(abs(len), GetConvSize());
// Pass through // Pass through
case 12: // VARCHAR case 12: // VARCHAR
if (tn && !stricmp(tn, "TEXT"))
// Postgresql returns 12 for TEXT
if (GetTypeConv() == TPC_NO)
return TYPE_ERROR;
// Postgresql can return this
if (len == 0x7FFFFFFF)
len = GetConvSize();
// Pass through
case -9: // NVARCHAR (unicode) case -9: // NVARCHAR (unicode)
// Postgresql can return this when size is unknown
if (len == 0x7FFFFFFF)
len = GetConvSize();
v = 'V'; v = 'V';
// Pass through
case 1: // CHAR case 1: // CHAR
case -15: // NCHAR (unicode) case -15: // NCHAR (unicode)
case -8: // ROWID case -8: // ROWID
@@ -171,6 +187,14 @@ int TranslateJDBCType(int stp, char *tn, int prec, int& len, char& v)
case -5: // BIGINT case -5: // BIGINT
type = TYPE_BIGINT; type = TYPE_BIGINT;
break; break;
case 1111: // UNKNOWN or UUID
if (!tn || !stricmp(tn, "UUID")) {
type = TYPE_STRING;
len = 36;
break;
} // endif tn
// Pass through
case 0: // NULL case 0: // NULL
case -2: // BINARY case -2: // BINARY
case -4: // LONGVARBINARY case -4: // LONGVARBINARY
@@ -192,6 +216,104 @@ int TranslateJDBCType(int stp, char *tn, int prec, int& len, char& v)
return type; return type;
} // end of TranslateJDBCType } // end of TranslateJDBCType
/***********************************************************************/
/* A helper class to split an optionally qualified table name into */
/* components. */
/* These formats are understood: */
/* "CatalogName.SchemaName.TableName" */
/* "SchemaName.TableName" */
/* "TableName" */
/***********************************************************************/
class SQLQualifiedName {
static const uint max_parts = 3; // Catalog.Schema.Table
MYSQL_LEX_STRING m_part[max_parts];
char m_buf[512];
void lex_string_set(MYSQL_LEX_STRING *S, char *str, size_t length)
{
S->str = str;
S->length = length;
} // end of lex_string_set
void lex_string_shorten_down(MYSQL_LEX_STRING *S, size_t offs)
{
DBUG_ASSERT(offs <= S->length);
S->str += offs;
S->length -= offs;
} // end of lex_string_shorten_down
/*********************************************************************/
/* Find the rightmost '.' delimiter and return the length */
/* of the qualifier, including the rightmost '.' delimier. */
/* For example, for the string {"a.b.c",5} it will return 4, */
/* which is the length of the qualifier "a.b." */
/*********************************************************************/
size_t lex_string_find_qualifier(MYSQL_LEX_STRING *S)
{
size_t i;
for (i = S->length; i > 0; i--)
{
if (S->str[i - 1] == '.')
{
S->str[i - 1] = '\0';
return i;
}
}
return 0;
} // end of lex_string_find_qualifier
public:
/*********************************************************************/
/* Initialize to the given optionally qualified name. */
/* NULL pointer in "name" is supported. */
/* name qualifier has precedence over schema. */
/*********************************************************************/
SQLQualifiedName(JCATPARM *cap)
{
const char *name = (const char *)cap->Tab;
char *db = (char *)cap->DB;
size_t len, i;
// Initialize the parts
for (i = 0; i < max_parts; i++)
lex_string_set(&m_part[i], NULL, 0);
if (name) {
// Initialize the first (rightmost) part
lex_string_set(&m_part[0], m_buf,
strmake(m_buf, name, sizeof(m_buf) - 1) - m_buf);
// Initialize the other parts, if exist.
for (i = 1; i < max_parts; i++) {
if (!(len = lex_string_find_qualifier(&m_part[i - 1])))
break;
lex_string_set(&m_part[i], m_part[i - 1].str, len - 1);
lex_string_shorten_down(&m_part[i - 1], len);
} // endfor i
} // endif name
// If it was not specified, set schema as the passed db name
if (db && !m_part[1].length)
lex_string_set(&m_part[1], db, strlen(db));
} // end of SQLQualifiedName
char *ptr(uint i)
{
DBUG_ASSERT(i < max_parts);
return (char *)(m_part[i].length ? m_part[i].str : NULL);
} // end of ptr
size_t length(uint i)
{
DBUG_ASSERT(i < max_parts);
return m_part[i].length;
} // end of length
}; // end of class SQLQualifiedName
/***********************************************************************/ /***********************************************************************/
/* Allocate the structure used to refer to the result set. */ /* Allocate the structure used to refer to the result set. */
/***********************************************************************/ /***********************************************************************/
@@ -270,7 +392,7 @@ PQRYRES JDBCColumns(PGLOBAL g, PCSZ db, PCSZ table, PCSZ colpat,
length[11] = 255; length[11] = 255;
} // endif jcp } // endif jcp
if (trace) if (trace(1))
htrc("JDBCColumns: max=%d len=%d,%d,%d,%d\n", htrc("JDBCColumns: max=%d len=%d,%d,%d,%d\n",
maxres, length[0], length[1], length[2], length[3]); maxres, length[0], length[1], length[2], length[3]);
@@ -287,7 +409,7 @@ PQRYRES JDBCColumns(PGLOBAL g, PCSZ db, PCSZ table, PCSZ colpat,
if (info || !qrp) // Info table if (info || !qrp) // Info table
return qrp; return qrp;
if (trace) if (trace(1))
htrc("Getting col results ncol=%d\n", qrp->Nbcol); htrc("Getting col results ncol=%d\n", qrp->Nbcol);
if (!(cap = AllocCatInfo(g, JCAT_COL, db, table, qrp))) if (!(cap = AllocCatInfo(g, JCAT_COL, db, table, qrp)))
@@ -303,7 +425,7 @@ PQRYRES JDBCColumns(PGLOBAL g, PCSZ db, PCSZ table, PCSZ colpat,
qrp->Nblin = n; qrp->Nblin = n;
// ResetNullValues(cap); // ResetNullValues(cap);
if (trace) if (trace(1))
htrc("Columns: NBCOL=%d NBLIN=%d\n", qrp->Nbcol, qrp->Nblin); htrc("Columns: NBCOL=%d NBLIN=%d\n", qrp->Nbcol, qrp->Nblin);
} else } else
@@ -394,7 +516,7 @@ PQRYRES JDBCTables(PGLOBAL g, PCSZ db, PCSZ tabpat, PCSZ tabtyp,
length[4] = 255; length[4] = 255;
} // endif info } // endif info
if (trace) if (trace(1))
htrc("JDBCTables: max=%d len=%d,%d\n", maxres, length[0], length[1]); htrc("JDBCTables: max=%d len=%d,%d\n", maxres, length[0], length[1]);
/************************************************************************/ /************************************************************************/
@@ -417,7 +539,7 @@ PQRYRES JDBCTables(PGLOBAL g, PCSZ db, PCSZ tabpat, PCSZ tabtyp,
cap->Pat = tabtyp; cap->Pat = tabtyp;
if (trace) if (trace(1))
htrc("Getting table results ncol=%d\n", cap->Qrp->Nbcol); htrc("Getting table results ncol=%d\n", cap->Qrp->Nbcol);
/************************************************************************/ /************************************************************************/
@@ -427,7 +549,7 @@ PQRYRES JDBCTables(PGLOBAL g, PCSZ db, PCSZ tabpat, PCSZ tabtyp,
qrp->Nblin = n; qrp->Nblin = n;
// ResetNullValues(cap); // ResetNullValues(cap);
if (trace) if (trace(1))
htrc("Tables: NBCOL=%d NBLIN=%d\n", qrp->Nbcol, qrp->Nblin); htrc("Tables: NBCOL=%d NBLIN=%d\n", qrp->Nbcol, qrp->Nblin);
} else } else
@@ -475,7 +597,7 @@ PQRYRES JDBCDrivers(PGLOBAL g, int maxres, bool info)
} else } else
maxres = 0; maxres = 0;
if (trace) if (trace(1))
htrc("JDBCDrivers: max=%d len=%d\n", maxres, length[0]); htrc("JDBCDrivers: max=%d len=%d\n", maxres, length[0]);
/************************************************************************/ /************************************************************************/
@@ -519,7 +641,7 @@ JDBConn::JDBConn(PGLOBAL g, PCSZ wrapper) : JAVAConn(g, wrapper)
xqid = xuid = xid = grs = readid = fetchid = typid = errid = nullptr; xqid = xuid = xid = grs = readid = fetchid = typid = errid = nullptr;
prepid = xpid = pcid = nullptr; prepid = xpid = pcid = nullptr;
chrfldid = intfldid = dblfldid = fltfldid = bigfldid = nullptr; chrfldid = intfldid = dblfldid = fltfldid = bigfldid = nullptr;
objfldid = datfldid = timfldid = tspfldid = nullptr; objfldid = datfldid = timfldid = tspfldid = uidfldid = nullptr;
DiscFunc = "JdbcDisconnect"; DiscFunc = "JdbcDisconnect";
m_Ncol = 0; m_Ncol = 0;
m_Aff = 0; m_Aff = 0;
@@ -535,12 +657,84 @@ JDBConn::JDBConn(PGLOBAL g, PCSZ wrapper) : JAVAConn(g, wrapper)
m_IDQuoteChar[1] = 0; m_IDQuoteChar[1] = 0;
} // end of JDBConn } // end of JDBConn
//JDBConn::~JDBConn() /***********************************************************************/
// { /* Search for UUID columns. */
//if (Connected()) /***********************************************************************/
// EndCom(); bool JDBConn::SetUUID(PGLOBAL g, PTDBJDBC tjp)
{
int ncol, ctyp;
bool brc = true;
PCSZ fnc = "GetColumns";
PCOL colp;
JCATPARM *cap;
//jint jtyp;
jboolean rc = false;
jobjectArray parms;
jmethodID catid = nullptr;
// } // end of ~JDBConn if (gmID(g, catid, fnc, "([Ljava/lang/String;)I"))
return true;
else if (gmID(g, intfldid, "IntField", "(ILjava/lang/String;)I"))
return true;
else if (gmID(g, readid, "ReadNext", "()I"))
return true;
cap = AllocCatInfo(g, JCAT_COL, tjp->Schema, tjp->TableName, NULL);
SQLQualifiedName name(cap);
// Build the java string array
parms = env->NewObjectArray(4, env->FindClass("java/lang/String"), NULL);
env->SetObjectArrayElement(parms, 0, env->NewStringUTF(name.ptr(2)));
env->SetObjectArrayElement(parms, 1, env->NewStringUTF(name.ptr(1)));
env->SetObjectArrayElement(parms, 2, env->NewStringUTF(name.ptr(0)));
for (colp = tjp->GetColumns(); colp; colp = colp->GetNext()) {
env->SetObjectArrayElement(parms, 3, env->NewStringUTF(colp->GetName()));
ncol = env->CallIntMethod(job, catid, parms);
if (Check(ncol)) {
sprintf(g->Message, "%s: %s", fnc, Msg);
goto err;
} // endif Check
rc = env->CallBooleanMethod(job, readid);
if (Check(rc)) {
sprintf(g->Message, "ReadNext: %s", Msg);
goto err;
} else if (rc == 0) {
sprintf(g->Message, "table %s does not exist", tjp->TableName);
goto err;
} // endif rc
// Returns 666 is case of error
//jtyp = env->CallIntMethod(job, typid, 5, nullptr);
//if (Check((jtyp == 666) ? -1 : 1)) {
// sprintf(g->Message, "Getting jtyp: %s", Msg);
// goto err;
//} // endif ctyp
ctyp = (int)env->CallIntMethod(job, intfldid, 5, nullptr);
if (Check(ctyp)) {
sprintf(g->Message, "Getting ctyp: %s", Msg);
goto err;
} // endif ctyp
if (ctyp == 1111)
((PJDBCCOL)colp)->uuid = true;
} // endfor colp
// All is Ok
brc = false;
err:
// Not used anymore
env->DeleteLocalRef(parms);
return brc;
} // end of SetUUID
/***********************************************************************/ /***********************************************************************/
/* Utility routine. */ /* Utility routine. */
@@ -586,7 +780,7 @@ bool JDBConn::Connect(PJPARM sop)
int irc = RC_FX; int irc = RC_FX;
bool err = false; bool err = false;
jint rc; jint rc;
jboolean jt = (trace > 0); jboolean jt = (trace(1));
PGLOBAL& g = m_G; PGLOBAL& g = m_G;
/*******************************************************************/ /*******************************************************************/
@@ -770,6 +964,7 @@ int JDBConn::Rewind(PCSZ sql)
/***********************************************************************/ /***********************************************************************/
void JDBConn::SetColumnValue(int rank, PSZ name, PVAL val) void JDBConn::SetColumnValue(int rank, PSZ name, PVAL val)
{ {
const char *field;
PGLOBAL& g = m_G; PGLOBAL& g = m_G;
jint ctyp; jint ctyp;
jstring cn, jn = nullptr; jstring cn, jn = nullptr;
@@ -793,6 +988,11 @@ void JDBConn::SetColumnValue(int rank, PSZ name, PVAL val)
if (!gmID(g, objfldid, "ObjectField", "(ILjava/lang/String;)Ljava/lang/Object;")) { if (!gmID(g, objfldid, "ObjectField", "(ILjava/lang/String;)Ljava/lang/Object;")) {
jb = env->CallObjectMethod(job, objfldid, (jint)rank, jn); jb = env->CallObjectMethod(job, objfldid, (jint)rank, jn);
if (Check(0)) {
sprintf(g->Message, "Getting jp: %s", Msg);
throw (int)TYPE_AM_JDBC;
} // endif Check
if (jb == nullptr) { if (jb == nullptr) {
val->Reset(); val->Reset();
val->SetNull(true); val->SetNull(true);
@@ -818,7 +1018,7 @@ void JDBConn::SetColumnValue(int rank, PSZ name, PVAL val)
cn = nullptr; cn = nullptr;
if (cn) { if (cn) {
const char *field = env->GetStringUTFChars(cn, (jboolean)false); field = env->GetStringUTFChars(cn, (jboolean)false);
val->SetValue_psz((PSZ)field); val->SetValue_psz((PSZ)field);
} else } else
val->Reset(); val->Reset();
@@ -885,6 +1085,19 @@ void JDBConn::SetColumnValue(int rank, PSZ name, PVAL val)
break; break;
case java.sql.Types.BOOLEAN: case java.sql.Types.BOOLEAN:
System.out.print(jdi.BooleanField(i)); */ System.out.print(jdi.BooleanField(i)); */
case 1111: // UUID
if (!gmID(g, uidfldid, "UuidField", "(ILjava/lang/String;)Ljava/lang/String;"))
cn = (jstring)env->CallObjectMethod(job, uidfldid, (jint)rank, jn);
else
cn = nullptr;
if (cn) {
const char *field = env->GetStringUTFChars(cn, (jboolean)false);
val->SetValue_psz((PSZ)field);
} else
val->Reset();
break;
case 0: // NULL case 0: // NULL
val->SetNull(true); val->SetNull(true);
// passthru // passthru
@@ -1055,7 +1268,14 @@ bool JDBConn::SetParam(JDBCCOL *colp)
if (gmID(g, setid, "SetNullParm", "(II)I")) if (gmID(g, setid, "SetNullParm", "(II)I"))
return true; return true;
jrc = env->CallIntMethod(job, setid, i, (jint)GetJDBCType(val->GetType())); jrc = env->CallIntMethod(job, setid, i,
(colp->uuid ? 1111 : (jint)GetJDBCType(val->GetType())));
} else if (colp->uuid) {
if (gmID(g, setid, "SetUuidParm", "(ILjava/lang/String;)V"))
return true;
jst = env->NewStringUTF(val->GetCharValue());
env->CallVoidMethod(job, setid, i, jst);
} else switch (val->GetType()) { } else switch (val->GetType()) {
case TYPE_STRING: case TYPE_STRING:
if (gmID(g, setid, "SetStringParm", "(ILjava/lang/String;)V")) if (gmID(g, setid, "SetStringParm", "(ILjava/lang/String;)V"))
@@ -1274,105 +1494,6 @@ bool JDBConn::SetParam(JDBCCOL *colp)
return qrp; return qrp;
} // end of GetMetaData } // end of GetMetaData
/***********************************************************************/
/* A helper class to split an optionally qualified table name into */
/* components. */
/* These formats are understood: */
/* "CatalogName.SchemaName.TableName" */
/* "SchemaName.TableName" */
/* "TableName" */
/***********************************************************************/
class SQLQualifiedName
{
static const uint max_parts= 3; // Catalog.Schema.Table
MYSQL_LEX_STRING m_part[max_parts];
char m_buf[512];
void lex_string_set(MYSQL_LEX_STRING *S, char *str, size_t length)
{
S->str= str;
S->length= length;
} // end of lex_string_set
void lex_string_shorten_down(MYSQL_LEX_STRING *S, size_t offs)
{
DBUG_ASSERT(offs <= S->length);
S->str+= offs;
S->length-= offs;
} // end of lex_string_shorten_down
/*********************************************************************/
/* Find the rightmost '.' delimiter and return the length */
/* of the qualifier, including the rightmost '.' delimier. */
/* For example, for the string {"a.b.c",5} it will return 4, */
/* which is the length of the qualifier "a.b." */
/*********************************************************************/
size_t lex_string_find_qualifier(MYSQL_LEX_STRING *S)
{
size_t i;
for (i= S->length; i > 0; i--)
{
if (S->str[i - 1] == '.')
{
S->str[i - 1]= '\0';
return i;
}
}
return 0;
} // end of lex_string_find_qualifier
public:
/*********************************************************************/
/* Initialize to the given optionally qualified name. */
/* NULL pointer in "name" is supported. */
/* name qualifier has precedence over schema. */
/*********************************************************************/
SQLQualifiedName(JCATPARM *cap)
{
const char *name = (const char *)cap->Tab;
char *db = (char *)cap->DB;
size_t len, i;
// Initialize the parts
for (i = 0; i < max_parts; i++)
lex_string_set(&m_part[i], NULL, 0);
if (name) {
// Initialize the first (rightmost) part
lex_string_set(&m_part[0], m_buf,
strmake(m_buf, name, sizeof(m_buf) - 1) - m_buf);
// Initialize the other parts, if exist.
for (i= 1; i < max_parts; i++) {
if (!(len= lex_string_find_qualifier(&m_part[i - 1])))
break;
lex_string_set(&m_part[i], m_part[i - 1].str, len - 1);
lex_string_shorten_down(&m_part[i - 1], len);
} // endfor i
} // endif name
// If it was not specified, set schema as the passed db name
if (db && !m_part[1].length)
lex_string_set(&m_part[1], db, strlen(db));
} // end of SQLQualifiedName
char *ptr(uint i)
{
DBUG_ASSERT(i < max_parts);
return (char *)(m_part[i].length ? m_part[i].str : NULL);
} // end of ptr
size_t length(uint i)
{
DBUG_ASSERT(i < max_parts);
return m_part[i].length;
} // end of length
}; // end of class SQLQualifiedName
/***********************************************************************/ /***********************************************************************/
/* Allocate recset and call SQLTables, SQLColumns or SQLPrimaryKeys. */ /* Allocate recset and call SQLTables, SQLColumns or SQLPrimaryKeys. */
/***********************************************************************/ /***********************************************************************/
@@ -1443,7 +1564,7 @@ bool JDBConn::SetParam(JDBCCOL *colp)
// Not used anymore // Not used anymore
env->DeleteLocalRef(parms); env->DeleteLocalRef(parms);
if (trace) if (trace(1))
htrc("Method %s returned %d columns\n", fnc, ncol); htrc("Method %s returned %d columns\n", fnc, ncol);
// n because we no more ignore the first column // n because we no more ignore the first column
@@ -1488,7 +1609,7 @@ bool JDBConn::SetParam(JDBCCOL *colp)
sprintf(g->Message, "Fetch: %s", Msg); sprintf(g->Message, "Fetch: %s", Msg);
return -1; return -1;
} if (rc == 0) { } if (rc == 0) {
if (trace) if (trace(1))
htrc("End of fetches i=%d\n", i); htrc("End of fetches i=%d\n", i);
break; break;

View File

@@ -29,6 +29,7 @@ public:
// Attributes // Attributes
public: public:
char *GetQuoteChar(void) { return m_IDQuoteChar; } char *GetQuoteChar(void) { return m_IDQuoteChar; }
bool SetUUID(PGLOBAL g, PTDBJDBC tjp);
virtual int GetMaxValue(int infotype); virtual int GetMaxValue(int infotype);
public: public:
@@ -58,13 +59,6 @@ public:
protected: protected:
// Members // Members
#if 0
JavaVM *jvm; // Pointer to the JVM (Java Virtual Machine)
JNIEnv *env; // Pointer to native interface
jclass jdi; // Pointer to the java wrapper class
jobject job; // The java wrapper class object
jmethodID errid; // The GetErrmsg method ID
#endif // 0
jmethodID xqid; // The ExecuteQuery method ID jmethodID xqid; // The ExecuteQuery method ID
jmethodID xuid; // The ExecuteUpdate method ID jmethodID xuid; // The ExecuteUpdate method ID
jmethodID xid; // The Execute method ID jmethodID xid; // The Execute method ID
@@ -84,8 +78,7 @@ protected:
jmethodID timfldid; // The TimeField method ID jmethodID timfldid; // The TimeField method ID
jmethodID tspfldid; // The TimestampField method ID jmethodID tspfldid; // The TimestampField method ID
jmethodID bigfldid; // The BigintField method ID jmethodID bigfldid; // The BigintField method ID
// PCSZ Msg; jmethodID uidfldid; // The UuidField method ID
// PCSZ m_Wrap;
char m_IDQuoteChar[2]; char m_IDQuoteChar[2];
PCSZ m_Pwd; PCSZ m_Pwd;
int m_Ncol; int m_Ncol;

View File

@@ -298,7 +298,7 @@ int JMGFAM::ReadBuffer(PGLOBAL g)
PSZ str = Jcp->GetDocument(); PSZ str = Jcp->GetDocument();
if (str) { if (str) {
if (trace == 1) if (trace(1))
htrc("%s\n", str); htrc("%s\n", str);
strncpy(Tdbp->GetLine(), str, Lrecl); strncpy(Tdbp->GetLine(), str, Lrecl);

View File

@@ -254,7 +254,7 @@ bool JMgoConn::MakeCursor(PGLOBAL g, PTDB tdbp, PCSZ options,
all = true; all = true;
if (pipe && Options) { if (pipe && Options) {
if (trace) if (trace(1))
htrc("Pipeline: %s\n", Options); htrc("Pipeline: %s\n", Options);
p = strrchr(Options, ']'); p = strrchr(Options, ']');
@@ -312,13 +312,13 @@ bool JMgoConn::MakeCursor(PGLOBAL g, PTDB tdbp, PCSZ options,
*(char*)p = ']'; // Restore Colist for discovery *(char*)p = ']'; // Restore Colist for discovery
p = s->GetStr(); p = s->GetStr();
if (trace) if (trace(33))
htrc("New Pipeline: %s\n", p); htrc("New Pipeline: %s\n", p);
return AggregateCollection(p); return AggregateCollection(p);
} else { } else {
if (filter || filp) { if (filter || filp) {
if (trace) { if (trace(1)) {
if (filter) if (filter)
htrc("Filter: %s\n", filter); htrc("Filter: %s\n", filter);
@@ -346,7 +346,7 @@ bool JMgoConn::MakeCursor(PGLOBAL g, PTDB tdbp, PCSZ options,
tdbp->SetFilter(NULL); // Not needed anymore tdbp->SetFilter(NULL); // Not needed anymore
} // endif To_Filter } // endif To_Filter
if (trace) if (trace(33))
htrc("selector: %s\n", s->GetStr()); htrc("selector: %s\n", s->GetStr());
s->Resize(s->GetLength() + 1); s->Resize(s->GetLength() + 1);
@@ -355,7 +355,7 @@ bool JMgoConn::MakeCursor(PGLOBAL g, PTDB tdbp, PCSZ options,
if (!all) { if (!all) {
if (Options && *Options) { if (Options && *Options) {
if (trace) if (trace(1))
htrc("options=%s\n", Options); htrc("options=%s\n", Options);
op = Options; op = Options;
@@ -751,7 +751,7 @@ int JMgoConn::DocUpdate(PGLOBAL g, PTDB tdbp)
jlong ar = env->CallLongMethod(job, updateid, upd); jlong ar = env->CallLongMethod(job, updateid, upd);
if (trace) if (trace(1))
htrc("DocUpdate: ar = %ld\n", ar); htrc("DocUpdate: ar = %ld\n", ar);
if (Check((int)ar)) { if (Check((int)ar)) {
@@ -770,7 +770,7 @@ int JMgoConn::DocDelete(PGLOBAL g, bool all)
int rc = RC_OK; int rc = RC_OK;
jlong ar = env->CallLongMethod(job, deleteid, all); jlong ar = env->CallLongMethod(job, deleteid, all);
if (trace) if (trace(1))
htrc("DocDelete: ar = %ld\n", ar); htrc("DocDelete: ar = %ld\n", ar);
if (Check((int)ar)) { if (Check((int)ar)) {

View File

@@ -97,7 +97,7 @@ PJSON ParseJson(PGLOBAL g, char *s, int len, int *ptyp, bool *comma)
PJSON jsp = NULL; PJSON jsp = NULL;
STRG src; STRG src;
if (trace) if (trace(1))
htrc("ParseJson: s=%.10s len=%d\n", s, len); htrc("ParseJson: s=%.10s len=%d\n", s, len);
if (!s || !len) { if (!s || !len) {
@@ -165,7 +165,7 @@ PJSON ParseJson(PGLOBAL g, char *s, int len, int *ptyp, bool *comma)
}; // endswitch s[i] }; // endswitch s[i]
if (!jsp) if (!jsp)
sprintf(g->Message, "Invalid Json string '%.*s'", 50, s); sprintf(g->Message, "Invalid Json string '%.*s'", MY_MIN(len, 50), s);
else if (ptyp && pretty == 3) { else if (ptyp && pretty == 3) {
*ptyp = 3; // Not recognized pretty *ptyp = 3; // Not recognized pretty
@@ -178,7 +178,7 @@ PJSON ParseJson(PGLOBAL g, char *s, int len, int *ptyp, bool *comma)
} // endif ptyp } // endif ptyp
} catch (int n) { } catch (int n) {
if (trace) if (trace(1))
htrc("Exception %d: %s\n", n, g->Message); htrc("Exception %d: %s\n", n, g->Message);
jsp = NULL; jsp = NULL;
} catch (const char *msg) { } catch (const char *msg) {
@@ -652,7 +652,7 @@ PSZ Serialize(PGLOBAL g, PJSON jsp, char *fn, int pretty)
} // endif's } // endif's
} catch (int n) { } catch (int n) {
if (trace) if (trace(1))
htrc("Exception %d: %s\n", n, g->Message); htrc("Exception %d: %s\n", n, g->Message);
str = NULL; str = NULL;
} catch (const char *msg) { } catch (const char *msg) {
@@ -1015,6 +1015,20 @@ PJAR JOBJECT::GetKeyList(PGLOBAL g)
return jarp; return jarp;
} // end of GetKeyList } // end of GetKeyList
/***********************************************************************/
/* Return all values as an array. */
/***********************************************************************/
PJAR JOBJECT::GetValList(PGLOBAL g)
{
PJAR jarp = new(g) JARRAY();
for (PJPR jpp = First; jpp; jpp = jpp->Next)
jarp->AddValue(g, jpp->GetVal());
jarp->InitArray(g);
return jarp;
} // end of GetValList
/***********************************************************************/ /***********************************************************************/
/* Get the value corresponding to the given key. */ /* Get the value corresponding to the given key. */
/***********************************************************************/ /***********************************************************************/
@@ -1224,6 +1238,7 @@ PJVAL JARRAY::AddValue(PGLOBAL g, PJVAL jvp, int *x)
Last->Next = jvp; Last->Next = jvp;
Last = jvp; Last = jvp;
Last->Next = NULL;
} // endif x } // endif x
return jvp; return jvp;
@@ -1318,6 +1333,24 @@ bool JARRAY::IsNull(void)
/* -------------------------- Class JVALUE- -------------------------- */ /* -------------------------- Class JVALUE- -------------------------- */
/***********************************************************************/
/* Constructor for a JSON. */
/***********************************************************************/
JVALUE::JVALUE(PJSON jsp) : JSON()
{
if (jsp->GetType() == TYPE_JVAL) {
Jsp = jsp->GetJsp();
Value = jsp->GetValue();
} else {
Jsp = jsp;
Value = NULL;
} // endif Type
Next = NULL;
Del = false;
Size = 1;
} // end of JVALUE constructor
/***********************************************************************/ /***********************************************************************/
/* Constructor for a Value with a given string or numeric value. */ /* Constructor for a Value with a given string or numeric value. */
/***********************************************************************/ /***********************************************************************/

View File

@@ -20,7 +20,8 @@ enum JTYP {TYPE_NULL = TYPE_VOID,
TYPE_BINT = TYPE_BIGINT, TYPE_BINT = TYPE_BIGINT,
TYPE_DTM = TYPE_DATE, TYPE_DTM = TYPE_DATE,
TYPE_INTG = TYPE_INT, TYPE_INTG = TYPE_INT,
TYPE_JSON = 12, TYPE_VAL = 12,
TYPE_JSON,
TYPE_JAR, TYPE_JAR,
TYPE_JOB, TYPE_JOB,
TYPE_JVAL}; TYPE_JVAL};
@@ -160,6 +161,7 @@ class JSON : public BLOCK {
//virtual PJVAL AddValue(PGLOBAL g, PJVAL jvp = NULL, int *x = NULL) {X return NULL;} //virtual PJVAL AddValue(PGLOBAL g, PJVAL jvp = NULL, int *x = NULL) {X return NULL;}
virtual PJPR AddPair(PGLOBAL g, PCSZ key) {X return NULL;} virtual PJPR AddPair(PGLOBAL g, PCSZ key) {X return NULL;}
virtual PJAR GetKeyList(PGLOBAL g) {X return NULL;} virtual PJAR GetKeyList(PGLOBAL g) {X return NULL;}
virtual PJAR GetValList(PGLOBAL g) {X return NULL;}
virtual PJVAL GetValue(const char *key) {X return NULL;} virtual PJVAL GetValue(const char *key) {X return NULL;}
virtual PJOB GetObject(void) {return NULL;} virtual PJOB GetObject(void) {return NULL;}
virtual PJAR GetArray(void) {return NULL;} virtual PJAR GetArray(void) {return NULL;}
@@ -208,6 +210,7 @@ class JOBJECT : public JSON {
virtual PJOB GetObject(void) {return this;} virtual PJOB GetObject(void) {return this;}
virtual PJVAL GetValue(const char* key); virtual PJVAL GetValue(const char* key);
virtual PJAR GetKeyList(PGLOBAL g); virtual PJAR GetKeyList(PGLOBAL g);
virtual PJAR GetValList(PGLOBAL g);
virtual PSZ GetText(PGLOBAL g, PSZ text); virtual PSZ GetText(PGLOBAL g, PSZ text);
virtual bool Merge(PGLOBAL g, PJSON jsp); virtual bool Merge(PGLOBAL g, PJSON jsp);
virtual void SetValue(PGLOBAL g, PJVAL jvp, PCSZ key); virtual void SetValue(PGLOBAL g, PJVAL jvp, PCSZ key);
@@ -261,8 +264,7 @@ class JVALUE : public JSON {
friend bool SerializeValue(JOUT *, PJVAL); friend bool SerializeValue(JOUT *, PJVAL);
public: public:
JVALUE(void) : JSON() {Clear();} JVALUE(void) : JSON() {Clear();}
JVALUE(PJSON jsp) : JSON() JVALUE(PJSON jsp);
{Jsp = jsp; Value = NULL; Next = NULL; Del = false; Size = 1;}
JVALUE(PGLOBAL g, PVAL valp); JVALUE(PGLOBAL g, PVAL valp);
JVALUE(PGLOBAL g, PCSZ strp); JVALUE(PGLOBAL g, PCSZ strp);

File diff suppressed because it is too large Load Diff

View File

@@ -89,6 +89,10 @@ extern "C" {
DllExport char *json_object_list(UDF_EXEC_ARGS); DllExport char *json_object_list(UDF_EXEC_ARGS);
DllExport void json_object_list_deinit(UDF_INIT*); DllExport void json_object_list_deinit(UDF_INIT*);
DllExport my_bool json_object_values_init(UDF_INIT*, UDF_ARGS*, char*);
DllExport char *json_object_values(UDF_EXEC_ARGS);
DllExport void json_object_values_deinit(UDF_INIT*);
DllExport my_bool jsonset_grp_size_init(UDF_INIT*, UDF_ARGS*, char*); DllExport my_bool jsonset_grp_size_init(UDF_INIT*, UDF_ARGS*, char*);
DllExport long long jsonset_grp_size(UDF_INIT*, UDF_ARGS*, char*, char*); DllExport long long jsonset_grp_size(UDF_INIT*, UDF_ARGS*, char*, char*);

View File

@@ -194,7 +194,7 @@ void xtrc(char const *fmt, ...)
{ {
va_list ap; va_list ap;
va_start (ap, fmt); va_start (ap, fmt);
;
//vfprintf(stderr, fmt, ap); //vfprintf(stderr, fmt, ap);
vsprintf(s, fmt, ap); vsprintf(s, fmt, ap);
if (s[strlen(s)-1] == '\n') if (s[strlen(s)-1] == '\n')
@@ -210,7 +210,7 @@ static xmlStrdupFunc Strdup;
void xmlMyFree(void *mem) void xmlMyFree(void *mem)
{ {
if (trace) { if (trace(1)) {
htrc("%.4d Freeing at %p %s\n", ++m, mem, s); htrc("%.4d Freeing at %p %s\n", ++m, mem, s);
*s = 0; *s = 0;
} // endif trace } // endif trace
@@ -220,7 +220,7 @@ void xmlMyFree(void *mem)
void *xmlMyMalloc(size_t size) void *xmlMyMalloc(size_t size)
{ {
void *p = Malloc(size); void *p = Malloc(size);
if (trace) { if (trace(1)) {
htrc("%.4d Allocating %.5d at %p %s\n", ++m, size, p, s); htrc("%.4d Allocating %.5d at %p %s\n", ++m, size, p, s);
*s = 0; *s = 0;
} // endif trace } // endif trace
@@ -230,7 +230,7 @@ void *xmlMyMalloc(size_t size)
void *xmlMyMallocAtomic(size_t size) void *xmlMyMallocAtomic(size_t size)
{ {
void *p = MallocA(size); void *p = MallocA(size);
if (trace) { if (trace(1)) {
htrc("%.4d Atom alloc %.5d at %p %s\n", ++m, size, p, s); htrc("%.4d Atom alloc %.5d at %p %s\n", ++m, size, p, s);
*s = 0; *s = 0;
} // endif trace } // endif trace
@@ -240,7 +240,7 @@ void *xmlMyMallocAtomic(size_t size)
void *xmlMyRealloc(void *mem, size_t size) void *xmlMyRealloc(void *mem, size_t size)
{ {
void *p = Realloc(mem, size); void *p = Realloc(mem, size);
if (trace) { if (trace(1)) {
htrc("%.4d ReAlloc %.5d to %p from %p %s\n", ++m, size, p, mem, s); htrc("%.4d ReAlloc %.5d to %p from %p %s\n", ++m, size, p, mem, s);
*s = 0; *s = 0;
} // endif trace } // endif trace
@@ -250,7 +250,7 @@ void *xmlMyRealloc(void *mem, size_t size)
char *xmlMyStrdup(const char *str) char *xmlMyStrdup(const char *str)
{ {
char *p = Strdup(str); char *p = Strdup(str);
if (trace) { if (trace(1)) {
htrc("%.4d Duplicating to %p from %p %s %s\n", ++m, p, str, str, s); htrc("%.4d Duplicating to %p from %p %s %s\n", ++m, p, str, str, s);
*s = 0; *s = 0;
} // endif trace } // endif trace
@@ -339,7 +339,7 @@ void CloseXML2File(PGLOBAL g, PFBLOCK fp, bool all)
{ {
PX2BLOCK xp = (PX2BLOCK)fp; PX2BLOCK xp = (PX2BLOCK)fp;
if (trace) if (trace(1))
htrc("CloseXML2File: xp=%p count=%d\n", xp, (xp) ? xp->Count : 0); htrc("CloseXML2File: xp=%p count=%d\n", xp, (xp) ? xp->Count : 0);
if (xp && xp->Count > 1 && !all) { if (xp && xp->Count > 1 && !all) {
@@ -387,7 +387,7 @@ bool LIBXMLDOC::Initialize(PGLOBAL g, PCSZ entry, bool zipped)
/******************************************************************/ /******************************************************************/
bool LIBXMLDOC::ParseFile(PGLOBAL g, char *fn) bool LIBXMLDOC::ParseFile(PGLOBAL g, char *fn)
{ {
if (trace) if (trace(1))
htrc("ParseFile\n"); htrc("ParseFile\n");
if (zip) { if (zip) {
@@ -436,7 +436,7 @@ PFBLOCK LIBXMLDOC::LinkXblock(PGLOBAL g, MODE m, int rc, char *fn)
/******************************************************************/ /******************************************************************/
bool LIBXMLDOC::NewDoc(PGLOBAL g, PCSZ ver) bool LIBXMLDOC::NewDoc(PGLOBAL g, PCSZ ver)
{ {
if (trace) if (trace(1))
htrc("NewDoc\n"); htrc("NewDoc\n");
return ((Docp = xmlNewDoc(BAD_CAST ver)) == NULL); return ((Docp = xmlNewDoc(BAD_CAST ver)) == NULL);
@@ -447,7 +447,7 @@ bool LIBXMLDOC::NewDoc(PGLOBAL g, PCSZ ver)
/******************************************************************/ /******************************************************************/
void LIBXMLDOC::AddComment(PGLOBAL g, char *txtp) void LIBXMLDOC::AddComment(PGLOBAL g, char *txtp)
{ {
if (trace) if (trace(1))
htrc("AddComment: %s\n", txtp); htrc("AddComment: %s\n", txtp);
xmlNodePtr cp = xmlNewDocComment(Docp, BAD_CAST txtp); xmlNodePtr cp = xmlNewDocComment(Docp, BAD_CAST txtp);
@@ -459,7 +459,7 @@ void LIBXMLDOC::AddComment(PGLOBAL g, char *txtp)
/******************************************************************/ /******************************************************************/
PXNODE LIBXMLDOC::GetRoot(PGLOBAL g) PXNODE LIBXMLDOC::GetRoot(PGLOBAL g)
{ {
if (trace) if (trace(1))
htrc("GetRoot\n"); htrc("GetRoot\n");
xmlNodePtr root = xmlDocGetRootElement(Docp); xmlNodePtr root = xmlDocGetRootElement(Docp);
@@ -475,7 +475,7 @@ PXNODE LIBXMLDOC::GetRoot(PGLOBAL g)
/******************************************************************/ /******************************************************************/
PXNODE LIBXMLDOC::NewRoot(PGLOBAL g, char *name) PXNODE LIBXMLDOC::NewRoot(PGLOBAL g, char *name)
{ {
if (trace) if (trace(1))
htrc("NewRoot: %s\n", name); htrc("NewRoot: %s\n", name);
xmlNodePtr root = xmlNewDocNode(Docp, NULL, BAD_CAST name, NULL); xmlNodePtr root = xmlNewDocNode(Docp, NULL, BAD_CAST name, NULL);
@@ -493,7 +493,7 @@ PXNODE LIBXMLDOC::NewRoot(PGLOBAL g, char *name)
/******************************************************************/ /******************************************************************/
PXNODE LIBXMLDOC::NewPnode(PGLOBAL g, char *name) PXNODE LIBXMLDOC::NewPnode(PGLOBAL g, char *name)
{ {
if (trace) if (trace(1))
htrc("NewNode: %s\n", name); htrc("NewNode: %s\n", name);
xmlNodePtr nop; xmlNodePtr nop;
@@ -534,7 +534,7 @@ int LIBXMLDOC::DumpDoc(PGLOBAL g, char *ofn)
int rc = 0; int rc = 0;
FILE *of; FILE *of;
if (trace) if (trace(1))
htrc("DumpDoc: %s\n", ofn); htrc("DumpDoc: %s\n", ofn);
if (!(of= global_fopen(g, MSGID_CANNOT_OPEN, ofn, "w"))) if (!(of= global_fopen(g, MSGID_CANNOT_OPEN, ofn, "w")))
@@ -576,7 +576,7 @@ int LIBXMLDOC::DumpDoc(PGLOBAL g, char *ofn)
/******************************************************************/ /******************************************************************/
void LIBXMLDOC::CloseDoc(PGLOBAL g, PFBLOCK xp) void LIBXMLDOC::CloseDoc(PGLOBAL g, PFBLOCK xp)
{ {
if (trace) if (trace(1))
htrc("CloseDoc: xp=%p count=%d\n", xp, (xp) ? xp->Count : 0); htrc("CloseDoc: xp=%p count=%d\n", xp, (xp) ? xp->Count : 0);
//if (xp && xp->Count == 1) { //if (xp && xp->Count == 1) {
@@ -630,24 +630,24 @@ xmlNodeSetPtr LIBXMLDOC::GetNodeList(PGLOBAL g, xmlNodePtr np, char *xp)
{ {
xmlNodeSetPtr nl; xmlNodeSetPtr nl;
if (trace) if (trace(1))
htrc("GetNodeList: %s np=%p\n", xp, np); htrc("GetNodeList: %s np=%p\n", xp, np);
if (!Ctxp) { if (!Ctxp) {
// Init Xpath // Init Xpath
if (trace) if (trace(1))
htrc("Calling xmlPathInit\n"); htrc("Calling xmlPathInit\n");
xmlXPathInit(); xmlXPathInit();
if (trace) if (trace(1))
htrc("Calling xmlXPathNewContext Docp=%p\n", Docp); htrc("Calling xmlXPathNewContext Docp=%p\n", Docp);
// Create xpath evaluation context // Create xpath evaluation context
if (!(Ctxp = xmlXPathNewContext(Docp))) { if (!(Ctxp = xmlXPathNewContext(Docp))) {
strcpy(g->Message, MSG(XPATH_CNTX_ERR)); strcpy(g->Message, MSG(XPATH_CNTX_ERR));
if (trace) if (trace(1))
htrc("Context error: %s\n", g->Message); htrc("Context error: %s\n", g->Message);
return NULL; return NULL;
@@ -655,7 +655,7 @@ xmlNodeSetPtr LIBXMLDOC::GetNodeList(PGLOBAL g, xmlNodePtr np, char *xp)
// Register namespaces from list (if any) // Register namespaces from list (if any)
for (PNS nsp = Namespaces; nsp; nsp = nsp->Next) { for (PNS nsp = Namespaces; nsp; nsp = nsp->Next) {
if (trace) if (trace(1))
htrc("Calling xmlXPathRegisterNs Prefix=%s Uri=%s\n", htrc("Calling xmlXPathRegisterNs Prefix=%s Uri=%s\n",
nsp->Prefix, nsp->Uri); nsp->Prefix, nsp->Uri);
@@ -663,7 +663,7 @@ xmlNodeSetPtr LIBXMLDOC::GetNodeList(PGLOBAL g, xmlNodePtr np, char *xp)
BAD_CAST nsp->Uri)) { BAD_CAST nsp->Uri)) {
sprintf(g->Message, MSG(REGISTER_ERR), nsp->Prefix, nsp->Uri); sprintf(g->Message, MSG(REGISTER_ERR), nsp->Prefix, nsp->Uri);
if (trace) if (trace(1))
htrc("Ns error: %s\n", g->Message); htrc("Ns error: %s\n", g->Message);
return NULL; return NULL;
@@ -674,7 +674,7 @@ xmlNodeSetPtr LIBXMLDOC::GetNodeList(PGLOBAL g, xmlNodePtr np, char *xp)
} // endif Ctxp } // endif Ctxp
if (Xop) { if (Xop) {
if (trace) if (trace(1))
htrc("Calling xmlXPathFreeNodeSetList Xop=%p NOFREE=%d\n", htrc("Calling xmlXPathFreeNodeSetList Xop=%p NOFREE=%d\n",
Xop, Nofreelist); Xop, Nofreelist);
@@ -698,21 +698,21 @@ xmlNodeSetPtr LIBXMLDOC::GetNodeList(PGLOBAL g, xmlNodePtr np, char *xp)
// Set the context to the calling node // Set the context to the calling node
Ctxp->node = np; Ctxp->node = np;
if (trace) if (trace(1))
htrc("Calling xmlXPathEval %s Ctxp=%p\n", xp, Ctxp); htrc("Calling xmlXPathEval %s Ctxp=%p\n", xp, Ctxp);
// Evaluate table xpath // Evaluate table xpath
if (!(Xop = xmlXPathEval(BAD_CAST xp, Ctxp))) { if (!(Xop = xmlXPathEval(BAD_CAST xp, Ctxp))) {
sprintf(g->Message, MSG(XPATH_EVAL_ERR), xp); sprintf(g->Message, MSG(XPATH_EVAL_ERR), xp);
if (trace) if (trace(1))
htrc("Path error: %s\n", g->Message); htrc("Path error: %s\n", g->Message);
return NULL; return NULL;
} else } else
nl = Xop->nodesetval; nl = Xop->nodesetval;
if (trace) if (trace(1))
htrc("GetNodeList nl=%p n=%p\n", nl, (nl) ? nl->nodeNr : 0); htrc("GetNodeList nl=%p n=%p\n", nl, (nl) ? nl->nodeNr : 0);
return nl; return nl;
@@ -811,7 +811,7 @@ XML2NODE::XML2NODE(PXDOC dp, xmlNodePtr np) : XMLNODE(dp)
int XML2NODE::GetType(void) int XML2NODE::GetType(void)
{ {
if (trace) if (trace(1))
htrc("GetType type=%d\n", Nodep->type); htrc("GetType type=%d\n", Nodep->type);
return Nodep->type; return Nodep->type;
@@ -822,7 +822,7 @@ int XML2NODE::GetType(void)
/******************************************************************/ /******************************************************************/
PXNODE XML2NODE::GetNext(PGLOBAL g) PXNODE XML2NODE::GetNext(PGLOBAL g)
{ {
if (trace) if (trace(1))
htrc("GetNext\n"); htrc("GetNext\n");
if (!Nodep->next) if (!Nodep->next)
@@ -838,7 +838,7 @@ PXNODE XML2NODE::GetNext(PGLOBAL g)
/******************************************************************/ /******************************************************************/
PXNODE XML2NODE::GetChild(PGLOBAL g) PXNODE XML2NODE::GetChild(PGLOBAL g)
{ {
if (trace) if (trace(1))
htrc("GetChild\n"); htrc("GetChild\n");
if (!Nodep->children) if (!Nodep->children)
@@ -856,7 +856,7 @@ RCODE XML2NODE::GetContent(PGLOBAL g, char *buf, int len)
{ {
RCODE rc = RC_OK; RCODE rc = RC_OK;
if (trace) if (trace(1))
htrc("GetContent\n"); htrc("GetContent\n");
if (Content) if (Content)
@@ -888,7 +888,7 @@ RCODE XML2NODE::GetContent(PGLOBAL g, char *buf, int len)
*p2 = 0; *p2 = 0;
if (trace) if (trace(1))
htrc("GetText buf='%s' len=%d\n", buf, len); htrc("GetText buf='%s' len=%d\n", buf, len);
xmlFree(Content); xmlFree(Content);
@@ -896,7 +896,7 @@ RCODE XML2NODE::GetContent(PGLOBAL g, char *buf, int len)
} else } else
*buf = '\0'; *buf = '\0';
if (trace) if (trace(1))
htrc("GetContent: %s\n", buf); htrc("GetContent: %s\n", buf);
return rc; return rc;
@@ -907,12 +907,12 @@ RCODE XML2NODE::GetContent(PGLOBAL g, char *buf, int len)
/******************************************************************/ /******************************************************************/
bool XML2NODE::SetContent(PGLOBAL g, char *txtp, int len) bool XML2NODE::SetContent(PGLOBAL g, char *txtp, int len)
{ {
if (trace) if (trace(1))
htrc("SetContent: %s\n", txtp); htrc("SetContent: %s\n", txtp);
xmlChar *buf = xmlEncodeEntitiesReentrant(Docp, BAD_CAST txtp); xmlChar *buf = xmlEncodeEntitiesReentrant(Docp, BAD_CAST txtp);
if (trace) if (trace(1))
htrc("SetContent: %s -> %s\n", txtp, buf); htrc("SetContent: %s -> %s\n", txtp, buf);
xmlNodeSetContent(Nodep, buf); xmlNodeSetContent(Nodep, buf);
@@ -925,7 +925,7 @@ bool XML2NODE::SetContent(PGLOBAL g, char *txtp, int len)
/******************************************************************/ /******************************************************************/
PXNODE XML2NODE::Clone(PGLOBAL g, PXNODE np) PXNODE XML2NODE::Clone(PGLOBAL g, PXNODE np)
{ {
if (trace) if (trace(1))
htrc("Clone: np=%p\n", np); htrc("Clone: np=%p\n", np);
if (np) { if (np) {
@@ -941,7 +941,7 @@ PXNODE XML2NODE::Clone(PGLOBAL g, PXNODE np)
/******************************************************************/ /******************************************************************/
PXLIST XML2NODE::GetChildElements(PGLOBAL g, char *xp, PXLIST lp) PXLIST XML2NODE::GetChildElements(PGLOBAL g, char *xp, PXLIST lp)
{ {
if (trace) if (trace(1))
htrc("GetChildElements: %s\n", xp); htrc("GetChildElements: %s\n", xp);
return SelectNodes(g, (xp) ? xp : (char*)"*", lp); return SelectNodes(g, (xp) ? xp : (char*)"*", lp);
@@ -952,7 +952,7 @@ PXLIST XML2NODE::GetChildElements(PGLOBAL g, char *xp, PXLIST lp)
/******************************************************************/ /******************************************************************/
PXLIST XML2NODE::SelectNodes(PGLOBAL g, char *xp, PXLIST lp) PXLIST XML2NODE::SelectNodes(PGLOBAL g, char *xp, PXLIST lp)
{ {
if (trace) if (trace(1))
htrc("SelectNodes: %s\n", xp); htrc("SelectNodes: %s\n", xp);
xmlNodeSetPtr nl = ((PXDOC2)Doc)->GetNodeList(g, Nodep, xp); xmlNodeSetPtr nl = ((PXDOC2)Doc)->GetNodeList(g, Nodep, xp);
@@ -970,7 +970,7 @@ PXLIST XML2NODE::SelectNodes(PGLOBAL g, char *xp, PXLIST lp)
/******************************************************************/ /******************************************************************/
PXNODE XML2NODE::SelectSingleNode(PGLOBAL g, char *xp, PXNODE np) PXNODE XML2NODE::SelectSingleNode(PGLOBAL g, char *xp, PXNODE np)
{ {
if (trace) if (trace(1))
htrc("SelectSingleNode: %s\n", xp); htrc("SelectSingleNode: %s\n", xp);
xmlNodeSetPtr nl = ((PXDOC2)Doc)->GetNodeList(g, Nodep, xp); xmlNodeSetPtr nl = ((PXDOC2)Doc)->GetNodeList(g, Nodep, xp);
@@ -994,7 +994,7 @@ PXATTR XML2NODE::GetAttribute(PGLOBAL g, char *name, PXATTR ap)
{ {
xmlAttrPtr atp; xmlAttrPtr atp;
if (trace) if (trace(1))
htrc("GetAttribute: %s\n", SVP(name)); htrc("GetAttribute: %s\n", SVP(name));
if (name) if (name)
@@ -1023,7 +1023,7 @@ PXNODE XML2NODE::AddChildNode(PGLOBAL g, PCSZ name, PXNODE np)
{ {
char *p, *pn, *pf = NULL, *nmp = PlugDup(g, name); char *p, *pn, *pf = NULL, *nmp = PlugDup(g, name);
if (trace) if (trace(1))
htrc("AddChildNode: %s\n", name); htrc("AddChildNode: %s\n", name);
// Is a prefix specified // Is a prefix specified
@@ -1074,7 +1074,7 @@ PXNODE XML2NODE::AddChildNode(PGLOBAL g, PCSZ name, PXNODE np)
/******************************************************************/ /******************************************************************/
PXATTR XML2NODE::AddProperty(PGLOBAL g, char *name, PXATTR ap) PXATTR XML2NODE::AddProperty(PGLOBAL g, char *name, PXATTR ap)
{ {
if (trace) if (trace(1))
htrc("AddProperty: %s\n", name); htrc("AddProperty: %s\n", name);
xmlAttrPtr atp = xmlNewProp(Nodep, BAD_CAST name, NULL); xmlAttrPtr atp = xmlNewProp(Nodep, BAD_CAST name, NULL);
@@ -1097,7 +1097,7 @@ PXATTR XML2NODE::AddProperty(PGLOBAL g, char *name, PXATTR ap)
/******************************************************************/ /******************************************************************/
void XML2NODE::AddText(PGLOBAL g, PCSZ txtp) void XML2NODE::AddText(PGLOBAL g, PCSZ txtp)
{ {
if (trace) if (trace(1))
htrc("AddText: %s\n", txtp); htrc("AddText: %s\n", txtp);
// This is to avoid a blank line when inserting a new line // This is to avoid a blank line when inserting a new line
@@ -1119,7 +1119,7 @@ void XML2NODE::DeleteChild(PGLOBAL g, PXNODE dnp)
{ {
xmlErrorPtr xerr; xmlErrorPtr xerr;
if (trace) if (trace(1))
htrc("DeleteChild: node=%p\n", dnp); htrc("DeleteChild: node=%p\n", dnp);
xmlNodePtr np = ((PNODE2)dnp)->Nodep; xmlNodePtr np = ((PNODE2)dnp)->Nodep;
@@ -1157,7 +1157,7 @@ void XML2NODE::DeleteChild(PGLOBAL g, PXNODE dnp)
return; return;
err: err:
if (trace) if (trace(1))
htrc("DeleteChild: errmsg=%s\n", xerr->message); htrc("DeleteChild: errmsg=%s\n", xerr->message);
xmlResetError(xerr); xmlResetError(xerr);
@@ -1187,7 +1187,7 @@ int XML2NODELIST::GetLength(void)
/******************************************************************/ /******************************************************************/
PXNODE XML2NODELIST::GetItem(PGLOBAL g, int n, PXNODE np) PXNODE XML2NODELIST::GetItem(PGLOBAL g, int n, PXNODE np)
{ {
if (trace) if (trace(1))
htrc("GetItem: %d\n", n); htrc("GetItem: %d\n", n);
if (!Listp || Listp->nodeNr <= n) if (!Listp || Listp->nodeNr <= n)
@@ -1206,7 +1206,7 @@ PXNODE XML2NODELIST::GetItem(PGLOBAL g, int n, PXNODE np)
/******************************************************************/ /******************************************************************/
bool XML2NODELIST::DropItem(PGLOBAL g, int n) bool XML2NODELIST::DropItem(PGLOBAL g, int n)
{ {
if (trace) if (trace(1))
htrc("DropItem: n=%d\n", n); htrc("DropItem: n=%d\n", n);
// We should do something here // We should do something here
@@ -1234,7 +1234,7 @@ XML2ATTR::XML2ATTR(PXDOC dp, xmlAttrPtr ap, xmlNodePtr np)
/******************************************************************/ /******************************************************************/
PXATTR XML2ATTR::GetNext(PGLOBAL g) PXATTR XML2ATTR::GetNext(PGLOBAL g)
{ {
if (trace) if (trace(1))
htrc("Attr GetNext\n"); htrc("Attr GetNext\n");
if (!Atrp->next) if (!Atrp->next)
@@ -1252,7 +1252,7 @@ RCODE XML2ATTR::GetText(PGLOBAL g, char *buf, int len)
RCODE rc = RC_OK; RCODE rc = RC_OK;
xmlChar *txt; xmlChar *txt;
if (trace) if (trace(1))
htrc("GetText\n"); htrc("GetText\n");
if ((txt = xmlGetProp(Atrp->parent, Atrp->name))) { if ((txt = xmlGetProp(Atrp->parent, Atrp->name))) {
@@ -1269,7 +1269,7 @@ RCODE XML2ATTR::GetText(PGLOBAL g, char *buf, int len)
} else } else
*buf = '\0'; *buf = '\0';
if (trace) if (trace(1))
htrc("GetText: %s\n", buf); htrc("GetText: %s\n", buf);
return rc; return rc;
@@ -1280,7 +1280,7 @@ RCODE XML2ATTR::GetText(PGLOBAL g, char *buf, int len)
/******************************************************************/ /******************************************************************/
bool XML2ATTR::SetText(PGLOBAL g, char *txtp, int len) bool XML2ATTR::SetText(PGLOBAL g, char *txtp, int len)
{ {
if (trace) if (trace(1))
htrc("SetText: %s %d\n", txtp, len); htrc("SetText: %s %d\n", txtp, len);
xmlSetProp(Parent, Atrp->name, BAD_CAST txtp); xmlSetProp(Parent, Atrp->name, BAD_CAST txtp);

View File

@@ -172,7 +172,7 @@ PQRYRES MGOColumns(PGLOBAL g, PCSZ db, PCSZ uri, PTOS topt, bool info)
goto err; goto err;
skipit: skipit:
if (trace) if (trace(1))
htrc("MGOColumns: n=%d len=%d\n", n, length[0]); htrc("MGOColumns: n=%d len=%d\n", n, length[0]);
/*********************************************************************/ /*********************************************************************/
@@ -276,7 +276,7 @@ int MGODISC::GetColumns(PGLOBAL g, PCSZ db, PCSZ uri, PTOS topt)
tdp->Wrapname = (PSZ)GetStringTableOption(g, topt, "Wrapper", tdp->Wrapname = (PSZ)GetStringTableOption(g, topt, "Wrapper",
(tdp->Version == 2) ? "Mongo2Interface" : "Mongo3Interface"); (tdp->Version == 2) ? "Mongo2Interface" : "Mongo3Interface");
if (trace) if (trace(1))
htrc("Uri %s coll=%s db=%s colist=%s filter=%s lvl=%d\n", htrc("Uri %s coll=%s db=%s colist=%s filter=%s lvl=%d\n",
tdp->Uri, tdp->Tabname, tdp->Tabschema, tdp->Colist, tdp->Filter, lvl); tdp->Uri, tdp->Tabname, tdp->Tabschema, tdp->Colist, tdp->Filter, lvl);

View File

@@ -94,9 +94,9 @@
#if defined(XML_SUPPORT) #if defined(XML_SUPPORT)
#include "tabxml.h" #include "tabxml.h"
#endif // XML_SUPPORT #endif // XML_SUPPORT
#if defined(JAVA_SUPPORT) #if defined(JAVA_SUPPORT) || defined(CMGO_SUPPORT)
#include "mongo.h" #include "mongo.h"
#endif // JAVA_SUPPORT #endif // JAVA_SUPPORT || CMGO_SUPPORT
#if defined(ZIP_SUPPORT) #if defined(ZIP_SUPPORT)
#include "tabzip.h" #include "tabzip.h"
#endif // ZIP_SUPPORT #endif // ZIP_SUPPORT
@@ -109,9 +109,10 @@
extern "C" HINSTANCE s_hModule; // Saved module handle extern "C" HINSTANCE s_hModule; // Saved module handle
#endif // !__WIN__ #endif // !__WIN__
#if defined(JAVA_SUPPORT) #if defined(JAVA_SUPPORT) || defined(CMGO_SUPPORT)
//bool MongoEnabled(void); bool MongoEnabled(void);
#endif // JAVA_SUPPORT #endif // JAVA_SUPPORT || CMGO_SUPPORT
PQRYRES OEMColumns(PGLOBAL g, PTOS topt, char *tab, char *db, bool info); PQRYRES OEMColumns(PGLOBAL g, PTOS topt, char *tab, char *db, bool info);
/***********************************************************************/ /***********************************************************************/
@@ -144,7 +145,9 @@ TABTYPE GetTypeID(const char *type)
#endif #endif
#if defined(JAVA_SUPPORT) #if defined(JAVA_SUPPORT)
: (!stricmp(type, "JDBC")) ? TAB_JDBC : (!stricmp(type, "JDBC")) ? TAB_JDBC
: (!stricmp(type, "MONGO")) ? TAB_MONGO #endif
#if defined(JAVA_SUPPORT) || defined(CMGO_SUPPORT)
: (!stricmp(type, "MONGO") && MongoEnabled()) ? TAB_MONGO
#endif #endif
: (!stricmp(type, "MYSQL")) ? TAB_MYSQL : (!stricmp(type, "MYSQL")) ? TAB_MYSQL
: (!stricmp(type, "MYPRX")) ? TAB_MYSQL : (!stricmp(type, "MYPRX")) ? TAB_MYSQL
@@ -488,7 +491,7 @@ void MYCAT::Reset(void)
PRELDEF MYCAT::GetTableDesc(PGLOBAL g, PTABLE tablep, PRELDEF MYCAT::GetTableDesc(PGLOBAL g, PTABLE tablep,
LPCSTR type, PRELDEF *) LPCSTR type, PRELDEF *)
{ {
if (trace) if (trace(1))
printf("GetTableDesc: name=%s am=%s\n", tablep->GetName(), SVP(type)); printf("GetTableDesc: name=%s am=%s\n", tablep->GetName(), SVP(type));
// If not specified get the type of this table // If not specified get the type of this table
@@ -509,7 +512,7 @@ PRELDEF MYCAT::MakeTableDesc(PGLOBAL g, PTABLE tablep, LPCSTR am)
LPCSTR schema = (PSZ)PlugDup(g, tablep->GetSchema()); LPCSTR schema = (PSZ)PlugDup(g, tablep->GetSchema());
PRELDEF tdp= NULL; PRELDEF tdp= NULL;
if (trace) if (trace(1))
printf("MakeTableDesc: name=%s schema=%s am=%s\n", printf("MakeTableDesc: name=%s schema=%s am=%s\n",
name, SVP(schema), SVP(am)); name, SVP(schema), SVP(am));
@@ -552,18 +555,17 @@ PRELDEF MYCAT::MakeTableDesc(PGLOBAL g, PTABLE tablep, LPCSTR am)
case TAB_PIVOT: tdp= new(g) PIVOTDEF; break; case TAB_PIVOT: tdp= new(g) PIVOTDEF; break;
case TAB_VIR: tdp= new(g) VIRDEF; break; case TAB_VIR: tdp= new(g) VIRDEF; break;
case TAB_JSON: tdp= new(g) JSONDEF; break; case TAB_JSON: tdp= new(g) JSONDEF; break;
#if defined(MONGO_SUPPORT)
case TAB_MONGO:
// if (MongoEnabled())
tdp = new(g) MGODEF;
// else
// strcpy(g->Message, "MONGO type not enabled");
break;
#endif // MONGO_SUPPORT
#if defined(ZIP_SUPPORT) #if defined(ZIP_SUPPORT)
case TAB_ZIP: tdp= new(g) ZIPDEF; break; case TAB_ZIP: tdp = new(g) ZIPDEF; break;
#endif // ZIP_SUPPORT #endif // ZIP_SUPPORT
#if defined(JAVA_SUPPORT) || defined(CMGO_SUPPORT)
case TAB_MONGO:
if (MongoEnabled()) {
tdp = new(g) MGODEF;
break;
} // endif enabled
// fall through
#endif // JAVA_SUPPORT || CMGO_SUPPORT
default: default:
sprintf(g->Message, MSG(BAD_TABLE_TYPE), am, name); sprintf(g->Message, MSG(BAD_TABLE_TYPE), am, name);
} // endswitch } // endswitch
@@ -584,14 +586,14 @@ PTDB MYCAT::GetTable(PGLOBAL g, PTABLE tablep, MODE mode, LPCSTR type)
PTDB tdbp= NULL; PTDB tdbp= NULL;
// LPCSTR name= tablep->GetName(); // LPCSTR name= tablep->GetName();
if (trace) if (trace(1))
printf("GetTableDB: name=%s\n", tablep->GetName()); printf("GetTableDB: name=%s\n", tablep->GetName());
// Look for the description of the requested table // Look for the description of the requested table
tdp= GetTableDesc(g, tablep, type); tdp= GetTableDesc(g, tablep, type);
if (tdp) { if (tdp) {
if (trace) if (trace(1))
printf("tdb=%p type=%s\n", tdp, tdp->GetType()); printf("tdb=%p type=%s\n", tdp, tdp->GetType());
if (tablep->GetSchema()) if (tablep->GetSchema())
@@ -601,7 +603,7 @@ PTDB MYCAT::GetTable(PGLOBAL g, PTABLE tablep, MODE mode, LPCSTR type)
} // endif tdp } // endif tdp
if (tdbp) { if (tdbp) {
if (trace) if (trace(1))
printf("tdbp=%p name=%s amtype=%d\n", tdbp, tdbp->GetName(), printf("tdbp=%p name=%s amtype=%d\n", tdbp, tdbp->GetName(),
tdbp->GetAmType()); tdbp->GetAmType());
tablep->SetTo_Tdb(tdbp); tablep->SetTo_Tdb(tdbp);

View File

@@ -177,7 +177,7 @@ PQRYRES MyColumns(PGLOBAL g, THD *thd, const char *host, const char *db,
return NULL; return NULL;
} // endif b } // endif b
if (trace) if (trace(1))
htrc("MyColumns: cmd='%s'\n", cmd.GetStr()); htrc("MyColumns: cmd='%s'\n", cmd.GetStr());
if ((n = myc.GetResultSize(g, cmd.GetStr())) < 0) { if ((n = myc.GetResultSize(g, cmd.GetStr())) < 0) {
@@ -482,7 +482,7 @@ int MYSQLC::Open(PGLOBAL g, const char *host, const char *db,
return RC_FX; return RC_FX;
} // endif m_DB } // endif m_DB
if (trace) if (trace(1))
htrc("MYSQLC Open: m_DB=%.4X size=%d\n", m_DB, (int)sizeof(*m_DB)); htrc("MYSQLC Open: m_DB=%.4X size=%d\n", m_DB, (int)sizeof(*m_DB));
// Removed to do like FEDERATED do // Removed to do like FEDERATED do
@@ -744,7 +744,7 @@ int MYSQLC::ExecSQL(PGLOBAL g, const char *query, int *w)
m_Fields = mysql_num_fields(m_Res); m_Fields = mysql_num_fields(m_Res);
m_Rows = (!m_Use) ? (int)mysql_num_rows(m_Res) : 0; m_Rows = (!m_Use) ? (int)mysql_num_rows(m_Res) : 0;
if (trace) if (trace(1))
htrc("ExecSQL: m_Res=%.4X size=%d m_Fields=%d m_Rows=%d\n", htrc("ExecSQL: m_Res=%.4X size=%d m_Fields=%d m_Rows=%d\n",
m_Res, sizeof(*m_Res), m_Fields, m_Rows); m_Res, sizeof(*m_Res), m_Fields, m_Rows);
@@ -1068,7 +1068,7 @@ void MYSQLC::Close(void)
{ {
FreeResult(); FreeResult();
if (trace) if (trace(1))
htrc("MYSQLC Close: m_DB=%.4X\n", m_DB); htrc("MYSQLC Close: m_DB=%.4X\n", m_DB);
mysql_close(m_DB); mysql_close(m_DB);

View File

@@ -1,9 +1,11 @@
SET GLOBAL connect_class_path='C:/MariaDB-10.2/MariaDB/storage/connect/mysql-test/connect/std_data/JavaWrappers.jar;C:/Jconnectors/postgresql-42.2.1.jar';
CREATE TABLE t2 ( CREATE TABLE t2 (
command varchar(128) not null, command varchar(128) not null,
number int(5) not null flag=1, number int(5) not null flag=1,
message varchar(255) flag=2) message varchar(255) flag=2)
ENGINE=CONNECT TABLE_TYPE=JDBC CONNECTION='jdbc:postgresql://localhost/mtr' ENGINE=CONNECT TABLE_TYPE=JDBC
OPTION_LIST='User=mtr,Password=mtr,Schema=public,Execsrc=1'; CONNECTION='jdbc:postgresql://localhost/test?user=postgres&password=tinono'
OPTION_LIST='Execsrc=1';
SELECT * FROM t2 WHERE command='drop table employee'; SELECT * FROM t2 WHERE command='drop table employee';
command number message command number message
drop table employee 0 Execute: org.postgresql.util.PSQLException: ERREUR: la table « employee » n'existe pas drop table employee 0 Execute: org.postgresql.util.PSQLException: ERREUR: la table « employee » n'existe pas
@@ -14,17 +16,18 @@ SELECT * FROM t2 WHERE command = "insert into employee values(4567,'Johnson', 'E
command number message command number message
insert into employee values(4567,'Johnson', 'Engineer', 12560.50) 1 Affected rows insert into employee values(4567,'Johnson', 'Engineer', 12560.50) 1 Affected rows
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JDBC CATFUNC=tables CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JDBC CATFUNC=tables
CONNECTION='jdbc:postgresql://localhost/mtr' CONNECTION='jdbc:postgresql://localhost/test?user=postgres&password=tinono'
OPTION_LIST='User=mtr,Password=mtr,Schema=public,Tabtype=TABLE,Maxres=10'; OPTION_LIST='Tabtype=TABLE,Maxres=10';
SELECT * FROM t1; SELECT * FROM t1;
Table_Cat Table_Schema Table_Name Table_Type Remark Table_Cat Table_Schema Table_Name Table_Type Remark
public employee TABLE NULL NULL public employee TABLE NULL
public t1 TABLE NULL NULL public t1 TABLE NULL
public t2 TABLE NULL NULL public t2 TABLE NULL
NULL public tchar TABLE NULL
NULL public testuuid TABLE NULL
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JDBC CATFUNC=columns CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JDBC tabname=employee CATFUNC=columns
CONNECTION='jdbc:postgresql://localhost/mtr' tabname=employee CONNECTION='jdbc:postgresql://localhost/test?user=postgres&password=tinono';
OPTION_LIST='User=mtr,Password=mtr,Maxres=10';
SELECT * FROM t1; SELECT * FROM t1;
Table_Cat Table_Schema Table_Name Column_Name Data_Type Type_Name Column_Size Buffer_Length Decimal_Digits Radix Nullable Remarks Table_Cat Table_Schema Table_Name Column_Name Data_Type Type_Name Column_Size Buffer_Length Decimal_Digits Radix Nullable Remarks
NULL public employee id 4 int4 10 0 0 10 0 NULL NULL public employee id 4 int4 10 0 0 10 0 NULL
@@ -34,13 +37,14 @@ NULL public employee salary 2 numeric 8 0 2 10 1 NULL
DROP TABLE t1; DROP TABLE t1;
CREATE SERVER 'postgresql' FOREIGN DATA WRAPPER 'postgresql' OPTIONS ( CREATE SERVER 'postgresql' FOREIGN DATA WRAPPER 'postgresql' OPTIONS (
HOST 'localhost', HOST 'localhost',
DATABASE 'mtr', DATABASE 'test',
USER 'mtr', USER 'postgres',
PASSWORD 'mtr', PASSWORD 'tinono',
PORT 0, PORT 0,
SOCKET '', SOCKET '',
OWNER 'root'); OWNER 'root');
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JDBC CONNECTION='postgresql/public.employee'; CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JDBC
CONNECTION='postgresql/public.employee';
SELECT * FROM t1; SELECT * FROM t1;
id name title salary id name title salary
4567 Johnson Engineer 12560.50 4567 Johnson Engineer 12560.50
@@ -60,6 +64,3 @@ SELECT * FROM t2 WHERE command='drop table employee';
command number message command number message
drop table employee 0 Affected rows drop table employee 0 Affected rows
DROP TABLE t2; DROP TABLE t2;
SET GLOBAL connect_jvm_path=NULL;
SET GLOBAL connect_class_path=NULL;
SET GLOBAL time_zone = SYSTEM;

View File

@@ -1,4 +1,5 @@
SET GLOBAL connect_class_path='C:/MariaDB-10.2/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo2.jar'; SET GLOBAL connect_class_path='C:/MariaDB-10.2/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo2.jar';
set connect_enable_mongo=1;
# #
# Test the MONGO table type # Test the MONGO table type
# #
@@ -381,3 +382,4 @@ planner 167 41.75
postcard 23 5.75 postcard 23 5.75
DROP TABLE t1; DROP TABLE t1;
true true
set connect_enable_mongo=0;

View File

@@ -1,4 +1,5 @@
SET GLOBAL connect_class_path='C:/MariaDB-10.2/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo3.jar'; SET GLOBAL connect_class_path='C:/MariaDB-10.2/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo3.jar';
set connect_enable_mongo=1;
# #
# Test the MONGO table type # Test the MONGO table type
# #
@@ -381,3 +382,4 @@ planner 167 41.75
postcard 23 5.75 postcard 23 5.75
DROP TABLE t1; DROP TABLE t1;
true true
set connect_enable_mongo=0;

View File

@@ -1,3 +1,4 @@
set connect_enable_mongo=1;
# #
# Test the MONGO table type # Test the MONGO table type
# #
@@ -380,3 +381,4 @@ planner 167 41.75
postcard 23 5.75 postcard 23 5.75
DROP TABLE t1; DROP TABLE t1;
true true
set connect_enable_mongo=0;

View File

@@ -50,17 +50,19 @@ SELECT Json_Array_Add(Json_Make_Array(56, 3.1416, 'foo', NULL), 'One more') Arra
Array Array
[56,3.141600,"foo",null,"One more"] [56,3.141600,"foo",null,"One more"]
SELECT Json_Array_Add(JsonValue('one value'), 'One more'); SELECT Json_Array_Add(JsonValue('one value'), 'One more');
ERROR HY000: Can't initialize function 'json_array_add'; First argument must be a json item Json_Array_Add(JsonValue('one value'), 'One more')
["\"one value\"","One more"]
SELECT Json_Array_Add('one value', 'One more'); SELECT Json_Array_Add('one value', 'One more');
ERROR HY000: Can't initialize function 'json_array_add'; First argument must be a json item Json_Array_Add('one value', 'One more')
["one value","One more"]
SELECT Json_Array_Add('one value' json_, 'One more'); SELECT Json_Array_Add('one value' json_, 'One more');
Json_Array_Add('one value' json_, 'One more') Json_Array_Add('one value' json_, 'One more')
one value one value
Warnings: Warnings:
Warning 1105 Error 2 opening one value Warning 1105 Error 2 opening one value
Warning 1105 First argument target is not an array
SELECT Json_Array_Add(5 json_, 'One more'); SELECT Json_Array_Add(5 json_, 'One more');
ERROR HY000: Can't initialize function 'json_array_add'; First argument must be a json item Json_Array_Add(5 json_, 'One more')
[5,"One more"]
SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 0); SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 0);
Json_Array_Add('[5,3,8,7,9]' json_, 4, 0) Json_Array_Add('[5,3,8,7,9]' json_, 4, 0)
[4,5,3,8,7,9] [4,5,3,8,7,9]

View File

@@ -272,10 +272,9 @@ Json_Serialize(Jbin_Array('a','b','c'))
["a","b","c"] ["a","b","c"]
SELECT Json_Serialize(Jbin_Array_Add(Jbin_File('not_exist.json'), 'd')); SELECT Json_Serialize(Jbin_Array_Add(Jbin_File('not_exist.json'), 'd'));
Json_Serialize(Jbin_Array_Add(Jbin_File('not_exist.json'), 'd')) Json_Serialize(Jbin_Array_Add(Jbin_File('not_exist.json'), 'd'))
Null json tree [null,"d"]
Warnings: Warnings:
Warning 1105 Open(map) error 2 on not_exist.json Warning 1105 Open(map) error 2 on not_exist.json
Warning 1105 First argument is not an array
# This does not modify the file # This does not modify the file
SELECT Json_Serialize(Jbin_Array_Add(Jbin_File('bt1.json'), 'd')); SELECT Json_Serialize(Jbin_Array_Add(Jbin_File('bt1.json'), 'd'));
Json_Serialize(Jbin_Array_Add(Jbin_File('bt1.json'), 'd')) Json_Serialize(Jbin_Array_Add(Jbin_File('bt1.json'), 'd'))

View File

@@ -1,3 +1,4 @@
set connect_enable_mongo=1;
# #
# Test the MONGO table type # Test the MONGO table type
# #
@@ -376,3 +377,4 @@ planner 167 41.750000
postcard 23 5.750000 postcard 23 5.750000
DROP TABLE t1; DROP TABLE t1;
true true
set connect_enable_mongo=0;

View File

@@ -1,4 +1,5 @@
SET GLOBAL connect_class_path='C:/MariaDB-10.2/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo2.jar'; SET GLOBAL connect_class_path='C:/MariaDB-10.2/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo2.jar';
set connect_enable_mongo=1;
# #
# Test the MONGO table type # Test the MONGO table type
# #
@@ -377,3 +378,4 @@ planner 167 41.75
postcard 23 5.75 postcard 23 5.75
DROP TABLE t1; DROP TABLE t1;
true true
set connect_enable_mongo=0;

View File

@@ -1,4 +1,5 @@
SET GLOBAL connect_class_path='C:/MariaDB-10.2/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo3.jar'; SET GLOBAL connect_class_path='C:/MariaDB-10.2/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo3.jar';
set connect_enable_mongo=1;
# #
# Test the MONGO table type # Test the MONGO table type
# #
@@ -377,3 +378,4 @@ planner 167 41.75
postcard 23 5.75 postcard 23 5.75
DROP TABLE t1; DROP TABLE t1;
true true
set connect_enable_mongo=0;

View File

@@ -87,7 +87,7 @@ a b
CREATE TABLE total (a int, b char(10)) CREATE TABLE total (a int, b char(10))
ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2,t3,t4,t5' ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2,t3,t4,t5'
OPTION_LIST='thread=yes,port=PORT'; OPTION_LIST='thread=yes,port=PORT';
set connect_xtrace=1; set connect_xtrace=96;
SELECT * FROM total order by a desc; SELECT * FROM total order by a desc;
a b a b
19 test19 19 test19
@@ -129,7 +129,7 @@ SELECT * FROM t2;
v v
22 22
CREATE TABLE total (v BIGINT(20) UNSIGNED NOT NULL) ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2' OPTION_LIST='thread=yes,port=PORT';; CREATE TABLE total (v BIGINT(20) UNSIGNED NOT NULL) ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2' OPTION_LIST='thread=yes,port=PORT';;
set connect_xtrace=1; set connect_xtrace=96;
SELECT * FROM total order by v desc; SELECT * FROM total order by v desc;
v v
22 22
@@ -148,7 +148,7 @@ SELECT * FROM t2;
v v
22 22
CREATE TABLE total (v BIGINT(20) UNSIGNED NOT NULL) ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2' OPTION_LIST='thread=yes,port=PORT';; CREATE TABLE total (v BIGINT(20) UNSIGNED NOT NULL) ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2' OPTION_LIST='thread=yes,port=PORT';;
set connect_xtrace=1; set connect_xtrace=96;
SELECT * FROM total order by v desc; SELECT * FROM total order by v desc;
v v
22 22

View File

@@ -6,7 +6,7 @@ birth date not null date_format='DD/MM/YYYY',
hired date not null date_format='DD/MM/YYYY' flag=36, hired date not null date_format='DD/MM/YYYY' flag=36,
agehired int(3) as (floor(datediff(hired,birth)/365.25)) agehired int(3) as (floor(datediff(hired,birth)/365.25))
) )
engine=CONNECT table_type=FIX file_name='boys.txt' mapped=YES lrecl=47; engine=CONNECT table_type=FIX file_name='boys.txt' mapped=YES lrecl=47 ending=1;
select * from t1; select * from t1;
name city birth hired agehired name city birth hired agehired
John Boston 1986-01-25 2010-06-02 24 John Boston 1986-01-25 2010-06-02 24
@@ -25,5 +25,5 @@ hired date not null date_format='DD/MM/YYYY' flag=36,
agehired int(3) as (floor(datediff(hired,birth)/365.25)), agehired int(3) as (floor(datediff(hired,birth)/365.25)),
index (agehired) index (agehired)
) )
engine=CONNECT table_type=FIX file_name='boys.txt' mapped=YES lrecl=47; engine=CONNECT table_type=FIX file_name='boys.txt' mapped=YES lrecl=47 ending=1;
ERROR 42000: Table handler doesn't support NULL in given index. Please change column 'agehired' to be NOT NULL or use another handler ERROR 42000: Table handler doesn't support NULL in given index. Please change column 'agehired' to be NOT NULL or use another handler

View File

@@ -3,25 +3,32 @@
# #
# This test is run against Postgresql driver # This test is run against Postgresql driver
# #
eval SET GLOBAL connect_class_path='$MTR_SUITE_DIR/std_data/JavaWrappers.jar;C:/Jconnectors/postgresql-42.2.1.jar';
CREATE TABLE t2 ( CREATE TABLE t2 (
command varchar(128) not null, command varchar(128) not null,
number int(5) not null flag=1, number int(5) not null flag=1,
message varchar(255) flag=2) message varchar(255) flag=2)
ENGINE=CONNECT TABLE_TYPE=JDBC CONNECTION='jdbc:postgresql://localhost/mtr' ENGINE=CONNECT TABLE_TYPE=JDBC
OPTION_LIST='User=mtr,Password=mtr,Schema=public,Execsrc=1'; CONNECTION='jdbc:postgresql://localhost/test?user=postgres&password=tinono'
OPTION_LIST='Execsrc=1';
#CONNECTION='jdbc:postgresql://localhost/mtr'
#OPTION_LIST='User=mtr,Password=mtr,Schema=public,Execsrc=1';
SELECT * FROM t2 WHERE command='drop table employee'; SELECT * FROM t2 WHERE command='drop table employee';
SELECT * FROM t2 WHERE command = 'create table employee (id int not null, name varchar(32), title char(16), salary decimal(8,2))'; SELECT * FROM t2 WHERE command = 'create table employee (id int not null, name varchar(32), title char(16), salary decimal(8,2))';
SELECT * FROM t2 WHERE command = "insert into employee values(4567,'Johnson', 'Engineer', 12560.50)"; SELECT * FROM t2 WHERE command = "insert into employee values(4567,'Johnson', 'Engineer', 12560.50)";
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JDBC CATFUNC=tables CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JDBC CATFUNC=tables
CONNECTION='jdbc:postgresql://localhost/mtr' CONNECTION='jdbc:postgresql://localhost/test?user=postgres&password=tinono'
OPTION_LIST='User=mtr,Password=mtr,Schema=public,Tabtype=TABLE,Maxres=10'; OPTION_LIST='Tabtype=TABLE,Maxres=10';
#CONNECTION='jdbc:postgresql://localhost/mtr'
#OPTION_LIST='User=mtr,Password=mtr,Schema=public,Tabtype=TABLE,Maxres=10';
SELECT * FROM t1; SELECT * FROM t1;
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JDBC CATFUNC=columns CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JDBC tabname=employee CATFUNC=columns
CONNECTION='jdbc:postgresql://localhost/mtr' tabname=employee CONNECTION='jdbc:postgresql://localhost/test?user=postgres&password=tinono';
OPTION_LIST='User=mtr,Password=mtr,Maxres=10'; #CONNECTION='jdbc:postgresql://localhost/mtr' tabname=employee;
#OPTION_LIST='User=mtr,Password=mtr,Maxres=10';
SELECT * FROM t1; SELECT * FROM t1;
DROP TABLE t1; DROP TABLE t1;
@@ -30,14 +37,18 @@ DROP TABLE t1;
# #
CREATE SERVER 'postgresql' FOREIGN DATA WRAPPER 'postgresql' OPTIONS ( CREATE SERVER 'postgresql' FOREIGN DATA WRAPPER 'postgresql' OPTIONS (
HOST 'localhost', HOST 'localhost',
DATABASE 'mtr', DATABASE 'test',
USER 'mtr', USER 'postgres',
PASSWORD 'mtr', PASSWORD 'tinono',
PORT 0, PORT 0,
SOCKET '', SOCKET '',
OWNER 'root'); OWNER 'root');
#DATABASE 'mtr',
#USER 'mtr',
#PASSWORD 'mtr',
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JDBC CONNECTION='postgresql/public.employee'; CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JDBC
CONNECTION='postgresql/public.employee';
SELECT * FROM t1; SELECT * FROM t1;
INSERT INTO t1 VALUES(3126,'Smith', 'Clerk', 5230.00); INSERT INTO t1 VALUES(3126,'Smith', 'Clerk', 5230.00);
UPDATE t1 SET salary = salary + 100.00; UPDATE t1 SET salary = salary + 100.00;

View File

@@ -22,10 +22,11 @@ DROP TABLE t1;
# 1 - The current directory. # 1 - The current directory.
# 2 - The paths of the connect_class_path global variable. # 2 - The paths of the connect_class_path global variable.
# 3 - The paths of the CLASSPATH environment variable. # 3 - The paths of the CLASSPATH environment variable.
# In this test we use an executable jar file that contains all what is needed. # In this test we use an executable jar file that contains all the eisting wrappers.
eval SET GLOBAL connect_class_path='$MTR_SUITE_DIR/std_data/JdbcMariaDB.jar'; #eval SET GLOBAL connect_class_path='$MTR_SUITE_DIR/std_data/JdbcMariaDB.jar';
eval SET GLOBAL connect_class_path='$MTR_SUITE_DIR/std_data/JavaWrappers.jar';
# Paths to the JDK classes and to the MySQL and MariaDB drivers can be defined in the CLASSPATH environment variable # Paths to the JDK classes and to the JDBC drivers should be defined in the CLASSPATH environment variable
#CREATE FUNCTION envar RETURNS STRING SONAME 'ha_connect.dll'; #CREATE FUNCTION envar RETURNS STRING SONAME 'ha_connect.dll';
#SELECT envar('CLASSPATH'); #SELECT envar('CLASSPATH');

View File

@@ -29,12 +29,12 @@ SELECT Json_Make_Array(Json_Make_Array(56, 3.1416, 'foo'), TRUE);
--error ER_CANT_INITIALIZE_UDF --error ER_CANT_INITIALIZE_UDF
SELECT Json_Array_Add(Json_Make_Array(56, 3.1416, 'foo', NULL)) Array; SELECT Json_Array_Add(Json_Make_Array(56, 3.1416, 'foo', NULL)) Array;
SELECT Json_Array_Add(Json_Make_Array(56, 3.1416, 'foo', NULL), 'One more') Array; SELECT Json_Array_Add(Json_Make_Array(56, 3.1416, 'foo', NULL), 'One more') Array;
--error ER_CANT_INITIALIZE_UDF #--error ER_CANT_INITIALIZE_UDF
SELECT Json_Array_Add(JsonValue('one value'), 'One more'); SELECT Json_Array_Add(JsonValue('one value'), 'One more');
--error ER_CANT_INITIALIZE_UDF #--error ER_CANT_INITIALIZE_UDF
SELECT Json_Array_Add('one value', 'One more'); SELECT Json_Array_Add('one value', 'One more');
SELECT Json_Array_Add('one value' json_, 'One more'); SELECT Json_Array_Add('one value' json_, 'One more');
--error ER_CANT_INITIALIZE_UDF #--error ER_CANT_INITIALIZE_UDF
SELECT Json_Array_Add(5 json_, 'One more'); SELECT Json_Array_Add(5 json_, 'One more');
SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 0); SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 0);
SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 2) Array; SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 2) Array;

View File

@@ -1,3 +1,3 @@
let $MONGO= C:/PROGRA~1/MongoDB/Server/3.4/bin/mongo; let $MONGO= C:/Applic/MongoDB/Server/3.6/bin/mongo;
let $MONGOIMPORT= C:/PROGRA~1/MongoDB/Server/3.4/bin/mongoimport; let $MONGOIMPORT= C:/Applic/MongoDB/Server/3.6/bin/mongoimport;

View File

@@ -1,4 +1,4 @@
#set connect_enable_mongo=1; set connect_enable_mongo=1;
--echo # --echo #
--echo # Test the MONGO table type --echo # Test the MONGO table type
@@ -130,7 +130,9 @@ DROP TABLE t1;
--echo # --echo #
--echo # try CRUD operations --echo # try CRUD operations
--echo # --echo #
--disable_query_log
--exec $MONGO --eval "db.testcoll.drop()" --quiet --exec $MONGO --eval "db.testcoll.drop()" --quiet
--enable_query_log
eval CREATE TABLE t1 (_id INT(4) NOT NULL, msg CHAR(64)) eval CREATE TABLE t1 (_id INT(4) NOT NULL, msg CHAR(64))
ENGINE=CONNECT TABLE_TYPE=$TYPE TABNAME='testcoll' ENGINE=CONNECT TABLE_TYPE=$TYPE TABNAME='testcoll'
OPTION_LIST='Driver=$DRV,Version=$VERS' $CONN; OPTION_LIST='Driver=$DRV,Version=$VERS' $CONN;
@@ -147,7 +149,9 @@ DROP TABLE t1;
--echo # --echo #
--echo # List states whose population is equal or more than 10 millions --echo # List states whose population is equal or more than 10 millions
--echo # --echo #
--disable_query_log
--exec $MONGO --eval "db.cities.drop()" --quiet --exec $MONGO --eval "db.cities.drop()" --quiet
--enable_query_log
--exec $MONGOIMPORT --quiet $MTR_SUITE_DIR/std_data/cities.json --exec $MONGOIMPORT --quiet $MTR_SUITE_DIR/std_data/cities.json
eval CREATE TABLE t1 ( eval CREATE TABLE t1 (
_id char(5) NOT NULL, _id char(5) NOT NULL,
@@ -204,4 +208,4 @@ SELECT * FROM t1;
DROP TABLE t1; DROP TABLE t1;
--exec $MONGO --eval "db.testcoll.drop()" --quiet --exec $MONGO --eval "db.testcoll.drop()" --quiet
#set connect_enable_mongo=0; set connect_enable_mongo=0;

View File

@@ -56,7 +56,7 @@ SELECT * FROM t5;
eval CREATE TABLE total (a int, b char(10)) eval CREATE TABLE total (a int, b char(10))
ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2,t3,t4,t5' ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2,t3,t4,t5'
OPTION_LIST='thread=yes,port=$PORT'; OPTION_LIST='thread=yes,port=$PORT';
set connect_xtrace=1; set connect_xtrace=96;
SELECT * FROM total order by a desc; SELECT * FROM total order by a desc;
set connect_xtrace=0; set connect_xtrace=0;
@@ -85,7 +85,7 @@ SELECT * FROM t2;
--replace_result $PORT PORT --replace_result $PORT PORT
--eval CREATE TABLE total (v BIGINT(20) UNSIGNED NOT NULL) ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2' OPTION_LIST='thread=yes,port=$PORT'; --eval CREATE TABLE total (v BIGINT(20) UNSIGNED NOT NULL) ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2' OPTION_LIST='thread=yes,port=$PORT';
set connect_xtrace=1; set connect_xtrace=96;
SELECT * FROM total order by v desc; SELECT * FROM total order by v desc;
set connect_xtrace=0; set connect_xtrace=0;
DROP TABLE t1,t2,total; DROP TABLE t1,t2,total;
@@ -101,7 +101,7 @@ SELECT * FROM t2;
--replace_result $PORT PORT --replace_result $PORT PORT
--eval CREATE TABLE total (v BIGINT(20) UNSIGNED NOT NULL) ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2' OPTION_LIST='thread=yes,port=$PORT'; --eval CREATE TABLE total (v BIGINT(20) UNSIGNED NOT NULL) ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2' OPTION_LIST='thread=yes,port=$PORT';
set connect_xtrace=1; set connect_xtrace=96;
SELECT * FROM total order by v desc; SELECT * FROM total order by v desc;
set connect_xtrace=0; set connect_xtrace=0;

View File

@@ -9,7 +9,7 @@ create table t1 (
hired date not null date_format='DD/MM/YYYY' flag=36, hired date not null date_format='DD/MM/YYYY' flag=36,
agehired int(3) as (floor(datediff(hired,birth)/365.25)) agehired int(3) as (floor(datediff(hired,birth)/365.25))
) )
engine=CONNECT table_type=FIX file_name='boys.txt' mapped=YES lrecl=47; engine=CONNECT table_type=FIX file_name='boys.txt' mapped=YES lrecl=47 ending=1;
select * from t1; select * from t1;
drop table t1; drop table t1;
@@ -23,4 +23,9 @@ create table t1 (
agehired int(3) as (floor(datediff(hired,birth)/365.25)), agehired int(3) as (floor(datediff(hired,birth)/365.25)),
index (agehired) index (agehired)
) )
engine=CONNECT table_type=FIX file_name='boys.txt' mapped=YES lrecl=47; engine=CONNECT table_type=FIX file_name='boys.txt' mapped=YES lrecl=47 ending=1;
#
# Clean up
#
--remove_file $datadir/test/boys.txt

View File

@@ -137,10 +137,10 @@ int TranslateSQLType(int stp, int prec, int& len, char& v, bool& w)
case SQL_WLONGVARCHAR: // (-10) case SQL_WLONGVARCHAR: // (-10)
w = true; w = true;
case SQL_LONGVARCHAR: // (-1) case SQL_LONGVARCHAR: // (-1)
if (GetTypeConv() == TPC_YES) { if (GetTypeConv() == TPC_YES || GetTypeConv() == TPC_FORCE) {
v = 'V'; v = 'V';
type = TYPE_STRING; type = TYPE_STRING;
len = MY_MIN(abs(len), GetConvSize()); len = (len) ? MY_MIN(abs(len), GetConvSize()) : GetConvSize();
} else } else
type = TYPE_ERROR; type = TYPE_ERROR;
@@ -190,12 +190,23 @@ int TranslateSQLType(int stp, int prec, int& len, char& v, bool& w)
case SQL_BIGINT: // (-5) case SQL_BIGINT: // (-5)
type = TYPE_BIGINT; type = TYPE_BIGINT;
break; break;
case SQL_UNKNOWN_TYPE: // 0
case SQL_BINARY: // (-2) case SQL_BINARY: // (-2)
case SQL_VARBINARY: // (-3) case SQL_VARBINARY: // (-3)
case SQL_LONGVARBINARY: // (-4) case SQL_LONGVARBINARY: // (-4)
case SQL_GUID: // (-11) if (GetTypeConv() == TPC_FORCE) {
default: v = 'V';
type = TYPE_STRING;
len = (len) ? MY_MIN(abs(len), GetConvSize()) : GetConvSize();
} else
type = TYPE_ERROR;
break;
case SQL_GUID: // (-11)
type = TYPE_STRING;
len = 36;
break;
case SQL_UNKNOWN_TYPE: // 0
default:
type = TYPE_ERROR; type = TYPE_ERROR;
len = 0; len = 0;
} // endswitch type } // endswitch type
@@ -364,7 +375,7 @@ PQRYRES ODBCColumns(PGLOBAL g, PCSZ dsn, PCSZ db, PCSZ table,
length[11] = 255; length[11] = 255;
} // endif ocp } // endif ocp
if (trace) if (trace(1))
htrc("ODBCColumns: max=%d len=%d,%d,%d,%d\n", htrc("ODBCColumns: max=%d len=%d,%d,%d,%d\n",
maxres, length[0], length[1], length[2], length[3]); maxres, length[0], length[1], length[2], length[3]);
@@ -381,7 +392,7 @@ PQRYRES ODBCColumns(PGLOBAL g, PCSZ dsn, PCSZ db, PCSZ table,
if (info || !qrp) // Info table if (info || !qrp) // Info table
return qrp; return qrp;
if (trace) if (trace(1))
htrc("Getting col results ncol=%d\n", qrp->Nbcol); htrc("Getting col results ncol=%d\n", qrp->Nbcol);
if (!(cap = AllocCatInfo(g, CAT_COL, db, table, qrp))) if (!(cap = AllocCatInfo(g, CAT_COL, db, table, qrp)))
@@ -396,7 +407,7 @@ PQRYRES ODBCColumns(PGLOBAL g, PCSZ dsn, PCSZ db, PCSZ table,
qrp->Nblin = n; qrp->Nblin = n;
// ResetNullValues(cap); // ResetNullValues(cap);
if (trace) if (trace(1))
htrc("Columns: NBCOL=%d NBLIN=%d\n", qrp->Nbcol, qrp->Nblin); htrc("Columns: NBCOL=%d NBLIN=%d\n", qrp->Nbcol, qrp->Nblin);
} else } else
@@ -536,7 +547,7 @@ PQRYRES ODBCDrivers(PGLOBAL g, int maxres, bool info)
} else } else
maxres = 0; maxres = 0;
if (trace) if (trace(1))
htrc("ODBCDrivers: max=%d len=%d\n", maxres, length[0]); htrc("ODBCDrivers: max=%d len=%d\n", maxres, length[0]);
/************************************************************************/ /************************************************************************/
@@ -593,7 +604,7 @@ PQRYRES ODBCDataSources(PGLOBAL g, int maxres, bool info)
maxres = 0; maxres = 0;
} // endif info } // endif info
if (trace) if (trace(1))
htrc("ODBCDataSources: max=%d len=%d\n", maxres, length[0]); htrc("ODBCDataSources: max=%d len=%d\n", maxres, length[0]);
/************************************************************************/ /************************************************************************/
@@ -666,7 +677,7 @@ PQRYRES ODBCTables(PGLOBAL g, PCSZ dsn, PCSZ db, PCSZ tabpat, PCSZ tabtyp,
length[4] = 255; length[4] = 255;
} // endif info } // endif info
if (trace) if (trace(1))
htrc("ODBCTables: max=%d len=%d,%d\n", maxres, length[0], length[1]); htrc("ODBCTables: max=%d len=%d,%d\n", maxres, length[0], length[1]);
/************************************************************************/ /************************************************************************/
@@ -687,7 +698,7 @@ PQRYRES ODBCTables(PGLOBAL g, PCSZ dsn, PCSZ db, PCSZ tabpat, PCSZ tabtyp,
cap->Pat = tabtyp; cap->Pat = tabtyp;
if (trace) if (trace(1))
htrc("Getting table results ncol=%d\n", cap->Qrp->Nbcol); htrc("Getting table results ncol=%d\n", cap->Qrp->Nbcol);
/************************************************************************/ /************************************************************************/
@@ -697,7 +708,7 @@ PQRYRES ODBCTables(PGLOBAL g, PCSZ dsn, PCSZ db, PCSZ tabpat, PCSZ tabtyp,
qrp->Nblin = n; qrp->Nblin = n;
// ResetNullValues(cap); // ResetNullValues(cap);
if (trace) if (trace(1))
htrc("Tables: NBCOL=%d NBLIN=%d\n", qrp->Nbcol, qrp->Nblin); htrc("Tables: NBCOL=%d NBLIN=%d\n", qrp->Nbcol, qrp->Nblin);
} else } else
@@ -755,7 +766,7 @@ PQRYRES ODBCPrimaryKeys(PGLOBAL g, ODBConn *op, char *dsn, char *table)
n = ocp->GetMaxValue(SQL_MAX_COLUMN_NAME_LEN); n = ocp->GetMaxValue(SQL_MAX_COLUMN_NAME_LEN);
length[3] = (n) ? (n + 1) : 128; length[3] = (n) ? (n + 1) : 128;
if (trace) if (trace(1))
htrc("ODBCPrimaryKeys: max=%d len=%d,%d,%d\n", htrc("ODBCPrimaryKeys: max=%d len=%d,%d,%d\n",
maxres, length[0], length[1], length[2]); maxres, length[0], length[1], length[2]);
@@ -765,7 +776,7 @@ PQRYRES ODBCPrimaryKeys(PGLOBAL g, ODBConn *op, char *dsn, char *table)
qrp = PlgAllocResult(g, ncol, maxres, IDS_PKEY, qrp = PlgAllocResult(g, ncol, maxres, IDS_PKEY,
buftyp, NULL, length, false, true); buftyp, NULL, length, false, true);
if (trace) if (trace(1))
htrc("Getting pkey results ncol=%d\n", qrp->Nbcol); htrc("Getting pkey results ncol=%d\n", qrp->Nbcol);
cap = AllocCatInfo(g, CAT_KEY, NULL, table, qrp); cap = AllocCatInfo(g, CAT_KEY, NULL, table, qrp);
@@ -777,7 +788,7 @@ PQRYRES ODBCPrimaryKeys(PGLOBAL g, ODBConn *op, char *dsn, char *table)
qrp->Nblin = n; qrp->Nblin = n;
// ResetNullValues(cap); // ResetNullValues(cap);
if (trace) if (trace(1))
htrc("PrimaryKeys: NBCOL=%d NBLIN=%d\n", qrp->Nbcol, qrp->Nblin); htrc("PrimaryKeys: NBCOL=%d NBLIN=%d\n", qrp->Nbcol, qrp->Nblin);
} else } else
@@ -838,7 +849,7 @@ PQRYRES ODBCStatistics(PGLOBAL g, ODBConn *op, char *dsn, char *pat,
n = ocp->GetMaxValue(SQL_MAX_COLUMN_NAME_LEN); n = ocp->GetMaxValue(SQL_MAX_COLUMN_NAME_LEN);
length[7] = (n) ? (n + 1) : 128; length[7] = (n) ? (n + 1) : 128;
if (trace) if (trace(1))
htrc("SemStatistics: max=%d pat=%s\n", maxres, SVP(pat)); htrc("SemStatistics: max=%d pat=%s\n", maxres, SVP(pat));
/************************************************************************/ /************************************************************************/
@@ -847,7 +858,7 @@ PQRYRES ODBCStatistics(PGLOBAL g, ODBConn *op, char *dsn, char *pat,
qrp = PlgAllocResult(g, ncol, maxres, IDS_STAT, qrp = PlgAllocResult(g, ncol, maxres, IDS_STAT,
buftyp, NULL, length, false, true); buftyp, NULL, length, false, true);
if (trace) if (trace(1))
htrc("Getting stat results ncol=%d\n", qrp->Nbcol); htrc("Getting stat results ncol=%d\n", qrp->Nbcol);
cap = AllocCatInfo(g, CAT_STAT, NULL, pat, qrp); cap = AllocCatInfo(g, CAT_STAT, NULL, pat, qrp);
@@ -861,7 +872,7 @@ PQRYRES ODBCStatistics(PGLOBAL g, ODBConn *op, char *dsn, char *pat,
qrp->Nblin = n; qrp->Nblin = n;
// ResetNullValues(cap); // ResetNullValues(cap);
if (trace) if (trace(1))
htrc("Statistics: NBCOL=%d NBLIN=%d\n", qrp->Nbcol, qrp->Nblin); htrc("Statistics: NBCOL=%d NBLIN=%d\n", qrp->Nbcol, qrp->Nblin);
} else } else
@@ -918,7 +929,7 @@ bool DBX::BuildErrorMessage(ODBConn* pdb, HSTMT hstmt)
&& strcmp((char*)state, "00000"); i++) { && strcmp((char*)state, "00000"); i++) {
m_ErrMsg[i] = (PSZ)PlugDup(g, (char*)msg); m_ErrMsg[i] = (PSZ)PlugDup(g, (char*)msg);
if (trace) if (trace(1))
htrc("%s: %s, Native=%d\n", state, msg, native); htrc("%s: %s, Native=%d\n", state, msg, native);
rc = SQLError(pdb->m_henv, pdb->m_hdbc, hstmt, state, rc = SQLError(pdb->m_henv, pdb->m_hdbc, hstmt, state,
@@ -932,7 +943,7 @@ bool DBX::BuildErrorMessage(ODBConn* pdb, HSTMT hstmt)
MSG(BAD_HANDLE_VAL)); MSG(BAD_HANDLE_VAL));
m_ErrMsg[0] = (PSZ)PlugDup(g, (char*)msg); m_ErrMsg[0] = (PSZ)PlugDup(g, (char*)msg);
if (trace) if (trace(1))
htrc("%s: rc=%hd\n", SVP(m_ErrMsg[0]), m_RC); htrc("%s: rc=%hd\n", SVP(m_ErrMsg[0]), m_RC);
return true; return true;
@@ -941,7 +952,7 @@ bool DBX::BuildErrorMessage(ODBConn* pdb, HSTMT hstmt)
} else } else
m_ErrMsg[0] = "No connexion address provided"; m_ErrMsg[0] = "No connexion address provided";
if (trace) if (trace(1))
htrc("%s: rc=%hd (%s)\n", SVP(m_Msg), m_RC, SVP(m_ErrMsg[0])); htrc("%s: rc=%hd (%s)\n", SVP(m_Msg), m_RC, SVP(m_ErrMsg[0]));
return true; return true;
@@ -1004,7 +1015,7 @@ bool ODBConn::Check(RETCODE rc)
{ {
switch (rc) { switch (rc) {
case SQL_SUCCESS_WITH_INFO: case SQL_SUCCESS_WITH_INFO:
if (trace) { if (trace(1)) {
DBX x(rc); DBX x(rc);
if (x.BuildErrorMessage(this, m_hstmt)) if (x.BuildErrorMessage(this, m_hstmt))
@@ -1223,7 +1234,7 @@ void ODBConn::AllocConnect(DWORD Options)
if ((signed)m_LoginTimeout >= 0) { if ((signed)m_LoginTimeout >= 0) {
rc = SQLSetConnectOption(m_hdbc, SQL_LOGIN_TIMEOUT, m_LoginTimeout); rc = SQLSetConnectOption(m_hdbc, SQL_LOGIN_TIMEOUT, m_LoginTimeout);
if (trace && rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) if (trace(1) && rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO)
htrc("Warning: Failure setting login timeout\n"); htrc("Warning: Failure setting login timeout\n");
} // endif Timeout } // endif Timeout
@@ -1231,7 +1242,7 @@ void ODBConn::AllocConnect(DWORD Options)
if (!m_Updatable) { if (!m_Updatable) {
rc = SQLSetConnectOption(m_hdbc, SQL_ACCESS_MODE, SQL_MODE_READ_ONLY); rc = SQLSetConnectOption(m_hdbc, SQL_ACCESS_MODE, SQL_MODE_READ_ONLY);
if (trace && rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) if (trace(1) && rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO)
htrc("Warning: Failure setting read only access mode\n"); htrc("Warning: Failure setting read only access mode\n");
} // endif } // endif
@@ -1385,7 +1396,7 @@ void ODBConn::GetConnectInfo()
else else
m_Updatable = false; m_Updatable = false;
if (trace) if (trace(1))
htrc("Warning: data source is readonly\n"); htrc("Warning: data source is readonly\n");
} else // Make data source is !Updatable } else // Make data source is !Updatable
@@ -1397,7 +1408,7 @@ void ODBConn::GetConnectInfo()
rc = SQLGetInfo(m_hdbc, SQL_IDENTIFIER_QUOTE_CHAR, rc = SQLGetInfo(m_hdbc, SQL_IDENTIFIER_QUOTE_CHAR,
m_IDQuoteChar, sizeof(m_IDQuoteChar), &nResult); m_IDQuoteChar, sizeof(m_IDQuoteChar), &nResult);
if (trace) if (trace(1))
htrc("DBMS: %s, Version: %s, rc=%d\n", htrc("DBMS: %s, Version: %s, rc=%d\n",
GetStringInfo(SQL_DBMS_NAME), GetStringInfo(SQL_DBMS_VER), rc); GetStringInfo(SQL_DBMS_NAME), GetStringInfo(SQL_DBMS_VER), rc);
@@ -1447,7 +1458,7 @@ int ODBConn::ExecDirectSQL(char *sql, ODBCCOL *tocols)
OnSetOptions(hstmt); OnSetOptions(hstmt);
b = true; b = true;
if (trace) if (trace(1))
htrc("ExecDirect hstmt=%p %.256s\n", hstmt, sql); htrc("ExecDirect hstmt=%p %.256s\n", hstmt, sql);
if (m_Tdb->Srcdef) { if (m_Tdb->Srcdef) {
@@ -1510,7 +1521,7 @@ int ODBConn::ExecDirectSQL(char *sql, ODBCCOL *tocols)
ThrowDBX(m_G->Message); ThrowDBX(m_G->Message);
} // endif tp } // endif tp
if (trace) if (trace(1))
htrc("Binding col=%u type=%d buf=%p len=%d slen=%p\n", htrc("Binding col=%u type=%d buf=%p len=%d slen=%p\n",
n, tp, buffer, len, colp->GetStrLen()); n, tp, buffer, len, colp->GetStrLen());
@@ -1523,7 +1534,7 @@ int ODBConn::ExecDirectSQL(char *sql, ODBCCOL *tocols)
} // endif pcol } // endif pcol
} catch(DBX *x) { } catch(DBX *x) {
if (trace) if (trace(1))
for (int i = 0; i < MAX_NUM_OF_MSG && x->m_ErrMsg[i]; i++) for (int i = 0; i < MAX_NUM_OF_MSG && x->m_ErrMsg[i]; i++)
htrc(x->m_ErrMsg[i]); htrc(x->m_ErrMsg[i]);
@@ -1569,7 +1580,7 @@ int ODBConn::GetResultSize(char *sql, ODBCCOL *colp)
} catch(DBX *x) { } catch(DBX *x) {
strcpy(m_G->Message, x->GetErrorMessage(0)); strcpy(m_G->Message, x->GetErrorMessage(0));
if (trace) if (trace(1))
for (int i = 0; i < MAX_NUM_OF_MSG && x->m_ErrMsg[i]; i++) for (int i = 0; i < MAX_NUM_OF_MSG && x->m_ErrMsg[i]; i++)
htrc(x->m_ErrMsg[i]); htrc(x->m_ErrMsg[i]);
@@ -1610,7 +1621,7 @@ int ODBConn::Fetch(int pos)
} // endif m_RowsetSize } // endif m_RowsetSize
// } while (rc == SQL_STILL_EXECUTING); // } while (rc == SQL_STILL_EXECUTING);
if (trace > 1) if (trace(2))
htrc("Fetch: hstmt=%p RowseSize=%d rc=%d\n", htrc("Fetch: hstmt=%p RowseSize=%d rc=%d\n",
m_hstmt, m_RowsetSize, rc); m_hstmt, m_RowsetSize, rc);
@@ -1626,7 +1637,7 @@ int ODBConn::Fetch(int pos)
m_Fetch++; m_Fetch++;
m_Rows += irc; m_Rows += irc;
} catch(DBX *x) { } catch(DBX *x) {
if (trace) if (trace(1))
for (int i = 0; i < MAX_NUM_OF_MSG && x->m_ErrMsg[i]; i++) for (int i = 0; i < MAX_NUM_OF_MSG && x->m_ErrMsg[i]; i++)
htrc(x->m_ErrMsg[i]); htrc(x->m_ErrMsg[i]);
@@ -1662,7 +1673,7 @@ int ODBConn::PrepareSQL(char *sql)
m_Transact = true; m_Transact = true;
} catch(DBX *x) { } catch(DBX *x) {
if (trace) if (trace(1))
for (int i = 0; i < MAX_NUM_OF_MSG && x->m_ErrMsg[i]; i++) for (int i = 0; i < MAX_NUM_OF_MSG && x->m_ErrMsg[i]; i++)
htrc(x->m_ErrMsg[i]); htrc(x->m_ErrMsg[i]);
@@ -1693,7 +1704,7 @@ int ODBConn::PrepareSQL(char *sql)
OnSetOptions(hstmt); OnSetOptions(hstmt);
b = true; b = true;
if (trace) if (trace(1))
htrc("Prepare hstmt=%p %.64s\n", hstmt, sql); htrc("Prepare hstmt=%p %.64s\n", hstmt, sql);
do { do {
@@ -1708,7 +1719,7 @@ int ODBConn::PrepareSQL(char *sql)
} while (rc == SQL_STILL_EXECUTING); } while (rc == SQL_STILL_EXECUTING);
} catch(DBX *x) { } catch(DBX *x) {
if (trace) if (trace(1))
for (int i = 0; i < MAX_NUM_OF_MSG && x->m_ErrMsg[i]; i++) for (int i = 0; i < MAX_NUM_OF_MSG && x->m_ErrMsg[i]; i++)
htrc(x->m_ErrMsg[i]); htrc(x->m_ErrMsg[i]);
@@ -1881,7 +1892,7 @@ bool ODBConn::ExecSQLcommand(char *sql)
OnSetOptions(hstmt); OnSetOptions(hstmt);
b = true; b = true;
if (trace) if (trace(1))
htrc("ExecSQLcommand hstmt=%p %.64s\n", hstmt, sql); htrc("ExecSQLcommand hstmt=%p %.64s\n", hstmt, sql);
// Proceed with command execution // Proceed with command execution
@@ -1908,7 +1919,7 @@ bool ODBConn::ExecSQLcommand(char *sql)
} // endif ncol } // endif ncol
} catch(DBX *x) { } catch(DBX *x) {
if (trace) if (trace(1))
for (int i = 0; i < MAX_NUM_OF_MSG && x->m_ErrMsg[i]; i++) for (int i = 0; i < MAX_NUM_OF_MSG && x->m_ErrMsg[i]; i++)
htrc(x->m_ErrMsg[i]); htrc(x->m_ErrMsg[i]);
@@ -2394,7 +2405,7 @@ int ODBConn::GetCatInfo(CATPARM *cap)
if ((rc = SQLFetch(hstmt)) == SQL_NO_DATA_FOUND) if ((rc = SQLFetch(hstmt)) == SQL_NO_DATA_FOUND)
break; break;
else if (rc != SQL_SUCCESS) { else if (rc != SQL_SUCCESS) {
if (trace > 1 || (trace && rc != SQL_SUCCESS_WITH_INFO)) { if (trace(2) || (trace(1) && rc != SQL_SUCCESS_WITH_INFO)) {
UCHAR msg[SQL_MAX_MESSAGE_LENGTH + 1]; UCHAR msg[SQL_MAX_MESSAGE_LENGTH + 1];
UCHAR state[SQL_SQLSTATE_SIZE + 1]; UCHAR state[SQL_SQLSTATE_SIZE + 1];
RETCODE erc; RETCODE erc;
@@ -2466,7 +2477,7 @@ int ODBConn::GetCatInfo(CATPARM *cap)
irc = (int)crow; irc = (int)crow;
} catch(DBX *x) { } catch(DBX *x) {
if (trace) if (trace(1))
for (int i = 0; i < MAX_NUM_OF_MSG && x->m_ErrMsg[i]; i++) for (int i = 0; i < MAX_NUM_OF_MSG && x->m_ErrMsg[i]; i++)
htrc(x->m_ErrMsg[i]); htrc(x->m_ErrMsg[i]);
@@ -2605,12 +2616,12 @@ void ODBConn::Close()
rc = SQLDisconnect(m_hdbc); rc = SQLDisconnect(m_hdbc);
if (trace && rc != SQL_SUCCESS) if (trace(1) && rc != SQL_SUCCESS)
htrc("Error: SQLDisconnect rc=%d\n", rc); htrc("Error: SQLDisconnect rc=%d\n", rc);
rc = SQLFreeConnect(m_hdbc); rc = SQLFreeConnect(m_hdbc);
if (trace && rc != SQL_SUCCESS) if (trace(1) && rc != SQL_SUCCESS)
htrc("Error: SQLFreeConnect rc=%d\n", rc); htrc("Error: SQLFreeConnect rc=%d\n", rc);
m_hdbc = SQL_NULL_HDBC; m_hdbc = SQL_NULL_HDBC;
@@ -2619,7 +2630,7 @@ void ODBConn::Close()
if (m_henv != SQL_NULL_HENV) { if (m_henv != SQL_NULL_HENV) {
rc = SQLFreeEnv(m_henv); rc = SQLFreeEnv(m_henv);
if (trace && rc != SQL_SUCCESS) // Nothing we can do if (trace(1) && rc != SQL_SUCCESS) // Nothing we can do
htrc("Error: SQLFreeEnv failure ignored in Close\n"); htrc("Error: SQLFreeEnv failure ignored in Close\n");
m_henv = SQL_NULL_HENV; m_henv = SQL_NULL_HENV;

View File

@@ -362,7 +362,8 @@ enum COLUSE {U_P = 0x01, /* the projection list. */
U_IS_NULL = 0x80, /* The column has a null value */ U_IS_NULL = 0x80, /* The column has a null value */
U_SPECIAL = 0x100, /* The column is special */ U_SPECIAL = 0x100, /* The column is special */
U_UNSIGNED = 0x200, /* The column type is unsigned */ U_UNSIGNED = 0x200, /* The column type is unsigned */
U_ZEROFILL = 0x400}; /* The column is zero filled */ U_ZEROFILL = 0x400, /* The column is zero filled */
U_UUID = 0x800}; /* The column is a UUID */
/***********************************************************************/ /***********************************************************************/
/* DB description class and block pointer definitions. */ /* DB description class and block pointer definitions. */

View File

@@ -1,11 +1,11 @@
/********** PlgDBUtl Fpe C++ Program Source Code File (.CPP) ***********/ /********** PlgDBUtl Fpe C++ Program Source Code File (.CPP) ***********/
/* PROGRAM NAME: PLGDBUTL */ /* PROGRAM NAME: PLGDBUTL */
/* ------------- */ /* ------------- */
/* Version 4.0 */ /* Version 4.1 */
/* */ /* */
/* COPYRIGHT: */ /* COPYRIGHT: */
/* ---------- */ /* ---------- */
/* (C) Copyright to the author Olivier BERTRAND 1998-2017 */ /* (C) Copyright to the author Olivier BERTRAND 1998-2018 */
/* */ /* */
/* WHAT THIS PROGRAM DOES: */ /* WHAT THIS PROGRAM DOES: */
/* ----------------------- */ /* ----------------------- */
@@ -215,35 +215,13 @@ int global_open(GLOBAL *g, int msgid, const char *path, int flags, int mode)
} }
DllExport void SetTrc(void) DllExport void SetTrc(void)
{ {
// If tracing is on, debug must be initialized. // If tracing is on, debug must be initialized.
debug = pfile; debug = pfile;
} // end of SetTrc } // end of SetTrc
#if 0
/**************************************************************************/
/* Tracing output function. */
/**************************************************************************/
void ptrc(char const *fmt, ...)
{
va_list ap;
va_start (ap, fmt);
// if (trace == 0 || (trace == 1 && !pfile) || !fmt)
// printf("In %s wrong trace=%d pfile=%p fmt=%p\n",
// __FILE__, trace, pfile, fmt);
if (trace == 1)
vfprintf(pfile, fmt, ap);
else
vprintf(fmt, ap);
va_end (ap);
} // end of ptrc
#endif // 0
/**************************************************************************/ /**************************************************************************/
/* Allocate the result structure that will contain result data. */ /* SubAllocate the result structure that will contain result data. */
/**************************************************************************/ /**************************************************************************/
PQRYRES PlgAllocResult(PGLOBAL g, int ncol, int maxres, int ids, PQRYRES PlgAllocResult(PGLOBAL g, int ncol, int maxres, int ids,
int *buftyp, XFLD *fldtyp, int *buftyp, XFLD *fldtyp,
@@ -307,7 +285,7 @@ PQRYRES PlgAllocResult(PGLOBAL g, int ncol, int maxres, int ids,
else else
crp->Kdata = NULL; crp->Kdata = NULL;
if (trace) if (trace(1))
htrc("Column(%d) %s type=%d len=%d value=%p\n", htrc("Column(%d) %s type=%d len=%d value=%p\n",
crp->Ncol, crp->Name, crp->Type, crp->Length, crp->Kdata); crp->Ncol, crp->Name, crp->Type, crp->Length, crp->Kdata);
@@ -475,7 +453,7 @@ bool PlugEvalLike(PGLOBAL g, LPCSTR strg, LPCSTR pat, bool ci)
char *tp, *sp; char *tp, *sp;
bool b; bool b;
if (trace) if (trace(2))
htrc("LIKE: strg='%s' pattern='%s'\n", strg, pat); htrc("LIKE: strg='%s' pattern='%s'\n", strg, pat);
if (ci) { /* Case insensitive test */ if (ci) { /* Case insensitive test */
@@ -544,7 +522,7 @@ bool EvalLikePattern(LPCSTR sp, LPCSTR tp)
ssize_t n; ssize_t n;
bool b, t = false; bool b, t = false;
if (trace) if (trace(2))
htrc("Eval Like: sp=%s tp=%s\n", htrc("Eval Like: sp=%s tp=%s\n",
(sp) ? sp : "Null", (tp) ? tp : "Null"); (sp) ? sp : "Null", (tp) ? tp : "Null");
@@ -582,7 +560,7 @@ bool EvalLikePattern(LPCSTR sp, LPCSTR tp)
else else
n = strlen(tp); /* Get length of pattern head */ n = strlen(tp); /* Get length of pattern head */
if (trace) if (trace(2))
htrc(" testing: t=%d sp=%s tp=%s p=%p\n", t, sp, tp, p); htrc(" testing: t=%d sp=%s tp=%s p=%p\n", t, sp, tp, p);
if (n > (signed)strlen(sp)) /* If head is longer than strg */ if (n > (signed)strlen(sp)) /* If head is longer than strg */
@@ -628,7 +606,7 @@ bool EvalLikePattern(LPCSTR sp, LPCSTR tp)
b = !strcmp(sp, tp); b = !strcmp(sp, tp);
} /* endif p */ } /* endif p */
if (trace) if (trace(2))
htrc(" done: b=%d n=%d sp=%s tp=%s\n", htrc(" done: b=%d n=%d sp=%s tp=%s\n",
b, n, (sp) ? sp : "Null", tp); b, n, (sp) ? sp : "Null", tp);
@@ -668,7 +646,7 @@ char *MakeEscape(PGLOBAL g, char* str, char q)
/***********************************************************************/ /***********************************************************************/
void PlugConvertConstant(PGLOBAL g, void* & value, short& type) void PlugConvertConstant(PGLOBAL g, void* & value, short& type)
{ {
if (trace) if (trace(1))
htrc("PlugConvertConstant: value=%p type=%hd\n", value, type); htrc("PlugConvertConstant: value=%p type=%hd\n", value, type);
if (type != TYPE_XOBJECT) { if (type != TYPE_XOBJECT) {
@@ -688,7 +666,7 @@ PDTP MakeDateFormat(PGLOBAL g, PCSZ dfmt, bool in, bool out, int flag)
int rc; int rc;
PDTP pdp = (PDTP)PlugSubAlloc(g, NULL, sizeof(DATPAR)); PDTP pdp = (PDTP)PlugSubAlloc(g, NULL, sizeof(DATPAR));
if (trace) if (trace(1))
htrc("MakeDateFormat: dfmt=%s\n", dfmt); htrc("MakeDateFormat: dfmt=%s\n", dfmt);
memset(pdp, 0, sizeof(DATPAR)); memset(pdp, 0, sizeof(DATPAR));
@@ -711,7 +689,7 @@ PDTP MakeDateFormat(PGLOBAL g, PCSZ dfmt, bool in, bool out, int flag)
rc = fmdflex(pdp); rc = fmdflex(pdp);
pthread_mutex_unlock(&parmut); pthread_mutex_unlock(&parmut);
if (trace) if (trace(1))
htrc("Done: in=%s out=%s rc=%d\n", SVP(pdp->InFmt), SVP(pdp->OutFmt), rc); htrc("Done: in=%s out=%s rc=%d\n", SVP(pdp->InFmt), SVP(pdp->OutFmt), rc);
return pdp; return pdp;
@@ -733,7 +711,7 @@ int ExtractDate(char *dts, PDTP pdp, int defy, int val[6])
else // assume standard MySQL date format else // assume standard MySQL date format
fmt = "%4d-%2d-%2d %2d:%2d:%2d"; fmt = "%4d-%2d-%2d %2d:%2d:%2d";
if (trace > 1) if (trace(2))
htrc("ExtractDate: dts=%s fmt=%s defy=%d\n", dts, fmt, defy); htrc("ExtractDate: dts=%s fmt=%s defy=%d\n", dts, fmt, defy);
// Set default values for time only use // Set default values for time only use
@@ -816,7 +794,7 @@ int ExtractDate(char *dts, PDTP pdp, int defy, int val[6])
} // endfor i } // endfor i
if (trace > 1) if (trace(2))
htrc("numval=%d val=(%d,%d,%d,%d,%d,%d)\n", htrc("numval=%d val=(%d,%d,%d,%d,%d,%d)\n",
numval, val[0], val[1], val[2], val[3], val[4], val[5]); numval, val[0], val[1], val[2], val[3], val[4], val[5]);
@@ -833,18 +811,18 @@ FILE *PlugOpenFile(PGLOBAL g, LPCSTR fname, LPCSTR ftype)
PFBLOCK fp; PFBLOCK fp;
PDBUSER dbuserp = (PDBUSER)g->Activityp->Aptr; PDBUSER dbuserp = (PDBUSER)g->Activityp->Aptr;
if (trace) { if (trace(1)) {
htrc("PlugOpenFile: fname=%s ftype=%s\n", fname, ftype); htrc("PlugOpenFile: fname=%s ftype=%s\n", fname, ftype);
htrc("dbuserp=%p\n", dbuserp); htrc("dbuserp=%p\n", dbuserp);
} // endif trace } // endif trace
if ((fop= global_fopen(g, MSGID_OPEN_MODE_STRERROR, fname, ftype)) != NULL) { if ((fop= global_fopen(g, MSGID_OPEN_MODE_STRERROR, fname, ftype)) != NULL) {
if (trace) if (trace(1))
htrc(" fop=%p\n", fop); htrc(" fop=%p\n", fop);
fp = (PFBLOCK)PlugSubAlloc(g, NULL, sizeof(FBLOCK)); fp = (PFBLOCK)PlugSubAlloc(g, NULL, sizeof(FBLOCK));
if (trace) if (trace(1))
htrc(" fp=%p\n", fp); htrc(" fp=%p\n", fp);
// fname may be in volatile memory such as stack // fname may be in volatile memory such as stack
@@ -857,7 +835,7 @@ FILE *PlugOpenFile(PGLOBAL g, LPCSTR fname, LPCSTR ftype)
dbuserp->Openlist = fp; dbuserp->Openlist = fp;
} /* endif fop */ } /* endif fop */
if (trace) if (trace(1))
htrc(" returning fop=%p\n", fop); htrc(" returning fop=%p\n", fop);
return (fop); return (fop);
@@ -888,7 +866,7 @@ int PlugCloseFile(PGLOBAL g, PFBLOCK fp, bool all)
{ {
int rc = 0; int rc = 0;
if (trace) if (trace(1))
htrc("PlugCloseFile: fp=%p count=%hd type=%hd\n", htrc("PlugCloseFile: fp=%p count=%hd type=%hd\n",
fp, ((fp) ? fp->Count : 0), ((fp) ? fp->Type : 0)); fp, ((fp) ? fp->Count : 0), ((fp) ? fp->Type : 0));
@@ -1050,7 +1028,7 @@ int GetIniSize(char *section, char *key, char *def, char *ini)
n *= 1024; n *= 1024;
} // endswitch c } // endswitch c
if (trace) if (trace(1))
htrc("GetIniSize: key=%s buff=%s i=%d n=%d\n", key, buff, i, n); htrc("GetIniSize: key=%s buff=%s i=%d n=%d\n", key, buff, i, n);
return n; return n;
@@ -1086,7 +1064,7 @@ DllExport PSZ GetIniString(PGLOBAL g, void *mp, LPCSTR sec, LPCSTR key,
p = (PSZ)PlugSubAlloc(g, mp, n + 1); p = (PSZ)PlugSubAlloc(g, mp, n + 1);
if (trace) if (trace(1))
htrc("GetIniString: sec=%s key=%s buf=%s\n", sec, key, buf); htrc("GetIniString: sec=%s key=%s buf=%s\n", sec, key, buf);
strcpy(p, buf); strcpy(p, buf);
@@ -1237,7 +1215,7 @@ char *GetExceptionDesc(PGLOBAL g, unsigned int e)
/* so it can be freed at the normal or error query completion. */ /* so it can be freed at the normal or error query completion. */
/***********************************************************************/ /***********************************************************************/
void *PlgDBalloc(PGLOBAL g, void *area, MBLOCK& mp) void *PlgDBalloc(PGLOBAL g, void *area, MBLOCK& mp)
{ {
//bool b; //bool b;
size_t maxsub, minsub; size_t maxsub, minsub;
void *arp = (area) ? area : g->Sarea; void *arp = (area) ? area : g->Sarea;
@@ -1253,7 +1231,7 @@ void *PlgDBalloc(PGLOBAL g, void *area, MBLOCK& mp)
// done to check whether the block is already there. // done to check whether the block is already there.
// b = mp.Sub; // b = mp.Sub;
mp.Sub = false; // Restrict suballocation to one quarter mp.Sub = false; // Restrict suballocation to one quarter
} // endif Memp } // endif Memp
// Suballoc when possible if mp.Sub is initially true, but leaving // Suballoc when possible if mp.Sub is initially true, but leaving
// a minimum amount of storage for future operations such as the // a minimum amount of storage for future operations such as the
@@ -1263,35 +1241,40 @@ void *PlgDBalloc(PGLOBAL g, void *area, MBLOCK& mp)
maxsub = (pph->FreeBlk < minsub) ? 0 : pph->FreeBlk - minsub; maxsub = (pph->FreeBlk < minsub) ? 0 : pph->FreeBlk - minsub;
mp.Sub = mp.Size <= ((mp.Sub) ? maxsub : (maxsub >> 2)); mp.Sub = mp.Size <= ((mp.Sub) ? maxsub : (maxsub >> 2));
if (trace > 1) if (trace(2))
htrc("PlgDBalloc: in %p size=%d used=%d free=%d sub=%d\n", htrc("PlgDBalloc: in %p size=%d used=%d free=%d sub=%d\n",
arp, mp.Size, pph->To_Free, pph->FreeBlk, mp.Sub); arp, mp.Size, pph->To_Free, pph->FreeBlk, mp.Sub);
if (!mp.Sub) { if (!mp.Sub) {
// For allocations greater than one fourth of remaining storage // For allocations greater than one fourth of remaining storage
// in the area, do allocate from virtual storage. // in the area, do allocate from virtual storage.
const char*v = "malloc";
#if defined(__WIN__) #if defined(__WIN__)
if (mp.Size >= BIGMEM) if (mp.Size >= BIGMEM) {
mp.Memp = VirtualAlloc(NULL, mp.Size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); v = "VirtualAlloc";
else mp.Memp = VirtualAlloc(NULL, mp.Size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
} else
#endif #endif
mp.Memp = malloc(mp.Size); mp.Memp = malloc(mp.Size);
if (!mp.Inlist && mp.Memp) { if (trace(8))
htrc("PlgDBalloc: %s(%d) at %p\n", v, mp.Size, mp.Memp);
if (!mp.Inlist && mp.Memp) {
// New allocated block, put it in the memory block chain. // New allocated block, put it in the memory block chain.
PDBUSER dbuserp = (PDBUSER)g->Activityp->Aptr; PDBUSER dbuserp = (PDBUSER)g->Activityp->Aptr;
mp.Next = dbuserp->Memlist; mp.Next = dbuserp->Memlist;
dbuserp->Memlist = &mp; dbuserp->Memlist = &mp;
mp.Inlist = true; mp.Inlist = true;
} // endif mp } // endif mp
} else } else
// Suballocating is Ok. // Suballocating is Ok.
mp.Memp = PlugSubAlloc(g, area, mp.Size); mp.Memp = PlugSubAlloc(g, area, mp.Size);
return mp.Memp; return mp.Memp;
} // end of PlgDBalloc } // end of PlgDBalloc
/***********************************************************************/ /***********************************************************************/
/* PlgDBrealloc: reallocates memory conditionally. */ /* PlgDBrealloc: reallocates memory conditionally. */
@@ -1306,7 +1289,7 @@ void *PlgDBrealloc(PGLOBAL g, void *area, MBLOCK& mp, size_t newsize)
// assert (mp.Memp != NULL); // assert (mp.Memp != NULL);
#endif #endif
if (trace > 1) if (trace(2))
htrc("PlgDBrealloc: %p size=%d sub=%d\n", mp.Memp, mp.Size, mp.Sub); htrc("PlgDBrealloc: %p size=%d sub=%d\n", mp.Memp, mp.Size, mp.Sub);
if (newsize == mp.Size) if (newsize == mp.Size)
@@ -1326,10 +1309,14 @@ void *PlgDBrealloc(PGLOBAL g, void *area, MBLOCK& mp, size_t newsize)
mp.Memp = PlugSubAlloc(g, area, newsize); mp.Memp = PlugSubAlloc(g, area, newsize);
memcpy(mp.Memp, m.Memp, MY_MIN(m.Size, newsize)); memcpy(mp.Memp, m.Memp, MY_MIN(m.Size, newsize));
PlgDBfree(m); // Free the old block PlgDBfree(m); // Free the old block
} else if (!(mp.Memp = realloc(mp.Memp, newsize))) { } else {
mp = m; // Possible only if newsize > Size if (!(mp.Memp = realloc(mp.Memp, newsize))) {
return NULL; // Failed mp = m; // Possible only if newsize > Size
} // endif's return NULL; // Failed
} else if (trace(8))
htrc("PlgDBrealloc: realloc(%ld) at %p\n", newsize, mp.Memp);
} // endif's
mp.Size = newsize; mp.Size = newsize;
} else if (!mp.Sub || newsize > mp.Size) { } else if (!mp.Sub || newsize > mp.Size) {
@@ -1352,7 +1339,7 @@ void *PlgDBrealloc(PGLOBAL g, void *area, MBLOCK& mp, size_t newsize)
} // endif's } // endif's
if (trace) if (trace(8))
htrc(" newsize=%d newp=%p sub=%d\n", mp.Size, mp.Memp, mp.Sub); htrc(" newsize=%d newp=%p sub=%d\n", mp.Size, mp.Memp, mp.Sub);
return mp.Memp; return mp.Memp;
@@ -1363,16 +1350,20 @@ void *PlgDBrealloc(PGLOBAL g, void *area, MBLOCK& mp, size_t newsize)
/***********************************************************************/ /***********************************************************************/
void PlgDBfree(MBLOCK& mp) void PlgDBfree(MBLOCK& mp)
{ {
if (trace > 1) if (!mp.Sub && mp.Memp) {
htrc("PlgDBfree: %p sub=%d size=%d\n", mp.Memp, mp.Sub, mp.Size); const char*v = "free";
if (!mp.Sub && mp.Memp)
#if defined(__WIN__) #if defined(__WIN__)
if (mp.Size >= BIGMEM) if (mp.Size >= BIGMEM) {
VirtualFree(mp.Memp, 0, MEM_RELEASE); v = "VirtualFree";
else VirtualFree(mp.Memp, 0, MEM_RELEASE);
} else
#endif #endif
free(mp.Memp); free(mp.Memp);
if (trace(8))
htrc("PlgDBfree: %s(%p) size=%d\n", v, mp.Memp, mp.Size);
} // endif mp
// Do not reset Next to avoid cutting the Mblock chain // Do not reset Next to avoid cutting the Mblock chain
mp.Memp = NULL; mp.Memp = NULL;
@@ -1384,7 +1375,7 @@ void PlgDBfree(MBLOCK& mp)
/* Program for sub-allocating one item in a storage area. */ /* Program for sub-allocating one item in a storage area. */
/* Note: This function is equivalent to PlugSubAlloc except that in */ /* Note: This function is equivalent to PlugSubAlloc except that in */
/* case of insufficient memory, it returns NULL instead of doing a */ /* case of insufficient memory, it returns NULL instead of doing a */
/* long jump. The caller must test the return value for error. */ /* throw. The caller must test the return value for error. */
/***********************************************************************/ /***********************************************************************/
void *PlgDBSubAlloc(PGLOBAL g, void *memp, size_t size) void *PlgDBSubAlloc(PGLOBAL g, void *memp, size_t size)
{ {
@@ -1400,7 +1391,7 @@ void *PlgDBSubAlloc(PGLOBAL g, void *memp, size_t size)
size = ((size + 7) / 8) * 8; /* Round up size to multiple of 8 */ size = ((size + 7) / 8) * 8; /* Round up size to multiple of 8 */
pph = (PPOOLHEADER)memp; pph = (PPOOLHEADER)memp;
if (trace > 1) if (trace(16))
htrc("PlgDBSubAlloc: memp=%p size=%d used=%d free=%d\n", htrc("PlgDBSubAlloc: memp=%p size=%d used=%d free=%d\n",
memp, size, pph->To_Free, pph->FreeBlk); memp, size, pph->To_Free, pph->FreeBlk);
@@ -1409,7 +1400,7 @@ void *PlgDBSubAlloc(PGLOBAL g, void *memp, size_t size)
"Not enough memory in Work area for request of %d (used=%d free=%d)", "Not enough memory in Work area for request of %d (used=%d free=%d)",
(int) size, pph->To_Free, pph->FreeBlk); (int) size, pph->To_Free, pph->FreeBlk);
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
return NULL; return NULL;
@@ -1422,7 +1413,7 @@ void *PlgDBSubAlloc(PGLOBAL g, void *memp, size_t size)
pph->To_Free += size; // New offset of pool free block pph->To_Free += size; // New offset of pool free block
pph->FreeBlk -= size; // New size of pool free block pph->FreeBlk -= size; // New size of pool free block
if (trace > 1) if (trace(16))
htrc("Done memp=%p used=%d free=%d\n", htrc("Done memp=%p used=%d free=%d\n",
memp, pph->To_Free, pph->FreeBlk); memp, pph->To_Free, pph->FreeBlk);
@@ -1453,7 +1444,7 @@ void PlugPutOut(PGLOBAL g, FILE *f, short t, void *v, uint n)
{ {
char m[64]; char m[64];
if (trace) if (trace(1))
htrc("PUTOUT: f=%p t=%d v=%p n=%d\n", f, t, v, n); htrc("PUTOUT: f=%p t=%d v=%p n=%d\n", f, t, v, n);
if (!v) if (!v)

View File

@@ -136,7 +136,7 @@ PGLOBAL PlugInit(LPCSTR Language, uint worksize)
{ {
PGLOBAL g; PGLOBAL g;
if (trace > 1) if (trace(2))
htrc("PlugInit: Language='%s'\n", htrc("PlugInit: Language='%s'\n",
((!Language) ? "Null" : (char*)Language)); ((!Language) ? "Null" : (char*)Language));
@@ -205,7 +205,7 @@ LPSTR PlugRemoveType(LPSTR pBuff, LPCSTR FileName)
_splitpath(FileName, drive, direc, fname, ftype); _splitpath(FileName, drive, direc, fname, ftype);
if (trace > 1) { if (trace(2)) {
htrc("after _splitpath: FileName=%s\n", FileName); htrc("after _splitpath: FileName=%s\n", FileName);
htrc("drive=%s dir=%s fname=%s ext=%s\n", htrc("drive=%s dir=%s fname=%s ext=%s\n",
SVP(drive), direc, fname, ftype); SVP(drive), direc, fname, ftype);
@@ -213,7 +213,7 @@ LPSTR PlugRemoveType(LPSTR pBuff, LPCSTR FileName)
_makepath(pBuff, drive, direc, fname, ""); _makepath(pBuff, drive, direc, fname, "");
if (trace > 1) if (trace(2))
htrc("buff='%s'\n", pBuff); htrc("buff='%s'\n", pBuff);
return pBuff; return pBuff;
@@ -246,7 +246,7 @@ LPCSTR PlugSetPath(LPSTR pBuff, LPCSTR prefix, LPCSTR FileName, LPCSTR defpath)
char *drive = NULL, *defdrv = NULL; char *drive = NULL, *defdrv = NULL;
#endif #endif
if (trace > 1) if (trace(2))
htrc("prefix=%s fn=%s path=%s\n", prefix, FileName, defpath); htrc("prefix=%s fn=%s path=%s\n", prefix, FileName, defpath);
if (!strncmp(FileName, "//", 2) || !strncmp(FileName, "\\\\", 2)) { if (!strncmp(FileName, "//", 2) || !strncmp(FileName, "\\\\", 2)) {
@@ -263,7 +263,7 @@ LPCSTR PlugSetPath(LPSTR pBuff, LPCSTR prefix, LPCSTR FileName, LPCSTR defpath)
#if !defined(__WIN__) #if !defined(__WIN__)
if (*FileName == '~') { if (*FileName == '~') {
if (_fullpath(pBuff, FileName, _MAX_PATH)) { if (_fullpath(pBuff, FileName, _MAX_PATH)) {
if (trace > 1) if (trace(2))
htrc("pbuff='%s'\n", pBuff); htrc("pbuff='%s'\n", pBuff);
return pBuff; return pBuff;
@@ -298,7 +298,7 @@ LPCSTR PlugSetPath(LPSTR pBuff, LPCSTR prefix, LPCSTR FileName, LPCSTR defpath)
_splitpath(tmpdir, defdrv, defdir, NULL, NULL); _splitpath(tmpdir, defdrv, defdir, NULL, NULL);
if (trace > 1) { if (trace(2)) {
htrc("after _splitpath: FileName=%s\n", FileName); htrc("after _splitpath: FileName=%s\n", FileName);
#if defined(__WIN__) #if defined(__WIN__)
htrc("drive=%s dir=%s fname=%s ext=%s\n", drive, direc, fname, ftype); htrc("drive=%s dir=%s fname=%s ext=%s\n", drive, direc, fname, ftype);
@@ -325,11 +325,11 @@ LPCSTR PlugSetPath(LPSTR pBuff, LPCSTR prefix, LPCSTR FileName, LPCSTR defpath)
_makepath(newname, drive, direc, fname, ftype); _makepath(newname, drive, direc, fname, ftype);
if (trace > 1) if (trace(2))
htrc("newname='%s'\n", newname); htrc("newname='%s'\n", newname);
if (_fullpath(pBuff, newname, _MAX_PATH)) { if (_fullpath(pBuff, newname, _MAX_PATH)) {
if (trace > 1) if (trace(2))
htrc("pbuff='%s'\n", pBuff); htrc("pbuff='%s'\n", pBuff);
return pBuff; return pBuff;
@@ -470,7 +470,7 @@ bool AllocSarea(PGLOBAL g, uint size)
#if defined(DEVELOPMENT) #if defined(DEVELOPMENT)
if (true) { if (true) {
#else #else
if (trace) { if (trace(8)) {
#endif #endif
if (g->Sarea) if (g->Sarea)
htrc("Work area of %u allocated at %p\n", size, g->Sarea); htrc("Work area of %u allocated at %p\n", size, g->Sarea);
@@ -498,7 +498,7 @@ void FreeSarea(PGLOBAL g)
#if defined(DEVELOPMENT) #if defined(DEVELOPMENT)
if (true) if (true)
#else #else
if (trace) if (trace(8))
#endif #endif
htrc("Freeing Sarea at %p size = %d\n", g->Sarea, g->Sarea_Size); htrc("Freeing Sarea at %p size = %d\n", g->Sarea, g->Sarea_Size);
@@ -545,7 +545,7 @@ void *PlugSubAlloc(PGLOBAL g, void *memp, size_t size)
size = ((size + 7) / 8) * 8; /* Round up size to multiple of 8 */ size = ((size + 7) / 8) * 8; /* Round up size to multiple of 8 */
pph = (PPOOLHEADER)memp; pph = (PPOOLHEADER)memp;
if (trace > 3) if (trace(16))
htrc("SubAlloc in %p size=%d used=%d free=%d\n", htrc("SubAlloc in %p size=%d used=%d free=%d\n",
memp, size, pph->To_Free, pph->FreeBlk); memp, size, pph->To_Free, pph->FreeBlk);
@@ -556,7 +556,7 @@ void *PlugSubAlloc(PGLOBAL g, void *memp, size_t size)
"Not enough memory in %s area for request of %u (used=%d free=%d)", "Not enough memory in %s area for request of %u (used=%d free=%d)",
pname, (uint)size, pph->To_Free, pph->FreeBlk); pname, (uint)size, pph->To_Free, pph->FreeBlk);
if (trace) if (trace(1))
htrc("PlugSubAlloc: %s\n", g->Message); htrc("PlugSubAlloc: %s\n", g->Message);
abort(); abort();
@@ -569,7 +569,7 @@ void *PlugSubAlloc(PGLOBAL g, void *memp, size_t size)
pph->To_Free += (OFFSET)size; /* New offset of pool free block */ pph->To_Free += (OFFSET)size; /* New offset of pool free block */
pph->FreeBlk -= (uint)size; /* New size of pool free block */ pph->FreeBlk -= (uint)size; /* New size of pool free block */
if (trace > 3) if (trace(16))
htrc("Done memp=%p used=%d free=%d\n", htrc("Done memp=%p used=%d free=%d\n",
memp, pph->To_Free, pph->FreeBlk); memp, pph->To_Free, pph->FreeBlk);

View File

@@ -450,7 +450,7 @@ int TABDEF::GetColCatInfo(PGLOBAL g)
} // endswitch tc } // endswitch tc
// lrecl must be at least recln to avoid buffer overflow // lrecl must be at least recln to avoid buffer overflow
if (trace) if (trace(1))
htrc("Lrecl: Calculated=%d defined=%d\n", htrc("Lrecl: Calculated=%d defined=%d\n",
recln, Hc->GetIntegerOption("Lrecl")); recln, Hc->GetIntegerOption("Lrecl"));

View File

@@ -33,7 +33,7 @@ XTAB::XTAB(LPCSTR name, LPCSTR srcdef) : Name(name)
Schema = NULL; Schema = NULL;
Qualifier = NULL; Qualifier = NULL;
if (trace) if (trace(1))
htrc("XTAB: making new TABLE %s %s\n", Name, Srcdef); htrc("XTAB: making new TABLE %s %s\n", Name, Srcdef);
} // end of XTAB constructor } // end of XTAB constructor
@@ -49,7 +49,7 @@ XTAB::XTAB(PTABLE tp) : Name(tp->Name)
Schema = tp->Schema; Schema = tp->Schema;
Qualifier = tp->Qualifier; Qualifier = tp->Qualifier;
if (trace) if (trace(1))
htrc(" making copy TABLE %s %s\n", Name, SVP(Srcdef)); htrc(" making copy TABLE %s %s\n", Name, SVP(Srcdef));
} // end of XTAB constructor } // end of XTAB constructor
@@ -61,7 +61,7 @@ PTABLE XTAB::Link(PTABLE tab2)
{ {
PTABLE tabp; PTABLE tabp;
if (trace) if (trace(1))
htrc("Linking tables %s... to %s\n", Name, tab2->Name); htrc("Linking tables %s... to %s\n", Name, tab2->Name);
for (tabp = this; tabp->Next; tabp = tabp->Next) ; for (tabp = this; tabp->Next; tabp = tabp->Next) ;
@@ -117,7 +117,7 @@ COLUMN::COLUMN(LPCSTR name) : Name(name)
To_Col = NULL; To_Col = NULL;
Qualifier = NULL; Qualifier = NULL;
if (trace) if (trace(1))
htrc(" making new COLUMN %s\n", Name); htrc(" making new COLUMN %s\n", Name);
} // end of COLUMN constructor } // end of COLUMN constructor

View File

@@ -704,7 +704,7 @@ int TDBDOS::MakeBlockValues(PGLOBAL g)
// savmin = cdp->GetBmap(); // savmin = cdp->GetBmap();
// cdp->SetBmap(PlugSubAlloc(g, NULL, block * sizeof(int))); // cdp->SetBmap(PlugSubAlloc(g, NULL, block * sizeof(int)));
if (trace) if (trace(1))
htrc("Dval(%p) Bmap(%p) col(%d) %s Block=%d lg=%d\n", htrc("Dval(%p) Bmap(%p) col(%d) %s Block=%d lg=%d\n",
cdp->GetDval(), cdp->GetBmap(), i, cdp->GetName(), block, lg); cdp->GetDval(), cdp->GetBmap(), i, cdp->GetName(), block, lg);
@@ -729,7 +729,7 @@ int TDBDOS::MakeBlockValues(PGLOBAL g)
memset(cdp->GetMax(), 0, block * lg); memset(cdp->GetMax(), 0, block * lg);
} // endif Type } // endif Type
if (trace) if (trace(1))
htrc("min(%p) max(%p) col(%d) %s Block=%d lg=%d\n", htrc("min(%p) max(%p) col(%d) %s Block=%d lg=%d\n",
cdp->GetMin(), cdp->GetMax(), i, cdp->GetName(), block, lg); cdp->GetMin(), cdp->GetMax(), i, cdp->GetName(), block, lg);
@@ -901,7 +901,7 @@ bool TDBDOS::SaveBlockValues(PGLOBAL g)
"wb", (int)errno, filename); "wb", (int)errno, filename);
strcat(strcat(g->Message, ": "), strerror(errno)); strcat(strcat(g->Message, ": "), strerror(errno));
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
return true; return true;
@@ -1634,7 +1634,7 @@ int TDBDOS::TestBlock(PGLOBAL g)
To_Filter = NULL; // So remove filter To_Filter = NULL; // So remove filter
} // endswitch Beval } // endswitch Beval
if (trace) if (trace(1))
htrc("BF Eval Beval=%d\n", Beval); htrc("BF Eval Beval=%d\n", Beval);
} // endif To_BlkFil } // endif To_BlkFil
@@ -1779,7 +1779,7 @@ int TDBDOS::MakeIndex(PGLOBAL g, PIXDEF pxdf, bool add)
return RC_INFO; // Error or Physical table does not exist return RC_INFO; // Error or Physical table does not exist
} catch (int n) { } catch (int n) {
if (trace) if (trace(1))
htrc("Exception %d: %s\n", n, g->Message); htrc("Exception %d: %s\n", n, g->Message);
rc = RC_FX; rc = RC_FX;
} catch (const char *msg) { } catch (const char *msg) {
@@ -1902,7 +1902,7 @@ bool TDBDOS::InitialyzeIndex(PGLOBAL g, volatile PIXDEF xdp, bool sorted)
} // endif brc } // endif brc
} catch (int n) { } catch (int n) {
if (trace) if (trace(1))
htrc("Exception %d: %s\n", n, g->Message); htrc("Exception %d: %s\n", n, g->Message);
brc = true; brc = true;
} catch (const char *msg) { } catch (const char *msg) {
@@ -2001,7 +2001,7 @@ int TDBDOS::Cardinality(PGLOBAL g)
if (len >= 0) { if (len >= 0) {
int rec; int rec;
if (trace) if (trace(1))
htrc("Estimating lines len=%d ending=%d/n", htrc("Estimating lines len=%d ending=%d/n",
len, ((PDOSDEF)To_Def)->Ending); len, ((PDOSDEF)To_Def)->Ending);
@@ -2018,7 +2018,7 @@ int TDBDOS::Cardinality(PGLOBAL g)
Cardinal = (len + rec - 1) / rec; Cardinal = (len + rec - 1) / rec;
if (trace) if (trace(1))
htrc("avglen=%d MaxSize%d\n", rec, Cardinal); htrc("avglen=%d MaxSize%d\n", rec, Cardinal);
} // endif len } // endif len
@@ -2048,7 +2048,7 @@ int TDBDOS::GetMaxSize(PGLOBAL g)
if (len >= 0) { if (len >= 0) {
int rec; int rec;
if (trace) if (trace(1))
htrc("Estimating lines len=%d ending=%d/n", htrc("Estimating lines len=%d ending=%d/n",
len, ((PDOSDEF)To_Def)->Ending); len, ((PDOSDEF)To_Def)->Ending);
@@ -2059,7 +2059,7 @@ int TDBDOS::GetMaxSize(PGLOBAL g)
rec = EstimatedLength() + ((PDOSDEF)To_Def)->Ending; rec = EstimatedLength() + ((PDOSDEF)To_Def)->Ending;
MaxSize = (len + rec - 1) / rec; MaxSize = (len + rec - 1) / rec;
if (trace) if (trace(1))
htrc("avglen=%d MaxSize%d\n", rec, MaxSize); htrc("avglen=%d MaxSize%d\n", rec, MaxSize);
} // endif len } // endif len
@@ -2108,7 +2108,7 @@ bool TDBDOS::IsUsingTemp(PGLOBAL)
/***********************************************************************/ /***********************************************************************/
bool TDBDOS::OpenDB(PGLOBAL g) bool TDBDOS::OpenDB(PGLOBAL g)
{ {
if (trace) if (trace(1))
htrc("DOS OpenDB: tdbp=%p tdb=R%d use=%d mode=%d\n", htrc("DOS OpenDB: tdbp=%p tdb=R%d use=%d mode=%d\n",
this, Tdb_No, Use, Mode); this, Tdb_No, Use, Mode);
@@ -2184,7 +2184,7 @@ bool TDBDOS::OpenDB(PGLOBAL g)
} else } else
memset(To_Line, 0, linelen); memset(To_Line, 0, linelen);
if (trace) if (trace(1))
htrc("OpenDos: R%hd mode=%d To_Line=%p\n", Tdb_No, Mode, To_Line); htrc("OpenDos: R%hd mode=%d To_Line=%p\n", Tdb_No, Mode, To_Line);
if (SkipHeader(g)) // When called from CSV/FMT files if (SkipHeader(g)) // When called from CSV/FMT files
@@ -2202,7 +2202,7 @@ bool TDBDOS::OpenDB(PGLOBAL g)
/***********************************************************************/ /***********************************************************************/
int TDBDOS::ReadDB(PGLOBAL g) int TDBDOS::ReadDB(PGLOBAL g)
{ {
if (trace > 1) if (trace(2))
htrc("DOS ReadDB: R%d Mode=%d key=%p link=%p Kindex=%p To_Line=%p\n", htrc("DOS ReadDB: R%d Mode=%d key=%p link=%p Kindex=%p To_Line=%p\n",
GetTdb_No(), Mode, To_Key_Col, To_Link, To_Kindex, To_Line); GetTdb_No(), Mode, To_Key_Col, To_Link, To_Kindex, To_Line);
@@ -2227,7 +2227,7 @@ int TDBDOS::ReadDB(PGLOBAL g)
if (SetRecpos(g, recpos)) if (SetRecpos(g, recpos))
return RC_FX; return RC_FX;
if (trace > 1) if (trace(2))
htrc("File position is now %d\n", GetRecpos()); htrc("File position is now %d\n", GetRecpos());
if (Mode == MODE_READ) if (Mode == MODE_READ)
@@ -2243,7 +2243,7 @@ int TDBDOS::ReadDB(PGLOBAL g)
} // endif To_Kindex } // endif To_Kindex
if (trace > 1) if (trace(2))
htrc(" ReadDB: this=%p To_Line=%p\n", this, To_Line); htrc(" ReadDB: this=%p To_Line=%p\n", this, To_Line);
/*********************************************************************/ /*********************************************************************/
@@ -2279,14 +2279,14 @@ bool TDBDOS::PrepareWriting(PGLOBAL)
/***********************************************************************/ /***********************************************************************/
int TDBDOS::WriteDB(PGLOBAL g) int TDBDOS::WriteDB(PGLOBAL g)
{ {
if (trace > 1) if (trace(2))
htrc("DOS WriteDB: R%d Mode=%d \n", Tdb_No, Mode); htrc("DOS WriteDB: R%d Mode=%d \n", Tdb_No, Mode);
// Make the line to write // Make the line to write
if (PrepareWriting(g)) if (PrepareWriting(g))
return RC_FX; return RC_FX;
if (trace > 1) if (trace(2))
htrc("Write: line is='%s'\n", To_Line); htrc("Write: line is='%s'\n", To_Line);
// Now start the writing process // Now start the writing process
@@ -2403,7 +2403,7 @@ DOSCOL::DOSCOL(PGLOBAL g, PCOLDEF cdp, PTDB tp, PCOL cp, int i, PCSZ am)
Dcm = (*p) ? atoi(p) : GetScale(); Dcm = (*p) ? atoi(p) : GetScale();
} // endif fmt } // endif fmt
if (trace) if (trace(1))
htrc(" making new %sCOL C%d %s at %p\n", am, Index, Name, this); htrc(" making new %sCOL C%d %s at %p\n", am, Index, Name, this);
} // end of DOSCOL constructor } // end of DOSCOL constructor
@@ -2518,7 +2518,7 @@ void DOSCOL::ReadColumn(PGLOBAL g)
double dval; double dval;
PTDBDOS tdbp = (PTDBDOS)To_Tdb; PTDBDOS tdbp = (PTDBDOS)To_Tdb;
if (trace > 1) if (trace(2))
htrc( htrc(
"DOS ReadColumn: col %s R%d coluse=%.4X status=%.4X buf_type=%d\n", "DOS ReadColumn: col %s R%d coluse=%.4X status=%.4X buf_type=%d\n",
Name, tdbp->GetTdb_No(), ColUse, Status, Buf_Type); Name, tdbp->GetTdb_No(), ColUse, Status, Buf_Type);
@@ -2607,13 +2607,13 @@ void DOSCOL::WriteColumn(PGLOBAL g)
int i, k, len, field; int i, k, len, field;
PTDBDOS tdbp = (PTDBDOS)To_Tdb; PTDBDOS tdbp = (PTDBDOS)To_Tdb;
if (trace > 1) if (trace(2))
htrc("DOS WriteColumn: col %s R%d coluse=%.4X status=%.4X\n", htrc("DOS WriteColumn: col %s R%d coluse=%.4X status=%.4X\n",
Name, tdbp->GetTdb_No(), ColUse, Status); Name, tdbp->GetTdb_No(), ColUse, Status);
p = tdbp->To_Line + Deplac; p = tdbp->To_Line + Deplac;
if (trace > 1) if (trace(2))
htrc("Lrecl=%d deplac=%d int=%d\n", tdbp->Lrecl, Deplac, Long); htrc("Lrecl=%d deplac=%d int=%d\n", tdbp->Lrecl, Deplac, Long);
field = Long; field = Long;
@@ -2630,7 +2630,7 @@ void DOSCOL::WriteColumn(PGLOBAL g)
} // endif Ftype } // endif Ftype
if (trace > 1) if (trace(2))
htrc("Long=%d field=%d coltype=%d colval=%p\n", htrc("Long=%d field=%d coltype=%d colval=%p\n",
Long, field, Buf_Type, Value); Long, field, Buf_Type, Value);
@@ -2703,7 +2703,7 @@ void DOSCOL::WriteColumn(PGLOBAL g)
} else // Standard CONNECT format } else // Standard CONNECT format
p2 = Value->ShowValue(Buf, field); p2 = Value->ShowValue(Buf, field);
if (trace) if (trace(1))
htrc("new length(%p)=%d\n", p2, strlen(p2)); htrc("new length(%p)=%d\n", p2, strlen(p2));
if ((len = strlen(p2)) > field) { if ((len = strlen(p2)) > field) {
@@ -2714,7 +2714,7 @@ void DOSCOL::WriteColumn(PGLOBAL g)
if (p2[i] == '.') if (p2[i] == '.')
p2[i] = Dsp; p2[i] = Dsp;
if (trace > 1) if (trace(2))
htrc("buffer=%s\n", p2); htrc("buffer=%s\n", p2);
/*******************************************************************/ /*******************************************************************/
@@ -2724,7 +2724,7 @@ void DOSCOL::WriteColumn(PGLOBAL g)
memset(p, ' ', field); memset(p, ' ', field);
memcpy(p, p2, len); memcpy(p, p2, len);
if (trace > 1) if (trace(2))
htrc(" col write: '%.*s'\n", len, p); htrc(" col write: '%.*s'\n", len, p);
} // endif Use } // endif Use

View File

@@ -29,6 +29,7 @@ class DllExport DOSDEF : public TABDEF { /* Logical table description */
friend class TXTFAM; friend class TXTFAM;
friend class DBFBASE; friend class DBFBASE;
friend class UNZIPUTL; friend class UNZIPUTL;
friend class JSONCOL;
public: public:
// Constructor // Constructor
DOSDEF(void); DOSDEF(void);

View File

@@ -433,7 +433,7 @@ bool TDBEXT::MakeSQL(PGLOBAL g, bool cnt)
} else } else
Query->Resize(len); Query->Resize(len);
if (trace) if (trace(33))
htrc("Query=%s\n", Query->GetStr()); htrc("Query=%s\n", Query->GetStr());
return false; return false;
@@ -527,7 +527,7 @@ bool TDBEXT::MakeCommand(PGLOBAL g)
return true; return true;
} // endif p } // endif p
if (trace) if (trace(33))
htrc("Command=%s\n", stmt); htrc("Command=%s\n", stmt);
Query = new(g)STRING(g, 0, stmt); Query = new(g)STRING(g, 0, stmt);
@@ -585,7 +585,7 @@ EXTCOL::EXTCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PCSZ am)
tdbp->SetColumns(this); tdbp->SetColumns(this);
} // endif cprec } // endif cprec
if (trace) if (trace(1))
htrc(" making new %sCOL C%d %s at %p\n", am, Index, Name, this); htrc(" making new %sCOL C%d %s at %p\n", am, Index, Name, this);
// Set additional remote access method information for column. // Set additional remote access method information for column.

View File

@@ -291,7 +291,7 @@ bool TDBFIX::IsUsingTemp(PGLOBAL)
/***********************************************************************/ /***********************************************************************/
bool TDBFIX::OpenDB(PGLOBAL g) bool TDBFIX::OpenDB(PGLOBAL g)
{ {
if (trace) if (trace(1))
htrc("FIX OpenDB: tdbp=%p tdb=R%d use=%d key=%p mode=%d Ftype=%d\n", htrc("FIX OpenDB: tdbp=%p tdb=R%d use=%d key=%p mode=%d Ftype=%d\n",
this, Tdb_No, Use, To_Key_Col, Mode, Ftype); this, Tdb_No, Use, To_Key_Col, Mode, Ftype);
@@ -345,7 +345,7 @@ bool TDBFIX::OpenDB(PGLOBAL g)
/*********************************************************************/ /*********************************************************************/
To_BlkFil = InitBlockFilter(g, To_Filter); To_BlkFil = InitBlockFilter(g, To_Filter);
if (trace) if (trace(1))
htrc("OpenFix: R%hd mode=%d BlkFil=%p\n", Tdb_No, Mode, To_BlkFil); htrc("OpenFix: R%hd mode=%d BlkFil=%p\n", Tdb_No, Mode, To_BlkFil);
/*********************************************************************/ /*********************************************************************/
@@ -474,7 +474,7 @@ void BINCOL::ReadColumn(PGLOBAL g)
int rc; int rc;
PTDBFIX tdbp = (PTDBFIX)To_Tdb; PTDBFIX tdbp = (PTDBFIX)To_Tdb;
if (trace > 1) if (trace(2))
htrc("BIN ReadColumn: col %s R%d coluse=%.4X status=%.4X buf_type=%d\n", htrc("BIN ReadColumn: col %s R%d coluse=%.4X status=%.4X buf_type=%d\n",
Name, tdbp->GetTdb_No(), ColUse, Status, Buf_Type); Name, tdbp->GetTdb_No(), ColUse, Status, Buf_Type);
@@ -565,7 +565,7 @@ void BINCOL::WriteColumn(PGLOBAL g)
longlong n; longlong n;
PTDBFIX tdbp = (PTDBFIX)To_Tdb; PTDBFIX tdbp = (PTDBFIX)To_Tdb;
if (trace) { if (trace(1)) {
htrc("BIN WriteColumn: col %s R%d coluse=%.4X status=%.4X", htrc("BIN WriteColumn: col %s R%d coluse=%.4X status=%.4X",
Name, tdbp->GetTdb_No(), ColUse, Status); Name, tdbp->GetTdb_No(), ColUse, Status);
htrc(" Lrecl=%d\n", tdbp->Lrecl); htrc(" Lrecl=%d\n", tdbp->Lrecl);

View File

@@ -185,7 +185,7 @@ PQRYRES CSVColumns(PGLOBAL g, PCSZ dp, PTOS topt, bool info)
mxr = MY_MAX(0, tdp->Maxerr); mxr = MY_MAX(0, tdp->Maxerr);
if (trace) if (trace(1))
htrc("File %s Sep=%c Qot=%c Header=%d maxerr=%d\n", htrc("File %s Sep=%c Qot=%c Header=%d maxerr=%d\n",
SVP(tdp->Fn), tdp->Sep, tdp->Qot, tdp->Header, tdp->Maxerr); SVP(tdp->Fn), tdp->Sep, tdp->Qot, tdp->Header, tdp->Maxerr);
@@ -379,7 +379,7 @@ PQRYRES CSVColumns(PGLOBAL g, PCSZ dp, PTOS topt, bool info)
skip: ; // Skip erroneous line skip: ; // Skip erroneous line
} // endfor num_read } // endfor num_read
if (trace) { if (trace(1)) {
htrc("imax=%d Lengths:", imax); htrc("imax=%d Lengths:", imax);
for (i = 0; i < imax; i++) for (i = 0; i < imax; i++)
@@ -391,7 +391,7 @@ PQRYRES CSVColumns(PGLOBAL g, PCSZ dp, PTOS topt, bool info)
tdbp->CloseDB(g); tdbp->CloseDB(g);
skipit: skipit:
if (trace) if (trace(1))
htrc("CSVColumns: imax=%d hmax=%d len=%d\n", htrc("CSVColumns: imax=%d hmax=%d len=%d\n",
imax, hmax, length[0]); imax, hmax, length[0]);
@@ -701,7 +701,7 @@ int TDBCSV::EstimatedLength(void)
int n = 0; int n = 0;
PCOLDEF cdp; PCOLDEF cdp;
if (trace) if (trace(1))
htrc("EstimatedLength: Fields=%d Columns=%p\n", Fields, Columns); htrc("EstimatedLength: Fields=%d Columns=%p\n", Fields, Columns);
for (cdp = To_Def->GetCols(); cdp; cdp = cdp->GetNext()) for (cdp = To_Def->GetCols(); cdp; cdp = cdp->GetNext())
@@ -906,7 +906,7 @@ int TDBCSV::ReadBuffer(PGLOBAL g)
int i, n, len, rc = Txfp->ReadBuffer(g); int i, n, len, rc = Txfp->ReadBuffer(g);
bool bad = false; bool bad = false;
if (trace > 1) if (trace(2))
htrc("CSV: Row is '%s' rc=%d\n", To_Line, rc); htrc("CSV: Row is '%s' rc=%d\n", To_Line, rc);
if (rc != RC_OK || !Fields) if (rc != RC_OK || !Fields)
@@ -1024,7 +1024,7 @@ bool TDBCSV::PrepareWriting(PGLOBAL g)
char sep[2], qot[2]; char sep[2], qot[2];
int i, nlen, oldlen = strlen(To_Line); int i, nlen, oldlen = strlen(To_Line);
if (trace > 1) if (trace(2))
htrc("CSV WriteDB: R%d Mode=%d key=%p link=%p\n", htrc("CSV WriteDB: R%d Mode=%d key=%p link=%p\n",
Tdb_No, Mode, To_Key_Col, To_Link); Tdb_No, Mode, To_Key_Col, To_Link);
@@ -1090,7 +1090,7 @@ bool TDBCSV::PrepareWriting(PGLOBAL g)
To_Line[nlen] = '\0'; To_Line[nlen] = '\0';
} // endif } // endif
if (trace > 1) if (trace(2))
htrc("Write: line is=%s", To_Line); htrc("Write: line is=%s", To_Line);
return false; return false;
@@ -1118,7 +1118,7 @@ int TDBCSV::CheckWrite(PGLOBAL g)
{ {
int maxlen, n, nlen = (Fields - 1); int maxlen, n, nlen = (Fields - 1);
if (trace > 1) if (trace(2))
htrc("CheckWrite: R%d Mode=%d\n", Tdb_No, Mode); htrc("CheckWrite: R%d Mode=%d\n", Tdb_No, Mode);
// Before writing the line we must check its length // Before writing the line we must check its length
@@ -1290,7 +1290,7 @@ int TDBFMT::ReadBuffer(PGLOBAL g)
else else
++Linenum; ++Linenum;
if (trace > 1) if (trace(2))
htrc("FMT: Row %d is '%s' rc=%d\n", Linenum, To_Line, rc); htrc("FMT: Row %d is '%s' rc=%d\n", Linenum, To_Line, rc);
// Find the offsets and lengths of the columns for this row // Find the offsets and lengths of the columns for this row
@@ -1445,7 +1445,7 @@ void CSVCOL::ReadColumn(PGLOBAL g)
Deplac = tdbp->Offset[Fldnum]; // Field offset Deplac = tdbp->Offset[Fldnum]; // Field offset
Long = tdbp->Fldlen[Fldnum]; // Field length Long = tdbp->Fldlen[Fldnum]; // Field length
if (trace > 1) if (trace(2))
htrc("CSV ReadColumn %s Fldnum=%d offset=%d fldlen=%d\n", htrc("CSV ReadColumn %s Fldnum=%d offset=%d fldlen=%d\n",
Name, Fldnum, Deplac, Long); Name, Fldnum, Deplac, Long);
@@ -1489,13 +1489,13 @@ void CSVCOL::WriteColumn(PGLOBAL g)
int flen; int flen;
PTDBCSV tdbp = (PTDBCSV)To_Tdb; PTDBCSV tdbp = (PTDBCSV)To_Tdb;
if (trace > 1) if (trace(2))
htrc("CSV WriteColumn: col %s R%d coluse=%.4X status=%.4X\n", htrc("CSV WriteColumn: col %s R%d coluse=%.4X status=%.4X\n",
Name, tdbp->GetTdb_No(), ColUse, Status); Name, tdbp->GetTdb_No(), ColUse, Status);
flen = GetLength(); flen = GetLength();
if (trace > 1) if (trace(2))
htrc("Lrecl=%d Long=%d field=%d coltype=%d colval=%p\n", htrc("Lrecl=%d Long=%d field=%d coltype=%d colval=%p\n",
tdbp->Lrecl, Long, flen, Buf_Type, Value); tdbp->Lrecl, Long, flen, Buf_Type, Value);
@@ -1510,7 +1510,7 @@ void CSVCOL::WriteColumn(PGLOBAL g)
/*********************************************************************/ /*********************************************************************/
p = Value->ShowValue(buf); p = Value->ShowValue(buf);
if (trace > 1) if (trace(2))
htrc("new length(%p)=%d\n", p, strlen(p)); htrc("new length(%p)=%d\n", p, strlen(p));
if ((signed)strlen(p) > flen) { if ((signed)strlen(p) > flen) {
@@ -1522,7 +1522,7 @@ void CSVCOL::WriteColumn(PGLOBAL g)
if (p[i] == '.') if (p[i] == '.')
p[i] = Dsp; p[i] = Dsp;
if (trace > 1) if (trace(2))
htrc("buffer=%s\n", p); htrc("buffer=%s\n", p);
/*********************************************************************/ /*********************************************************************/
@@ -1536,7 +1536,7 @@ void CSVCOL::WriteColumn(PGLOBAL g)
} else } else
strncpy(tdbp->Field[Fldnum], p, flen); strncpy(tdbp->Field[Fldnum], p, flen);
if (trace > 1) if (trace(2))
htrc(" col written: '%s'\n", p); htrc(" col written: '%s'\n", p);
} // end of WriteColumn } // end of WriteColumn

View File

@@ -153,7 +153,7 @@ int JDBCDEF::ParseURL(PGLOBAL g, char *url, bool b)
// Tabname = GetStringCatInfo(g, "Tabname", Tabname); // Tabname = GetStringCatInfo(g, "Tabname", Tabname);
} // endif } // endif
if (trace) if (trace(1))
htrc("server: %s Tabname: %s", url, Tabname); htrc("server: %s Tabname: %s", url, Tabname);
// Now make the required URL // Now make the required URL
@@ -470,7 +470,7 @@ bool TDBJDBC::MakeInsert(PGLOBAL g)
else else
Prepared = true; Prepared = true;
if (trace) if (trace(33))
htrc("Insert=%s\n", Query->GetStr()); htrc("Insert=%s\n", Query->GetStr());
return false; return false;
@@ -553,7 +553,7 @@ bool TDBJDBC::OpenDB(PGLOBAL g)
{ {
bool rc = true; bool rc = true;
if (trace) if (trace(1))
htrc("JDBC OpenDB: tdbp=%p tdb=R%d use=%d mode=%d\n", htrc("JDBC OpenDB: tdbp=%p tdb=R%d use=%d mode=%d\n",
this, Tdb_No, Use, Mode); this, Tdb_No, Use, Mode);
@@ -605,6 +605,10 @@ bool TDBJDBC::OpenDB(PGLOBAL g)
else if (Quoted) else if (Quoted)
Quote = Jcp->GetQuoteChar(); Quote = Jcp->GetQuoteChar();
if (Mode != MODE_READ && Mode != MODE_READX)
if (Jcp->SetUUID(g, this))
PushWarning(g, this, 1);
Use = USE_OPEN; // Do it now in case we are recursively called Use = USE_OPEN; // Do it now in case we are recursively called
/*********************************************************************/ /*********************************************************************/
@@ -767,7 +771,7 @@ bool TDBJDBC::ReadKey(PGLOBAL g, OPVAL op, const key_range *kr)
Mode = MODE_READ; Mode = MODE_READ;
} // endif's op } // endif's op
if (trace) if (trace(33))
htrc("JDBC ReadKey: Query=%s\n", Query->GetStr()); htrc("JDBC ReadKey: Query=%s\n", Query->GetStr());
rc = Jcp->ExecuteQuery((char*)Query->GetStr()); rc = Jcp->ExecuteQuery((char*)Query->GetStr());
@@ -783,7 +787,7 @@ int TDBJDBC::ReadDB(PGLOBAL g)
{ {
int rc; int rc;
if (trace > 1) if (trace(2))
htrc("JDBC ReadDB: R%d Mode=%d\n", GetTdb_No(), Mode); htrc("JDBC ReadDB: R%d Mode=%d\n", GetTdb_No(), Mode);
if (Mode == MODE_UPDATE || Mode == MODE_DELETE) { if (Mode == MODE_UPDATE || Mode == MODE_DELETE) {
@@ -836,7 +840,7 @@ int TDBJDBC::ReadDB(PGLOBAL g)
} // endif placed } // endif placed
if (trace > 1) if (trace(2))
htrc(" Read: Rbuf=%d rc=%d\n", Rbuf, rc); htrc(" Read: Rbuf=%d rc=%d\n", Rbuf, rc);
return rc; return rc;
@@ -897,7 +901,7 @@ int TDBJDBC::WriteDB(PGLOBAL g)
Query->RepLast(')'); Query->RepLast(')');
if (trace > 1) if (trace(2))
htrc("Inserting: %s\n", Query->GetStr()); htrc("Inserting: %s\n", Query->GetStr());
rc = Jcp->ExecuteUpdate(Query->GetStr()); rc = Jcp->ExecuteUpdate(Query->GetStr());
@@ -925,7 +929,7 @@ int TDBJDBC::DeleteDB(PGLOBAL g, int irc)
AftRows = Jcp->m_Aff; AftRows = Jcp->m_Aff;
sprintf(g->Message, "%s: %d affected rows", TableName, AftRows); sprintf(g->Message, "%s: %d affected rows", TableName, AftRows);
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
PushWarning(g, this, 0); // 0 means a Note PushWarning(g, this, 0); // 0 means a Note
@@ -946,14 +950,14 @@ void TDBJDBC::CloseDB(PGLOBAL g)
if (Jcp) if (Jcp)
Jcp->Close(); Jcp->Close();
if (trace) if (trace(1))
htrc("JDBC CloseDB: closing %s\n", Name); htrc("JDBC CloseDB: closing %s\n", Name);
if (!Werr && if (!Werr &&
(Mode == MODE_INSERT || Mode == MODE_UPDATE || Mode == MODE_DELETE)) { (Mode == MODE_INSERT || Mode == MODE_UPDATE || Mode == MODE_DELETE)) {
sprintf(g->Message, "%s: %d affected rows", TableName, AftRows); sprintf(g->Message, "%s: %d affected rows", TableName, AftRows);
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
PushWarning(g, this, 0); // 0 means a Note PushWarning(g, this, 0); // 0 means a Note
@@ -970,6 +974,7 @@ void TDBJDBC::CloseDB(PGLOBAL g)
JDBCCOL::JDBCCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PCSZ am) JDBCCOL::JDBCCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PCSZ am)
: EXTCOL(cdp, tdbp, cprec, i, am) : EXTCOL(cdp, tdbp, cprec, i, am)
{ {
uuid = false;
} // end of JDBCCOL constructor } // end of JDBCCOL constructor
/***********************************************************************/ /***********************************************************************/
@@ -977,6 +982,7 @@ JDBCCOL::JDBCCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PCSZ am)
/***********************************************************************/ /***********************************************************************/
JDBCCOL::JDBCCOL(void) : EXTCOL() JDBCCOL::JDBCCOL(void) : EXTCOL()
{ {
uuid = false;
} // end of JDBCCOL constructor } // end of JDBCCOL constructor
/***********************************************************************/ /***********************************************************************/
@@ -985,12 +991,11 @@ JDBCCOL::JDBCCOL(void) : EXTCOL()
/***********************************************************************/ /***********************************************************************/
JDBCCOL::JDBCCOL(JDBCCOL *col1, PTDB tdbp) : EXTCOL(col1, tdbp) JDBCCOL::JDBCCOL(JDBCCOL *col1, PTDB tdbp) : EXTCOL(col1, tdbp)
{ {
uuid = col1->uuid;
} // end of JDBCCOL copy constructor } // end of JDBCCOL copy constructor
/***********************************************************************/ /***********************************************************************/
/* ReadColumn: when SQLFetch is used there is nothing to do as the */ /* ReadColumn: retrieve the column value via the JDBC driver. */
/* column buffer was bind to the record set. This is also the case */
/* when calculating MaxSize (Bufp is NULL even when Rows is not). */
/***********************************************************************/ /***********************************************************************/
void JDBCCOL::ReadColumn(PGLOBAL g) void JDBCCOL::ReadColumn(PGLOBAL g)
{ {
@@ -1117,7 +1122,7 @@ bool TDBXJDC::OpenDB(PGLOBAL g)
{ {
bool rc = false; bool rc = false;
if (trace) if (trace(1))
htrc("JDBC OpenDB: tdbp=%p tdb=R%d use=%d mode=%d\n", htrc("JDBC OpenDB: tdbp=%p tdb=R%d use=%d mode=%d\n",
this, Tdb_No, Use, Mode); this, Tdb_No, Use, Mode);

View File

@@ -101,6 +101,7 @@ protected:
/***********************************************************************/ /***********************************************************************/
class JDBCCOL : public EXTCOL { class JDBCCOL : public EXTCOL {
friend class TDBJDBC; friend class TDBJDBC;
friend class JDBConn;
public: public:
// Constructors // Constructors
JDBCCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PCSZ am = "JDBC"); JDBCCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PCSZ am = "JDBC");
@@ -119,6 +120,7 @@ protected:
JDBCCOL(void); JDBCCOL(void);
// Members // Members
bool uuid; // For PostgreSQL
}; // end of class JDBCCOL }; // end of class JDBCCOL
/***********************************************************************/ /***********************************************************************/

View File

@@ -54,16 +54,16 @@
USETEMP UseTemp(void); USETEMP UseTemp(void);
char *GetJsonNull(void); char *GetJsonNull(void);
typedef struct _jncol { //typedef struct _jncol {
struct _jncol *Next; // struct _jncol *Next;
char *Name; // char *Name;
char *Fmt; // char *Fmt;
int Type; // int Type;
int Len; // int Len;
int Scale; // int Scale;
bool Cbn; // bool Cbn;
bool Found; // bool Found;
} JCOL, *PJCL; //} JCOL, *PJCL;
/***********************************************************************/ /***********************************************************************/
/* JSONColumns: construct the result blocks containing the description */ /* JSONColumns: construct the result blocks containing the description */
@@ -76,26 +76,13 @@ PQRYRES JSONColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt, bool info)
static XFLD fldtyp[] = {FLD_NAME, FLD_TYPE, FLD_TYPENAME, FLD_PREC, static XFLD fldtyp[] = {FLD_NAME, FLD_TYPE, FLD_TYPENAME, FLD_PREC,
FLD_LENGTH, FLD_SCALE, FLD_NULL, FLD_FORMAT}; FLD_LENGTH, FLD_SCALE, FLD_NULL, FLD_FORMAT};
static unsigned int length[] = {0, 6, 8, 10, 10, 6, 6, 0}; static unsigned int length[] = {0, 6, 8, 10, 10, 6, 6, 0};
char *p, colname[65], fmt[129]; int i, n = 0;
int i, j, lvl, n = 0;
int ncol = sizeof(buftyp) / sizeof(int); int ncol = sizeof(buftyp) / sizeof(int);
bool mgo = (GetTypeID(topt->type) == TAB_MONGO); PJCL jcp;
PCSZ sep, level; JSONDISC *pjdc = NULL;
PVAL valp;
JCOL jcol;
PJCL jcp, fjcp = NULL, pjcp = NULL;
PJPR *jrp, jpp;
PJSON jsp;
PJVAL jvp;
PJOB row;
PJDEF tdp;
TDBJSN *tjnp = NULL;
PJTDB tjsp = NULL;
PQRYRES qrp; PQRYRES qrp;
PCOLRES crp; PCOLRES crp;
jcol.Name = jcol.Fmt = NULL;
if (info) { if (info) {
length[0] = 128; length[0] = 128;
length[7] = 256; length[7] = 256;
@@ -107,322 +94,13 @@ PQRYRES JSONColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt, bool info)
return NULL; return NULL;
} // endif Multiple } // endif Multiple
/*********************************************************************/ pjdc = new(g) JSONDISC(g, length);
/* Open the input file. */
/*********************************************************************/
level = GetStringTableOption(g, topt, "Level", NULL);
if (level) { if (!(n = pjdc->GetColumns(g, db, dsn, topt)))
lvl = atoi(level);
lvl = (lvl > 16) ? 16 : lvl;
} else
lvl = 0;
sep = GetStringTableOption(g, topt, "Separator", ".");
tdp = new(g) JSONDEF;
#if defined(ZIP_SUPPORT)
tdp->Entry = GetStringTableOption(g, topt, "Entry", NULL);
tdp->Zipped = GetBooleanTableOption(g, topt, "Zipped", false);
#endif // ZIP_SUPPORT
tdp->Fn = GetStringTableOption(g, topt, "Filename", NULL);
if (!(tdp->Database = SetPath(g, db)))
return NULL; return NULL;
tdp->Objname = GetStringTableOption(g, topt, "Object", NULL);
tdp->Base = GetIntegerTableOption(g, topt, "Base", 0) ? 1 : 0;
tdp->Pretty = GetIntegerTableOption(g, topt, "Pretty", 2);
tdp->Xcol = GetStringTableOption(g, topt, "Expand", NULL);
tdp->Accept = GetBooleanTableOption(g, topt, "Accept", false);
tdp->Uri = (dsn && *dsn ? dsn : NULL);
if (!tdp->Fn && !tdp->Uri) {
strcpy(g->Message, MSG(MISSING_FNAME));
return NULL;
} // endif Fn
if (trace)
htrc("File %s objname=%s pretty=%d lvl=%d\n",
tdp->Fn, tdp->Objname, tdp->Pretty, lvl);
if (tdp->Uri) {
#if defined(JAVA_SUPPORT) || defined(CMGO_SUPPORT)
tdp->Collname = GetStringTableOption(g, topt, "Name", NULL);
tdp->Collname = GetStringTableOption(g, topt, "Tabname", tdp->Collname);
tdp->Schema = GetStringTableOption(g, topt, "Dbname", "test");
tdp->Options = (PSZ)GetStringTableOption(g, topt, "Colist", "all");
tdp->Pipe = GetBooleanTableOption(g, topt, "Pipeline", false);
tdp->Driver = (PSZ)GetStringTableOption(g, topt, "Driver", NULL);
tdp->Version = GetIntegerTableOption(g, topt, "Version", 3);
tdp->Wrapname = (PSZ)GetStringTableOption(g, topt, "Wrapper",
(tdp->Version == 2) ? "Mongo2Interface" : "Mongo3Interface");
tdp->Pretty = 0;
#else // !MONGO_SUPPORT
sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "MONGO");
return NULL;
#endif // !MONGO_SUPPORT
} // endif Uri
if (tdp->Pretty == 2) {
if (tdp->Zipped) {
#if defined(ZIP_SUPPORT)
tjsp = new(g) TDBJSON(tdp, new(g) UNZFAM(tdp));
#else // !ZIP_SUPPORT
sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "ZIP");
return NULL;
#endif // !ZIP_SUPPORT
} else
tjsp = new(g) TDBJSON(tdp, new(g) MAPFAM(tdp));
if (tjsp->MakeDocument(g))
return NULL;
jsp = (tjsp->GetDoc()) ? tjsp->GetDoc()->GetValue(0) : NULL;
} else {
if (!(tdp->Lrecl = GetIntegerTableOption(g, topt, "Lrecl", 0)))
if (!mgo) {
sprintf(g->Message, "LRECL must be specified for pretty=%d", tdp->Pretty);
return NULL;
} else
tdp->Lrecl = 8192; // Should be enough
tdp->Ending = GetIntegerTableOption(g, topt, "Ending", CRLF);
if (tdp->Zipped) {
#if defined(ZIP_SUPPORT)
tjnp = new(g)TDBJSN(tdp, new(g) UNZFAM(tdp));
#else // !ZIP_SUPPORT
sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "ZIP");
return NULL;
#endif // !ZIP_SUPPORT
} else if (tdp->Uri) {
if (tdp->Driver && toupper(*tdp->Driver) == 'C') {
#if defined(CMGO_SUPPORT)
tjnp = new(g) TDBJSN(tdp, new(g) CMGFAM(tdp));
#else
sprintf(g->Message, "Mongo %s Driver not available", "C");
return NULL;
#endif
} else if (tdp->Driver && toupper(*tdp->Driver) == 'J') {
#if defined(JAVA_SUPPORT)
tjnp = new(g) TDBJSN(tdp, new(g) JMGFAM(tdp));
#else
sprintf(g->Message, "Mongo %s Driver not available", "Java");
return NULL;
#endif
} else { // Driver not specified
#if defined(CMGO_SUPPORT)
tjnp = new(g) TDBJSN(tdp, new(g) CMGFAM(tdp));
#elif defined(JAVA_SUPPORT)
tjnp = new(g) TDBJSN(tdp, new(g) JMGFAM(tdp));
#else
sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "MONGO");
return NULL;
#endif
} // endif Driver
} else
tjnp = new(g) TDBJSN(tdp, new(g) DOSFAM(tdp));
tjnp->SetMode(MODE_READ);
// Allocate the parse work memory
PGLOBAL G = (PGLOBAL)PlugSubAlloc(g, NULL, sizeof(GLOBAL));
memset(G, 0, sizeof(GLOBAL));
G->Sarea_Size = tdp->Lrecl * 10;
G->Sarea = PlugSubAlloc(g, NULL, G->Sarea_Size);
PlugSubSet(G, G->Sarea, G->Sarea_Size);
G->jump_level = 0;
tjnp->SetG(G);
if (tjnp->OpenDB(g))
return NULL;
switch (tjnp->ReadDB(g)) {
case RC_EF:
strcpy(g->Message, "Void json table");
case RC_FX:
goto err;
default:
jsp = tjnp->GetRow();
} // endswitch ReadDB
} // endif pretty
if (!(row = (jsp) ? jsp->GetObject() : NULL)) {
strcpy(g->Message, "Can only retrieve columns from object rows");
goto err;
} // endif row
jcol.Next = NULL;
jcol.Found = true;
colname[64] = 0;
fmt[128] = 0;
if (!tdp->Uri) {
*fmt = '$';
fmt[1] = '.';
p = fmt + 2;
} else
p = fmt;
jrp = (PJPR*)PlugSubAlloc(g, NULL, sizeof(PJPR) * MY_MAX(lvl, 0));
/*********************************************************************/
/* Analyse the JSON tree and define columns. */
/*********************************************************************/
for (i = 1; ; i++) {
for (jpp = row->GetFirst(); jpp; jpp = jpp->GetNext()) {
for (j = 0; j < lvl; j++)
jrp[j] = NULL;
more:
strncpy(colname, jpp->GetKey(), 64);
*p = 0;
j = 0;
jvp = jpp->GetVal();
retry:
if ((valp = jvp ? jvp->GetValue() : NULL)) {
jcol.Type = valp->GetType();
jcol.Len = valp->GetValLen();
jcol.Scale = valp->GetValPrec();
jcol.Cbn = valp->IsNull();
} else if (!jvp || jvp->IsNull()) {
jcol.Type = TYPE_UNKNOWN;
jcol.Len = jcol.Scale = 0;
jcol.Cbn = true;
} else if (j < lvl) {
if (!*p)
strcat(fmt, colname);
jsp = jvp->GetJson();
switch (jsp->GetType()) {
case TYPE_JOB:
if (!jrp[j])
jrp[j] = jsp->GetFirst();
if (*jrp[j]->GetKey() != '$') {
strncat(strncat(fmt, sep, 128), jrp[j]->GetKey(), 128);
strncat(strncat(colname, "_", 64), jrp[j]->GetKey(), 64);
} // endif Key
jvp = jrp[j]->GetVal();
j++;
break;
case TYPE_JAR:
if (!tdp->Xcol || stricmp(tdp->Xcol, colname)) {
if (tdp->Uri)
strncat(strncat(fmt, sep, 128), "0", 128);
else
strncat(fmt, "[0]", 128);
} else
strncat(fmt, (tdp->Uri ? sep : "[]"), 128);
jvp = jsp->GetValue(0);
break;
default:
sprintf(g->Message, "Logical error after %s", fmt);
goto err;
} // endswitch jsp
goto retry;
} else if (lvl >= 0) {
jcol.Type = TYPE_STRING;
jcol.Len = 256;
jcol.Scale = 0;
jcol.Cbn = true;
} else
continue;
// Check whether this column was already found
for (jcp = fjcp; jcp; jcp = jcp->Next)
if (!strcmp(colname, jcp->Name))
break;
if (jcp) {
if (jcp->Type != jcol.Type) {
if (jcp->Type == TYPE_UNKNOWN)
jcp->Type = jcol.Type;
else if (jcol.Type != TYPE_UNKNOWN)
jcp->Type = TYPE_STRING;
} // endif Type
if (*p && (!jcp->Fmt || strlen(jcp->Fmt) < strlen(fmt))) {
jcp->Fmt = PlugDup(g, fmt);
length[7] = MY_MAX(length[7], strlen(fmt));
} // endif fmt
jcp->Len = MY_MAX(jcp->Len, jcol.Len);
jcp->Scale = MY_MAX(jcp->Scale, jcol.Scale);
jcp->Cbn |= jcol.Cbn;
jcp->Found = true;
} else if (jcol.Type != TYPE_UNKNOWN || tdp->Accept) {
// New column
jcp = (PJCL)PlugSubAlloc(g, NULL, sizeof(JCOL));
*jcp = jcol;
jcp->Cbn |= (i > 1);
jcp->Name = PlugDup(g, colname);
length[0] = MY_MAX(length[0], strlen(colname));
if (*p) {
jcp->Fmt = PlugDup(g, fmt);
length[7] = MY_MAX(length[7], strlen(fmt));
} else
jcp->Fmt = NULL;
if (pjcp) {
jcp->Next = pjcp->Next;
pjcp->Next = jcp;
} else
fjcp = jcp;
n++;
} // endif jcp
pjcp = jcp;
for (j = lvl - 1; j >= 0; j--)
if (jrp[j] && (jrp[j] = jrp[j]->GetNext()))
goto more;
} // endfor jpp
// Missing column can be null
for (jcp = fjcp; jcp; jcp = jcp->Next) {
jcp->Cbn |= !jcp->Found;
jcp->Found = false;
} // endfor jcp
if (tdp->Pretty != 2) {
// Read next record
switch (tjnp->ReadDB(g)) {
case RC_EF:
jsp = NULL;
break;
case RC_FX:
goto err;
default:
jsp = tjnp->GetRow();
} // endswitch ReadDB
} else
jsp = tjsp->GetDoc()->GetValue(i);
if (!(row = (jsp) ? jsp->GetObject() : NULL))
break;
} // endor i
if (tdp->Pretty != 2)
tjnp->CloseDB(g);
skipit: skipit:
if (trace) if (trace(1))
htrc("JSONColumns: n=%d len=%d\n", n, length[0]); htrc("JSONColumns: n=%d len=%d\n", n, length[0]);
/*********************************************************************/ /*********************************************************************/
@@ -443,7 +121,7 @@ PQRYRES JSONColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt, bool info)
/*********************************************************************/ /*********************************************************************/
/* Now get the results into blocks. */ /* Now get the results into blocks. */
/*********************************************************************/ /*********************************************************************/
for (i = 0, jcp = fjcp; jcp; i++, jcp = jcp->Next) { for (i = 0, jcp = pjdc->fjcp; jcp; i++, jcp = jcp->Next) {
if (jcp->Type == TYPE_UNKNOWN) if (jcp->Type == TYPE_UNKNOWN)
jcp->Type = TYPE_STRING; // Void column jcp->Type = TYPE_STRING; // Void column
@@ -472,13 +150,381 @@ PQRYRES JSONColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt, bool info)
/* Return the result pointer. */ /* Return the result pointer. */
/*********************************************************************/ /*********************************************************************/
return qrp; return qrp;
} // end of JSONColumns
/* -------------------------- Class JSONDISC ------------------------- */
/***********************************************************************/
/* Class used to get the columns of a JSON table. */
/***********************************************************************/
JSONDISC::JSONDISC(PGLOBAL g, uint *lg)
{
length = lg;
jcp = fjcp = pjcp = NULL;
tjnp = NULL;
jpp = NULL;
tjsp = NULL;
jsp = NULL;
row = NULL;
sep = NULL;
i = n = bf = ncol = lvl = 0;
all = false;
} // end of JSONDISC constructor
int JSONDISC::GetColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt)
{
bool mgo = (GetTypeID(topt->type) == TAB_MONGO);
PCSZ level = GetStringTableOption(g, topt, "Level", NULL);
if (level) {
lvl = atoi(level);
lvl = (lvl > 16) ? 16 : lvl;
} else
lvl = 0;
sep = GetStringTableOption(g, topt, "Separator", ".");
/*********************************************************************/
/* Open the input file. */
/*********************************************************************/
tdp = new(g) JSONDEF;
#if defined(ZIP_SUPPORT)
tdp->Entry = GetStringTableOption(g, topt, "Entry", NULL);
tdp->Zipped = GetBooleanTableOption(g, topt, "Zipped", false);
#endif // ZIP_SUPPORT
tdp->Fn = GetStringTableOption(g, topt, "Filename", NULL);
if (!(tdp->Database = SetPath(g, db)))
return NULL;
tdp->Objname = GetStringTableOption(g, topt, "Object", NULL);
tdp->Base = GetIntegerTableOption(g, topt, "Base", 0) ? 1 : 0;
tdp->Pretty = GetIntegerTableOption(g, topt, "Pretty", 2);
tdp->Xcol = GetStringTableOption(g, topt, "Expand", NULL);
tdp->Accept = GetBooleanTableOption(g, topt, "Accept", false);
tdp->Uri = (dsn && *dsn ? dsn : NULL);
if (!tdp->Fn && !tdp->Uri) {
strcpy(g->Message, MSG(MISSING_FNAME));
return 0;
} // endif Fn
if (trace(1))
htrc("File %s objname=%s pretty=%d lvl=%d\n",
tdp->Fn, tdp->Objname, tdp->Pretty, lvl);
if (tdp->Uri) {
#if defined(JAVA_SUPPORT) || defined(CMGO_SUPPORT)
tdp->Collname = GetStringTableOption(g, topt, "Name", NULL);
tdp->Collname = GetStringTableOption(g, topt, "Tabname", tdp->Collname);
tdp->Schema = GetStringTableOption(g, topt, "Dbname", "test");
tdp->Options = (PSZ)GetStringTableOption(g, topt, "Colist", "all");
tdp->Pipe = GetBooleanTableOption(g, topt, "Pipeline", false);
tdp->Driver = (PSZ)GetStringTableOption(g, topt, "Driver", NULL);
tdp->Version = GetIntegerTableOption(g, topt, "Version", 3);
tdp->Wrapname = (PSZ)GetStringTableOption(g, topt, "Wrapper",
(tdp->Version == 2) ? "Mongo2Interface" : "Mongo3Interface");
tdp->Pretty = 0;
#else // !MONGO_SUPPORT
sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "MONGO");
return 0;
#endif // !MONGO_SUPPORT
} // endif Uri
if (tdp->Pretty == 2) {
if (tdp->Zipped) {
#if defined(ZIP_SUPPORT)
tjsp = new(g) TDBJSON(tdp, new(g) UNZFAM(tdp));
#else // !ZIP_SUPPORT
sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "ZIP");
return 0;
#endif // !ZIP_SUPPORT
} else
tjsp = new(g) TDBJSON(tdp, new(g) MAPFAM(tdp));
if (tjsp->MakeDocument(g))
return NULL;
jsp = (tjsp->GetDoc()) ? tjsp->GetDoc()->GetValue(0) : NULL;
} else {
if (!(tdp->Lrecl = GetIntegerTableOption(g, topt, "Lrecl", 0)))
if (!mgo) {
sprintf(g->Message, "LRECL must be specified for pretty=%d", tdp->Pretty);
return NULL;
} else
tdp->Lrecl = 8192; // Should be enough
tdp->Ending = GetIntegerTableOption(g, topt, "Ending", CRLF);
if (tdp->Zipped) {
#if defined(ZIP_SUPPORT)
tjnp = new(g)TDBJSN(tdp, new(g) UNZFAM(tdp));
#else // !ZIP_SUPPORT
sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "ZIP");
return NULL;
#endif // !ZIP_SUPPORT
} else if (tdp->Uri) {
if (tdp->Driver && toupper(*tdp->Driver) == 'C') {
#if defined(CMGO_SUPPORT)
tjnp = new(g) TDBJSN(tdp, new(g) CMGFAM(tdp));
#else
sprintf(g->Message, "Mongo %s Driver not available", "C");
return NULL;
#endif
} else if (tdp->Driver && toupper(*tdp->Driver) == 'J') {
#if defined(JAVA_SUPPORT)
tjnp = new(g) TDBJSN(tdp, new(g) JMGFAM(tdp));
#else
sprintf(g->Message, "Mongo %s Driver not available", "Java");
return NULL;
#endif
} else { // Driver not specified
#if defined(CMGO_SUPPORT)
tjnp = new(g) TDBJSN(tdp, new(g) CMGFAM(tdp));
#elif defined(JAVA_SUPPORT)
tjnp = new(g) TDBJSN(tdp, new(g) JMGFAM(tdp));
#else
sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "MONGO");
return NULL;
#endif
} // endif Driver
} else
tjnp = new(g) TDBJSN(tdp, new(g) DOSFAM(tdp));
tjnp->SetMode(MODE_READ);
// Allocate the parse work memory
PGLOBAL G = (PGLOBAL)PlugSubAlloc(g, NULL, sizeof(GLOBAL));
memset(G, 0, sizeof(GLOBAL));
G->Sarea_Size = tdp->Lrecl * 10;
G->Sarea = PlugSubAlloc(g, NULL, G->Sarea_Size);
PlugSubSet(G, G->Sarea, G->Sarea_Size);
G->jump_level = 0;
tjnp->SetG(G);
if (tjnp->OpenDB(g))
return NULL;
switch (tjnp->ReadDB(g)) {
case RC_EF:
strcpy(g->Message, "Void json table");
case RC_FX:
goto err;
default:
jsp = tjnp->GetRow();
} // endswitch ReadDB
} // endif pretty
if (!(row = (jsp) ? jsp->GetObject() : NULL)) {
strcpy(g->Message, "Can only retrieve columns from object rows");
goto err;
} // endif row
all = GetBooleanTableOption(g, topt, "Fullarray", false);
jcol.Name = jcol.Fmt = NULL;
jcol.Next = NULL;
jcol.Found = true;
colname[0] = 0;
if (!tdp->Uri) {
fmt[0] = '$';
fmt[1] = '.';
bf = 2;
} // endif Uri
/*********************************************************************/
/* Analyse the JSON tree and define columns. */
/*********************************************************************/
for (i = 1; ; i++) {
for (jpp = row->GetFirst(); jpp; jpp = jpp->GetNext()) {
strncpy(colname, jpp->GetKey(), 64);
fmt[bf] = 0;
if (Find(g, jpp->GetVal(), MY_MIN(lvl, 0)))
goto err;
} // endfor jpp
// Missing column can be null
for (jcp = fjcp; jcp; jcp = jcp->Next) {
jcp->Cbn |= !jcp->Found;
jcp->Found = false;
} // endfor jcp
if (tdp->Pretty != 2) {
// Read next record
switch (tjnp->ReadDB(g)) {
case RC_EF:
jsp = NULL;
break;
case RC_FX:
goto err;
default:
jsp = tjnp->GetRow();
} // endswitch ReadDB
} else
jsp = tjsp->GetDoc()->GetValue(i);
if (!(row = (jsp) ? jsp->GetObject() : NULL))
break;
} // endfor i
if (tdp->Pretty != 2)
tjnp->CloseDB(g);
return n;
err: err:
if (tdp->Pretty != 2) if (tdp->Pretty != 2)
tjnp->CloseDB(g); tjnp->CloseDB(g);
return 0;
} // end of GetColumns
bool JSONDISC::Find(PGLOBAL g, PJVAL jvp, int j)
{
char *p, *pc = colname + strlen(colname);
int ars;
PJOB job;
PJAR jar;
if ((valp = jvp ? jvp->GetValue() : NULL)) {
jcol.Type = valp->GetType();
jcol.Len = valp->GetValLen();
jcol.Scale = valp->GetValPrec();
jcol.Cbn = valp->IsNull();
} else if (!jvp || jvp->IsNull()) {
jcol.Type = TYPE_UNKNOWN;
jcol.Len = jcol.Scale = 0;
jcol.Cbn = true;
} else if (j < lvl) {
if (!fmt[bf])
strcat(fmt, colname);
p = fmt + strlen(fmt);
jsp = jvp->GetJson();
switch (jsp->GetType()) {
case TYPE_JOB:
job = (PJOB)jsp;
for (PJPR jrp = job->GetFirst(); jrp; jrp = jrp->GetNext()) {
if (*jrp->GetKey() != '$') {
strncat(strncat(fmt, sep, 128), jrp->GetKey(), 128);
strncat(strncat(colname, "_", 64), jrp->GetKey(), 64);
} // endif Key
if (Find(g, jrp->GetVal(), j + 1))
return true;
*p = *pc = 0;
} // endfor jrp
return false;
case TYPE_JAR:
jar = (PJAR)jsp;
if (all || (tdp->Xcol && !stricmp(tdp->Xcol, colname)))
ars = jar->GetSize(false);
else
ars = MY_MIN(jar->GetSize(false), 1);
for (int k = 0; k < ars; k++) {
if (!tdp->Xcol || stricmp(tdp->Xcol, colname)) {
sprintf(buf, "%d", k);
if (tdp->Uri)
strncat(strncat(fmt, sep, 128), buf, 128);
else
strncat(strncat(strncat(fmt, "[", 128), buf, 128), "]", 128);
if (all)
strncat(strncat(colname, "_", 64), buf, 64);
} else
strncat(fmt, (tdp->Uri ? sep : "[*]"), 128);
if (Find(g, jar->GetValue(k), j))
return true;
*p = *pc = 0;
} // endfor k
return false;
default:
sprintf(g->Message, "Logical error after %s", fmt);
return true;
} // endswitch Type
} else if (lvl >= 0) {
jcol.Type = TYPE_STRING;
jcol.Len = 256;
jcol.Scale = 0;
jcol.Cbn = true;
} else
return false;
AddColumn(g);
return false;
} // end of Find
void JSONDISC::AddColumn(PGLOBAL g)
{
bool b = fmt[bf] != 0; // True if formatted
// Check whether this column was already found
for (jcp = fjcp; jcp; jcp = jcp->Next)
if (!strcmp(colname, jcp->Name))
break;
if (jcp) {
if (jcp->Type != jcol.Type) {
if (jcp->Type == TYPE_UNKNOWN)
jcp->Type = jcol.Type;
else if (jcol.Type != TYPE_UNKNOWN)
jcp->Type = TYPE_STRING;
} // endif Type
if (b && (!jcp->Fmt || strlen(jcp->Fmt) < strlen(fmt))) {
jcp->Fmt = PlugDup(g, fmt);
length[7] = MY_MAX(length[7], strlen(fmt));
} // endif fmt
jcp->Len = MY_MAX(jcp->Len, jcol.Len);
jcp->Scale = MY_MAX(jcp->Scale, jcol.Scale);
jcp->Cbn |= jcol.Cbn;
jcp->Found = true;
} else if (jcol.Type != TYPE_UNKNOWN || tdp->Accept) {
// New column
jcp = (PJCL)PlugSubAlloc(g, NULL, sizeof(JCOL));
*jcp = jcol;
jcp->Cbn |= (i > 1);
jcp->Name = PlugDup(g, colname);
length[0] = MY_MAX(length[0], strlen(colname));
if (b) {
jcp->Fmt = PlugDup(g, fmt);
length[7] = MY_MAX(length[7], strlen(fmt));
} else
jcp->Fmt = NULL;
if (pjcp) {
jcp->Next = pjcp->Next;
pjcp->Next = jcp;
} else
fjcp = jcp;
n++;
} // endif jcp
pjcp = jcp;
} // end of AddColumn
return NULL;
} // end of JSONColumns
/* -------------------------- Class JSONDEF -------------------------- */ /* -------------------------- Class JSONDEF -------------------------- */
@@ -513,6 +559,7 @@ bool JSONDEF::DefineAM(PGLOBAL g, LPCSTR, int poff)
Limit = GetIntCatInfo("Limit", 10); Limit = GetIntCatInfo("Limit", 10);
Base = GetIntCatInfo("Base", 0) ? 1 : 0; Base = GetIntCatInfo("Base", 0) ? 1 : 0;
Sep = *GetStringCatInfo(g, "Separator", "."); Sep = *GetStringCatInfo(g, "Separator", ".");
Accept = GetBoolCatInfo("Accept", false);
if (Uri = GetStringCatInfo(g, "Connect", NULL)) { if (Uri = GetStringCatInfo(g, "Connect", NULL)) {
#if defined(JAVA_SUPPORT) || defined(CMGO_SUPPORT) #if defined(JAVA_SUPPORT) || defined(CMGO_SUPPORT)
@@ -1471,6 +1518,9 @@ void JSONCOL::ReadColumn(PGLOBAL g)
if (!Tjp->SameRow || Xnod >= Tjp->SameRow) if (!Tjp->SameRow || Xnod >= Tjp->SameRow)
Value->SetValue_pval(GetColumnValue(g, Tjp->Row, 0)); Value->SetValue_pval(GetColumnValue(g, Tjp->Row, 0));
if (Xpd && Value->IsNull() && !((PJDEF)Tjp->To_Def)->Accept)
throw("Null expandable JSON value");
// Set null when applicable // Set null when applicable
if (!Nullable) if (!Nullable)
Value->SetNull(false); Value->SetNull(false);
@@ -1546,11 +1596,16 @@ PVAL JSONCOL::GetColumnValue(PGLOBAL g, PJSON row, int i)
/***********************************************************************/ /***********************************************************************/
PVAL JSONCOL::ExpandArray(PGLOBAL g, PJAR arp, int n) PVAL JSONCOL::ExpandArray(PGLOBAL g, PJAR arp, int n)
{ {
int ars; int ars = MY_MIN(Tjp->Limit, arp->size());
PJVAL jvp; PJVAL jvp;
JVALUE jval; JVALUE jval;
ars = MY_MIN(Tjp->Limit, arp->size()); if (!ars) {
Value->Reset();
Value->SetNull(true);
Tjp->NextSame = 0;
return Value;
} // endif ars
if (!(jvp = arp->GetValue((Nodes[n].Rx = Nodes[n].Nx)))) { if (!(jvp = arp->GetValue((Nodes[n].Rx = Nodes[n].Nx)))) {
strcpy(g->Message, "Logical error expanding array"); strcpy(g->Message, "Logical error expanding array");
@@ -1591,14 +1646,14 @@ PVAL JSONCOL::CalculateArray(PGLOBAL g, PJAR arp, int n)
vp->Reset(); vp->Reset();
ars = MY_MIN(Tjp->Limit, arp->size()); ars = MY_MIN(Tjp->Limit, arp->size());
if (trace) if (trace(1))
htrc("CalculateArray: size=%d op=%d nextsame=%d\n", htrc("CalculateArray: size=%d op=%d nextsame=%d\n",
ars, op, nextsame); ars, op, nextsame);
for (i = 0; i < ars; i++) { for (i = 0; i < ars; i++) {
jvrp = arp->GetValue(i); jvrp = arp->GetValue(i);
if (trace) if (trace(1))
htrc("i=%d nv=%d\n", i, nv); htrc("i=%d nv=%d\n", i, nv);
if (!jvrp->IsNull() || (op == OP_CNC && GetJsonNull())) do { if (!jvrp->IsNull() || (op == OP_CNC && GetJsonNull())) do {
@@ -1612,7 +1667,7 @@ PVAL JSONCOL::CalculateArray(PGLOBAL g, PJAR arp, int n)
} else } else
jvp = jvrp; jvp = jvrp;
if (trace) if (trace(1))
htrc("jvp=%s null=%d\n", htrc("jvp=%s null=%d\n",
jvp->GetString(g), jvp->IsNull() ? 1 : 0); jvp->GetString(g), jvp->IsNull() ? 1 : 0);
@@ -1648,7 +1703,7 @@ PVAL JSONCOL::CalculateArray(PGLOBAL g, PJAR arp, int n)
if (err) if (err)
vp->Reset(); vp->Reset();
if (trace) { if (trace(1)) {
char buf(32); char buf(32);
htrc("vp='%s' err=%d\n", htrc("vp='%s' err=%d\n",

View File

@@ -15,6 +15,7 @@ enum JMODE {MODE_OBJECT, MODE_ARRAY, MODE_VALUE};
typedef class JSONDEF *PJDEF; typedef class JSONDEF *PJDEF;
typedef class TDBJSON *PJTDB; typedef class TDBJSON *PJTDB;
typedef class JSONCOL *PJCOL; typedef class JSONCOL *PJCOL;
class TDBJSN;
/***********************************************************************/ /***********************************************************************/
/* The JSON tree node. Can be an Object or an Array. */ /* The JSON tree node. Can be an Object or an Array. */
@@ -29,6 +30,47 @@ typedef struct _jnode {
int Nx; // Next to read row number int Nx; // Next to read row number
} JNODE, *PJNODE; } JNODE, *PJNODE;
typedef struct _jncol {
struct _jncol *Next;
char *Name;
char *Fmt;
int Type;
int Len;
int Scale;
bool Cbn;
bool Found;
} JCOL, *PJCL;
/***********************************************************************/
/* Class used to get the columns of a mongo collection. */
/***********************************************************************/
class JSONDISC : public BLOCK {
public:
// Constructor
JSONDISC(PGLOBAL g, uint *lg);
// Functions
int GetColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt);
bool Find(PGLOBAL g, PJVAL jvp, int j);
void AddColumn(PGLOBAL g);
// Members
JCOL jcol;
PJCL jcp, fjcp, pjcp;
PVAL valp;
PJDEF tdp;
TDBJSN *tjnp;
PJTDB tjsp;
PJPR jpp;
PJSON jsp;
PJOB row;
PCSZ sep;
char colname[65], fmt[129], buf[16];
uint *length;
int i, n, bf, ncol, lvl;
bool all;
}; // end of JSONDISC
/***********************************************************************/ /***********************************************************************/
/* JSON table. */ /* JSON table. */
/***********************************************************************/ /***********************************************************************/
@@ -36,13 +78,13 @@ class DllExport JSONDEF : public DOSDEF { /* Table description */
friend class TDBJSON; friend class TDBJSON;
friend class TDBJSN; friend class TDBJSN;
friend class TDBJCL; friend class TDBJCL;
friend class JSONDISC;
#if defined(CMGO_SUPPORT) #if defined(CMGO_SUPPORT)
friend class CMGFAM; friend class CMGFAM;
#endif // CMGO_SUPPORT #endif // CMGO_SUPPORT
#if defined(JAVA_SUPPORT) #if defined(JAVA_SUPPORT)
friend class JMGFAM; friend class JMGFAM;
#endif // JAVA_SUPPORT #endif // JAVA_SUPPORT
friend PQRYRES JSONColumns(PGLOBAL, PCSZ, PCSZ, PTOS, bool);
public: public:
// Constructor // Constructor
JSONDEF(void); JSONDEF(void);

View File

@@ -128,7 +128,7 @@ PCOL TDB::ColDB(PGLOBAL g, PSZ name, int num)
PCOLDEF cdp; PCOLDEF cdp;
PCOL cp, colp = NULL, cprec = NULL; PCOL cp, colp = NULL, cprec = NULL;
if (trace) if (trace(1))
htrc("ColDB: am=%d colname=%s tabname=%s num=%d\n", htrc("ColDB: am=%d colname=%s tabname=%s num=%d\n",
GetAmType(), SVP(name), Name, num); GetAmType(), SVP(name), Name, num);
@@ -146,7 +146,7 @@ PCOL TDB::ColDB(PGLOBAL g, PSZ name, int num)
else if (cp->GetIndex() < i) else if (cp->GetIndex() < i)
cprec = cp; cprec = cp;
if (trace) if (trace(1))
htrc("cdp(%d).Name=%s cp=%p\n", i, cdp->GetName(), cp); htrc("cdp(%d).Name=%s cp=%p\n", i, cdp->GetName(), cp);
/*****************************************************************/ /*****************************************************************/
@@ -159,7 +159,7 @@ PCOL TDB::ColDB(PGLOBAL g, PSZ name, int num)
else if (Mode != MODE_INSERT) else if (Mode != MODE_INSERT)
colp = InsertSpcBlk(g, cdp); colp = InsertSpcBlk(g, cdp);
if (trace) if (trace(1))
htrc("colp=%p\n", colp); htrc("colp=%p\n", colp);
if (name || num) if (name || num)
@@ -256,7 +256,7 @@ PCOL TDB::InsertSpcBlk(PGLOBAL g, PCOLDEF cdp)
/***********************************************************************/ /***********************************************************************/
void TDB::MarkDB(PGLOBAL, PTDB tdb2) void TDB::MarkDB(PGLOBAL, PTDB tdb2)
{ {
if (trace) if (trace(1))
htrc("DOS MarkDB: tdbp=%p tdb2=%p\n", this, tdb2); htrc("DOS MarkDB: tdbp=%p tdb2=%p\n", this, tdb2);
} // end of MarkDB } // end of MarkDB
@@ -416,7 +416,7 @@ PCOL TDBASE::ColDB(PGLOBAL g, PSZ name, int num)
PCOLDEF cdp; PCOLDEF cdp;
PCOL cp, colp = NULL, cprec = NULL; PCOL cp, colp = NULL, cprec = NULL;
if (trace) if (trace(1))
htrc("ColDB: am=%d colname=%s tabname=%s num=%d\n", htrc("ColDB: am=%d colname=%s tabname=%s num=%d\n",
GetAmType(), SVP(name), Name, num); GetAmType(), SVP(name), Name, num);
@@ -434,7 +434,7 @@ PCOL TDBASE::ColDB(PGLOBAL g, PSZ name, int num)
else if (cp->GetIndex() < i) else if (cp->GetIndex() < i)
cprec = cp; cprec = cp;
if (trace) if (trace(1))
htrc("cdp(%d).Name=%s cp=%p\n", i, cdp->GetName(), cp); htrc("cdp(%d).Name=%s cp=%p\n", i, cdp->GetName(), cp);
/*****************************************************************/ /*****************************************************************/
@@ -447,7 +447,7 @@ PCOL TDBASE::ColDB(PGLOBAL g, PSZ name, int num)
else if (Mode != MODE_INSERT) else if (Mode != MODE_INSERT)
colp = InsertSpcBlk(g, cdp); colp = InsertSpcBlk(g, cdp);
if (trace) if (trace(1))
htrc("colp=%p\n", colp); htrc("colp=%p\n", colp);
if (name || num) if (name || num)
@@ -592,7 +592,7 @@ void TDBASE::PrintAM(FILE *f, char *m)
/***********************************************************************/ /***********************************************************************/
void TDBASE::MarkDB(PGLOBAL, PTDB tdb2) void TDBASE::MarkDB(PGLOBAL, PTDB tdb2)
{ {
if (trace) if (trace(1))
htrc("DOS MarkDB: tdbp=%p tdb2=%p\n", this, tdb2); htrc("DOS MarkDB: tdbp=%p tdb2=%p\n", this, tdb2);
} // end of MarkDB } // end of MarkDB

View File

@@ -134,7 +134,7 @@ bool TDBMUL::InitFileNames(PGLOBAL g)
PSZ filename; PSZ filename;
int rc, n = 0; int rc, n = 0;
if (trace) if (trace(1))
htrc("in InitFileName: fn[]=%d\n", FNSZ); htrc("in InitFileName: fn[]=%d\n", FNSZ);
filename = (char*)PlugSubAlloc(g, NULL, FNSZ); filename = (char*)PlugSubAlloc(g, NULL, FNSZ);
@@ -144,7 +144,7 @@ bool TDBMUL::InitFileNames(PGLOBAL g)
PlugSetPath(filename, Tdbp->GetFile(g), Tdbp->GetPath()); PlugSetPath(filename, Tdbp->GetFile(g), Tdbp->GetPath());
if (trace) if (trace(1))
htrc("InitFileName: fn='%s'\n", filename); htrc("InitFileName: fn='%s'\n", filename);
if (Mul != 2) { if (Mul != 2) {
@@ -159,7 +159,7 @@ bool TDBMUL::InitFileNames(PGLOBAL g)
if (dirp->OpenDB(g)) if (dirp->OpenDB(g))
return true; return true;
if (trace && Mul == 3) { if (trace(1) && Mul == 3) {
int nf = ((PTDBSDR)dirp)->FindInDir(g); int nf = ((PTDBSDR)dirp)->FindInDir(g);
htrc("Number of files = %d\n", nf); htrc("Number of files = %d\n", nf);
} // endif trace } // endif trace
@@ -319,7 +319,7 @@ int TDBMUL::GetMaxSize(PGLOBAL g)
int i; int i;
int mxsz; int mxsz;
if (trace) if (trace(1))
htrc("TDBMUL::GetMaxSize: Filenames=%p\n", Filenames); htrc("TDBMUL::GetMaxSize: Filenames=%p\n", Filenames);
if (!Filenames && InitFileNames(g)) if (!Filenames && InitFileNames(g))
@@ -375,7 +375,7 @@ int TDBMUL::RowNumber(PGLOBAL g, bool b)
/***********************************************************************/ /***********************************************************************/
bool TDBMUL::OpenDB(PGLOBAL g) bool TDBMUL::OpenDB(PGLOBAL g)
{ {
if (trace) if (trace(1))
htrc("MUL OpenDB: tdbp=%p tdb=R%d use=%d key=%p mode=%d\n", htrc("MUL OpenDB: tdbp=%p tdb=R%d use=%d key=%p mode=%d\n",
this, Tdb_No, Use, To_Key_Col, Mode); this, Tdb_No, Use, To_Key_Col, Mode);
@@ -546,7 +546,7 @@ bool TDBMSD::InitFileNames(PGLOBAL g)
PSZ filename; PSZ filename;
int rc, n = 0; int rc, n = 0;
if (trace) if (trace(1))
htrc("in InitFileName: fn[]=%d\n", FNSZ); htrc("in InitFileName: fn[]=%d\n", FNSZ);
filename = (char*)PlugSubAlloc(g, NULL, FNSZ); filename = (char*)PlugSubAlloc(g, NULL, FNSZ);
@@ -556,7 +556,7 @@ bool TDBMSD::InitFileNames(PGLOBAL g)
PlugSetPath(filename, Tdbp->GetFile(g), Tdbp->GetPath()); PlugSetPath(filename, Tdbp->GetFile(g), Tdbp->GetPath());
if (trace) if (trace(1))
htrc("InitFileName: fn='%s'\n", filename); htrc("InitFileName: fn='%s'\n", filename);
dirp = new(g) TDBSDR(filename); dirp = new(g) TDBSDR(filename);
@@ -787,7 +787,7 @@ int TDBDIR::GetMaxSize(PGLOBAL g)
/***********************************************************************/ /***********************************************************************/
bool TDBDIR::OpenDB(PGLOBAL g) bool TDBDIR::OpenDB(PGLOBAL g)
{ {
if (trace) if (trace(1))
htrc("DIR OpenDB: tdbp=%p tdb=R%d use=%d mode=%d\n", htrc("DIR OpenDB: tdbp=%p tdb=R%d use=%d mode=%d\n",
this, Tdb_No, Use, Mode); this, Tdb_No, Use, Mode);
@@ -985,7 +985,7 @@ void DIRCOL::SetTimeValue(PGLOBAL g, FILETIME& ftime)
/***********************************************************************/ /***********************************************************************/
void DIRCOL::ReadColumn(PGLOBAL g) void DIRCOL::ReadColumn(PGLOBAL g)
{ {
if (trace) if (trace(1))
htrc("DIR ReadColumn: col %s R%d use=%.4X status=%.4X type=%d N=%d\n", htrc("DIR ReadColumn: col %s R%d use=%.4X status=%.4X type=%d N=%d\n",
Name, Tdbp->GetTdb_No(), ColUse, Status, Buf_Type, N); Name, Tdbp->GetTdb_No(), ColUse, Status, Buf_Type, N);
@@ -1452,7 +1452,7 @@ int TDBDHR::GetMaxSize(PGLOBAL g)
/***********************************************************************/ /***********************************************************************/
bool TDBDHR::OpenDB(PGLOBAL g) bool TDBDHR::OpenDB(PGLOBAL g)
{ {
if (trace) if (trace(1))
htrc("DHR OpenDB: tdbp=%p tdb=R%d use=%d mode=%d\n", htrc("DHR OpenDB: tdbp=%p tdb=R%d use=%d mode=%d\n",
this, Tdb_No, Use, Mode); this, Tdb_No, Use, Mode);
@@ -1589,7 +1589,7 @@ void DHRCOL::ReadColumn(PGLOBAL g)
int rc; int rc;
PTDBDHR tdbp = (PTDBDHR)To_Tdb; PTDBDHR tdbp = (PTDBDHR)To_Tdb;
if (trace) if (trace(1))
htrc("DHR ReadColumn: col %s R%d use=%.4X status=%.4X type=%d N=%d\n", htrc("DHR ReadColumn: col %s R%d use=%.4X status=%.4X type=%d N=%d\n",
Name, tdbp->GetTdb_No(), ColUse, Status, Buf_Type, N); Name, tdbp->GetTdb_No(), ColUse, Status, Buf_Type, N);

View File

@@ -203,7 +203,7 @@ bool MYSQLDEF::ParseURL(PGLOBAL g, char *url, bool b)
// Otherwise, straight server name, // Otherwise, straight server name,
Tabname = (b) ? GetStringCatInfo(g, "Tabname", Name) : NULL; Tabname = (b) ? GetStringCatInfo(g, "Tabname", Name) : NULL;
if (trace) if (trace(1))
htrc("server: %s TableName: %s", url, Tabname); htrc("server: %s TableName: %s", url, Tabname);
Server = url; Server = url;
@@ -567,7 +567,7 @@ bool TDBMYSQL::MakeSelect(PGLOBAL g, bool mx)
return true; return true;
} // endif Query } // endif Query
if (trace) if (trace(33))
htrc("Query=%s\n", Query->GetStr()); htrc("Query=%s\n", Query->GetStr());
return false; return false;
@@ -1042,7 +1042,7 @@ int TDBMYSQL::SendCommand(PGLOBAL g)
sprintf(g->Message, "%s: %d affected rows", TableName, AftRows); sprintf(g->Message, "%s: %d affected rows", TableName, AftRows);
PushWarning(g, this, 0); // 0 means a Note PushWarning(g, this, 0); // 0 means a Note
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
if (w && Myc.ExecSQL(g, "SHOW WARNINGS") == RC_OK) { if (w && Myc.ExecSQL(g, "SHOW WARNINGS") == RC_OK) {
@@ -1109,7 +1109,7 @@ bool TDBMYSQL::ReadKey(PGLOBAL g, OPVAL op, const key_range *kr)
Mode = MODE_READ; Mode = MODE_READ;
} // endif's op } // endif's op
if (trace) if (trace(33))
htrc("MYSQL ReadKey: Query=%s\n", Query->GetStr()); htrc("MYSQL ReadKey: Query=%s\n", Query->GetStr());
m_Rc = Myc.ExecSQL(g, Query->GetStr()); m_Rc = Myc.ExecSQL(g, Query->GetStr());
@@ -1124,7 +1124,7 @@ int TDBMYSQL::ReadDB(PGLOBAL g)
{ {
int rc; int rc;
if (trace > 1) if (trace(2))
htrc("MySQL ReadDB: R%d Mode=%d\n", GetTdb_No(), Mode); htrc("MySQL ReadDB: R%d Mode=%d\n", GetTdb_No(), Mode);
if (Mode == MODE_UPDATE || Mode == MODE_DELETE) if (Mode == MODE_UPDATE || Mode == MODE_DELETE)
@@ -1137,7 +1137,7 @@ int TDBMYSQL::ReadDB(PGLOBAL g)
N++; N++;
Fetched = ((rc = Myc.Fetch(g, -1)) == RC_OK); Fetched = ((rc = Myc.Fetch(g, -1)) == RC_OK);
if (trace > 1) if (trace(2))
htrc(" Read: rc=%d\n", rc); htrc(" Read: rc=%d\n", rc);
return rc; return rc;
@@ -1220,7 +1220,7 @@ void TDBMYSQL::CloseDB(PGLOBAL g)
Myc.Close(); Myc.Close();
} // endif Myc } // endif Myc
if (trace) if (trace(1))
htrc("MySQL CloseDB: closing %s rc=%d\n", Name, m_Rc); htrc("MySQL CloseDB: closing %s rc=%d\n", Name, m_Rc);
} // end of CloseDB } // end of CloseDB
@@ -1248,7 +1248,7 @@ MYSQLCOL::MYSQLCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PCSZ am)
Slen = 0; Slen = 0;
Rank = -1; // Not known yet Rank = -1; // Not known yet
if (trace) if (trace(1))
htrc(" making new %sCOL C%d %s at %p\n", am, Index, Name, this); htrc(" making new %sCOL C%d %s at %p\n", am, Index, Name, this);
} // end of MYSQLCOL constructor } // end of MYSQLCOL constructor
@@ -1279,7 +1279,7 @@ MYSQLCOL::MYSQLCOL(MYSQL_FIELD *fld, PTDB tdbp, int i, PCSZ am)
Slen = 0; Slen = 0;
Rank = i; Rank = i;
if (trace) if (trace(1))
htrc(" making new %sCOL C%d %s at %p\n", am, Index, Name, this); htrc(" making new %sCOL C%d %s at %p\n", am, Index, Name, this);
} // end of MYSQLCOL constructor } // end of MYSQLCOL constructor
@@ -1409,7 +1409,7 @@ void MYSQLCOL::ReadColumn(PGLOBAL g)
tdbp->Fetched = true; tdbp->Fetched = true;
if ((buf = ((PTDBMY)To_Tdb)->Myc.GetCharField(Rank))) { if ((buf = ((PTDBMY)To_Tdb)->Myc.GetCharField(Rank))) {
if (trace > 1) if (trace(2))
htrc("MySQL ReadColumn: name=%s buf=%s\n", Name, buf); htrc("MySQL ReadColumn: name=%s buf=%s\n", Name, buf);
// TODO: have a true way to differenciate temporal values // TODO: have a true way to differenciate temporal values
@@ -1679,7 +1679,7 @@ MYXCOL::MYXCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PCSZ am)
MYXCOL::MYXCOL(MYSQL_FIELD *fld, PTDB tdbp, int i, PCSZ am) MYXCOL::MYXCOL(MYSQL_FIELD *fld, PTDB tdbp, int i, PCSZ am)
: MYSQLCOL(fld, tdbp, i, am) : MYSQLCOL(fld, tdbp, i, am)
{ {
if (trace) if (trace(1))
htrc(" making new %sCOL C%d %s at %p\n", am, Index, Name, this); htrc(" making new %sCOL C%d %s at %p\n", am, Index, Name, this);
} // end of MYSQLCOL constructor } // end of MYSQLCOL constructor

View File

@@ -538,7 +538,7 @@ bool TDBODBC::OpenDB(PGLOBAL g)
{ {
bool rc = true; bool rc = true;
if (trace) if (trace(1))
htrc("ODBC OpenDB: tdbp=%p tdb=R%d use=%dmode=%d\n", htrc("ODBC OpenDB: tdbp=%p tdb=R%d use=%dmode=%d\n",
this, Tdb_No, Use, Mode); this, Tdb_No, Use, Mode);
@@ -750,7 +750,7 @@ bool TDBODBC::ReadKey(PGLOBAL g, OPVAL op, const key_range *kr)
Mode = MODE_READ; Mode = MODE_READ;
} // endif's op } // endif's op
if (trace) if (trace(33))
htrc("ODBC ReadKey: Query=%s\n", Query->GetStr()); htrc("ODBC ReadKey: Query=%s\n", Query->GetStr());
Rows = Ocp->ExecDirectSQL((char*)Query->GetStr(), (PODBCCOL)Columns); Rows = Ocp->ExecDirectSQL((char*)Query->GetStr(), (PODBCCOL)Columns);
@@ -765,7 +765,7 @@ int TDBODBC::ReadDB(PGLOBAL g)
{ {
int rc; int rc;
if (trace > 1) if (trace(2))
htrc("ODBC ReadDB: R%d Mode=%d\n", GetTdb_No(), Mode); htrc("ODBC ReadDB: R%d Mode=%d\n", GetTdb_No(), Mode);
if (Mode == MODE_UPDATE || Mode == MODE_DELETE) { if (Mode == MODE_UPDATE || Mode == MODE_DELETE) {
@@ -776,7 +776,7 @@ int TDBODBC::ReadDB(PGLOBAL g)
if (!Ocp->ExecSQLcommand(Query->GetStr())) { if (!Ocp->ExecSQLcommand(Query->GetStr())) {
sprintf(g->Message, "%s: %d affected rows", TableName, AftRows); sprintf(g->Message, "%s: %d affected rows", TableName, AftRows);
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
PushWarning(g, this, 0); // 0 means a Note PushWarning(g, this, 0); // 0 means a Note
@@ -817,7 +817,7 @@ int TDBODBC::ReadDB(PGLOBAL g)
} // endif Placed } // endif Placed
if (trace > 1) if (trace(2))
htrc(" Read: Rbuf=%d rc=%d\n", Rbuf, rc); htrc(" Read: Rbuf=%d rc=%d\n", Rbuf, rc);
return rc; return rc;
@@ -852,7 +852,7 @@ int TDBODBC::DeleteDB(PGLOBAL g, int irc)
if (!Ocp->ExecSQLcommand(Query->GetStr())) { if (!Ocp->ExecSQLcommand(Query->GetStr())) {
sprintf(g->Message, "%s: %d affected rows", TableName, AftRows); sprintf(g->Message, "%s: %d affected rows", TableName, AftRows);
if (trace) if (trace(1))
htrc("%s\n", g->Message); htrc("%s\n", g->Message);
PushWarning(g, this, 0); // 0 means a Note PushWarning(g, this, 0); // 0 means a Note
@@ -874,7 +874,7 @@ void TDBODBC::CloseDB(PGLOBAL g)
Ocp->Close(); Ocp->Close();
if (trace) if (trace(1))
htrc("ODBC CloseDB: closing %s\n", Name); htrc("ODBC CloseDB: closing %s\n", Name);
} // end of CloseDB } // end of CloseDB
@@ -975,7 +975,7 @@ void ODBCCOL::ReadColumn(PGLOBAL g)
} // endif Buf_Type } // endif Buf_Type
if (trace > 1) { if (trace(2)) {
char buf[64]; char buf[64];
htrc("ODBC Column %s: rows=%d buf=%p type=%d value=%s\n", htrc("ODBC Column %s: rows=%d buf=%p type=%d value=%s\n",
@@ -1214,7 +1214,7 @@ bool TDBXDBC::OpenDB(PGLOBAL g)
{ {
bool rc = false; bool rc = false;
if (trace) if (trace(1))
htrc("ODBC OpenDB: tdbp=%p tdb=R%d use=%dmode=%d\n", htrc("ODBC OpenDB: tdbp=%p tdb=R%d use=%dmode=%d\n",
this, Tdb_No, Use, Mode); this, Tdb_No, Use, Mode);

View File

@@ -299,7 +299,7 @@ PQRYRES PIVAID::MakePivotColumns(PGLOBAL g)
Qryp->Nbcol += (ndif - 2); Qryp->Nbcol += (ndif - 2);
return Qryp; return Qryp;
} catch (int n) { } catch (int n) {
if (trace) if (trace(1))
htrc("Exception %d: %s\n", n, g->Message); htrc("Exception %d: %s\n", n, g->Message);
} catch (const char *msg) { } catch (const char *msg) {
strcpy(g->Message, msg); strcpy(g->Message, msg);

View File

@@ -180,7 +180,7 @@ PTDB TDBINI::Clone(PTABS t)
/***********************************************************************/ /***********************************************************************/
char *TDBINI::GetSeclist(PGLOBAL g) char *TDBINI::GetSeclist(PGLOBAL g)
{ {
if (trace) if (trace(1))
htrc("GetSeclist: Seclist=%p\n", Seclist); htrc("GetSeclist: Seclist=%p\n", Seclist);
if (!Seclist) { if (!Seclist) {
@@ -267,7 +267,7 @@ bool TDBINI::OpenDB(PGLOBAL g)
if (!colp->IsSpecial()) // Not a pseudo column if (!colp->IsSpecial()) // Not a pseudo column
colp->AllocBuf(g); colp->AllocBuf(g);
if (trace) if (trace(1))
htrc("INI OpenDB: seclist=%s seclen=%d ifile=%s\n", htrc("INI OpenDB: seclist=%s seclen=%d ifile=%s\n",
Seclist, Seclen, Ifile); Seclist, Seclen, Ifile);
@@ -287,7 +287,7 @@ int TDBINI::ReadDB(PGLOBAL)
else else
Section += (strlen(Section) + 1); Section += (strlen(Section) + 1);
if (trace > 1) if (trace(2))
htrc("INI ReadDB: section=%s N=%d\n", Section, N); htrc("INI ReadDB: section=%s N=%d\n", Section, N);
N++; N++;
@@ -453,7 +453,7 @@ void INICOL::ReadColumn(PGLOBAL)
{ {
PTDBINI tdbp = (PTDBINI)To_Tdb; PTDBINI tdbp = (PTDBINI)To_Tdb;
if (trace > 1) if (trace(2))
htrc("INI ReadColumn: col %s R%d flag=%d\n", htrc("INI ReadColumn: col %s R%d flag=%d\n",
Name, tdbp->GetTdb_No(), Flag); Name, tdbp->GetTdb_No(), Flag);
@@ -493,7 +493,7 @@ void INICOL::WriteColumn(PGLOBAL g)
bool rc; bool rc;
PTDBINI tdbp = (PTDBINI)To_Tdb; PTDBINI tdbp = (PTDBINI)To_Tdb;
if (trace > 1) if (trace(2))
htrc("INI WriteColumn: col %s R%d coluse=%.4X status=%.4X\n", htrc("INI WriteColumn: col %s R%d coluse=%.4X status=%.4X\n",
Name, tdbp->GetTdb_No(), ColUse, Status); Name, tdbp->GetTdb_No(), ColUse, Status);
@@ -823,7 +823,7 @@ void XINCOL::WriteColumn(PGLOBAL g)
bool rc; bool rc;
PTDBXIN tdbp = (PTDBXIN)To_Tdb; PTDBXIN tdbp = (PTDBXIN)To_Tdb;
if (trace > 1) if (trace(2))
htrc("XIN WriteColumn: col %s R%d coluse=%.4X status=%.4X\n", htrc("XIN WriteColumn: col %s R%d coluse=%.4X status=%.4X\n",
Name, tdbp->GetTdb_No(), ColUse, Status); Name, tdbp->GetTdb_No(), ColUse, Status);

View File

@@ -132,7 +132,7 @@ bool TBLDEF::DefineAM(PGLOBAL g, LPCSTR, int)
tbl = new(g) XTAB(pn, def); tbl = new(g) XTAB(pn, def);
tbl->SetSchema(pdb); tbl->SetSchema(pdb);
if (trace) if (trace(1))
htrc("TBL: Name=%s db=%s\n", tbl->GetName(), tbl->GetSchema()); htrc("TBL: Name=%s db=%s\n", tbl->GetName(), tbl->GetSchema());
// Link the blocks // Link the blocks
@@ -436,7 +436,7 @@ int TDBTBL::RowNumber(PGLOBAL g, bool b)
/***********************************************************************/ /***********************************************************************/
bool TDBTBL::OpenDB(PGLOBAL g) bool TDBTBL::OpenDB(PGLOBAL g)
{ {
if (trace) if (trace(1))
htrc("TBL OpenDB: tdbp=%p tdb=R%d use=%d key=%p mode=%d\n", htrc("TBL OpenDB: tdbp=%p tdb=R%d use=%d key=%p mode=%d\n",
this, Tdb_No, Use, To_Key_Col, Mode); this, Tdb_No, Use, To_Key_Col, Mode);
@@ -475,7 +475,7 @@ bool TDBTBL::OpenDB(PGLOBAL g)
else if (((PPRXCOL)cp)->Init(g, NULL) && !Accept) else if (((PPRXCOL)cp)->Init(g, NULL) && !Accept)
return TRUE; return TRUE;
if (trace) if (trace(1))
htrc("Opening subtable %s\n", Tdbp->GetName()); htrc("Opening subtable %s\n", Tdbp->GetName());
// Now we can safely open the table // Now we can safely open the table
@@ -530,7 +530,7 @@ int TDBTBL::ReadDB(PGLOBAL g)
else if (((PPRXCOL)cp)->Init(g, NULL) && !Accept) else if (((PPRXCOL)cp)->Init(g, NULL) && !Accept)
return RC_FX; return RC_FX;
if (trace) if (trace(1))
htrc("Opening subtable %s\n", Tdbp->GetName()); htrc("Opening subtable %s\n", Tdbp->GetName());
// Now we can safely open the table // Now we can safely open the table
@@ -555,7 +555,7 @@ int TDBTBL::ReadDB(PGLOBAL g)
/***********************************************************************/ /***********************************************************************/
void TBTBLK::ReadColumn(PGLOBAL) void TBTBLK::ReadColumn(PGLOBAL)
{ {
if (trace) if (trace(1))
htrc("TBT ReadColumn: name=%s\n", Name); htrc("TBT ReadColumn: name=%s\n", Name);
Value->SetValue_psz((char*)((PTDBTBL)To_Tdb)->Tdbp->GetName()); Value->SetValue_psz((char*)((PTDBTBL)To_Tdb)->Tdbp->GetName());
@@ -575,27 +575,30 @@ pthread_handler_t ThreadOpen(void *p)
if (!my_thread_init()) { if (!my_thread_init()) {
set_current_thd(cmp->Thd); set_current_thd(cmp->Thd);
if (trace) if (trace(1))
htrc("ThreadOpen: Thd=%d\n", cmp->Thd); htrc("ThreadOpen: Thd=%d\n", cmp->Thd);
// Try to open the connection // Try to open the connection
if (!cmp->Tap->GetTo_Tdb()->OpenDB(cmp->G)) { pthread_mutex_lock(&tblmut);
pthread_mutex_lock(&tblmut);
if (trace) if (!cmp->Tap->GetTo_Tdb()->OpenDB(cmp->G)) {
// pthread_mutex_lock(&tblmut);
if (trace(1))
htrc("Table %s ready\n", cmp->Tap->GetName()); htrc("Table %s ready\n", cmp->Tap->GetName());
cmp->Ready = true; cmp->Ready = true;
pthread_mutex_unlock(&tblmut); // pthread_mutex_unlock(&tblmut);
} else { } else {
pthread_mutex_lock(&tblmut); // pthread_mutex_lock(&tblmut);
if (trace) if (trace(1))
htrc("Opening %s failed\n", cmp->Tap->GetName()); htrc("Opening %s failed\n", cmp->Tap->GetName());
cmp->Rc = RC_FX; cmp->Rc = RC_FX;
pthread_mutex_unlock(&tblmut); // pthread_mutex_unlock(&tblmut);
} // endif OpenDB } // endif OpenDB
my_thread_end(); pthread_mutex_unlock(&tblmut);
my_thread_end();
} else } else
cmp->Rc = RC_FX; cmp->Rc = RC_FX;
@@ -672,7 +675,7 @@ bool TDBTBM::OpenTables(PGLOBAL g)
// Remove remote table from the local list // Remove remote table from the local list
*ptabp = tabp->Next; *ptabp = tabp->Next;
if (trace) if (trace(1))
htrc("=====> New remote table %s\n", tabp->GetName()); htrc("=====> New remote table %s\n", tabp->GetName());
// Make the remote table block // Make the remote table block
@@ -698,7 +701,7 @@ bool TDBTBM::OpenTables(PGLOBAL g)
ptp = &tp->Next; ptp = &tp->Next;
Nrc++; // Number of remote connections Nrc++; // Number of remote connections
} else { } else {
if (trace) if (trace(1))
htrc("=====> Local table %s\n", tabp->GetName()); htrc("=====> Local table %s\n", tabp->GetName());
ptabp = &tabp->Next; ptabp = &tabp->Next;
@@ -714,7 +717,7 @@ bool TDBTBM::OpenTables(PGLOBAL g)
/***********************************************************************/ /***********************************************************************/
bool TDBTBM::OpenDB(PGLOBAL g) bool TDBTBM::OpenDB(PGLOBAL g)
{ {
if (trace) if (trace(1))
htrc("TBM OpenDB: tdbp=%p tdb=R%d use=%d key=%p mode=%d\n", htrc("TBM OpenDB: tdbp=%p tdb=R%d use=%d key=%p mode=%d\n",
this, Tdb_No, Use, To_Key_Col, Mode); this, Tdb_No, Use, To_Key_Col, Mode);
@@ -762,7 +765,7 @@ bool TDBTBM::OpenDB(PGLOBAL g)
else if (((PPRXCOL)cp)->Init(g, NULL) && !Accept) else if (((PPRXCOL)cp)->Init(g, NULL) && !Accept)
return TRUE; return TRUE;
if (trace) if (trace(1))
htrc("Opening subtable %s\n", Tdbp->GetName()); htrc("Opening subtable %s\n", Tdbp->GetName());
// Now we can safely open the table // Now we can safely open the table
@@ -863,7 +866,7 @@ int TDBTBM::ReadNextRemote(PGLOBAL g)
else if (((PPRXCOL)cp)->Init(g, NULL) && !Accept) else if (((PPRXCOL)cp)->Init(g, NULL) && !Accept)
return RC_FX; return RC_FX;
if (trace) if (trace(1))
htrc("Reading subtable %s\n", Tdbp->GetName()); htrc("Reading subtable %s\n", Tdbp->GetName());
return RC_OK; return RC_OK;

View File

@@ -457,7 +457,7 @@ PTDB TDBPRX::GetSubTable(PGLOBAL g, PTABLE tabp, bool b)
hc->get_table()->s->option_struct->srcdef = sp; hc->get_table()->s->option_struct->srcdef = sp;
} // endif s } // endif s
if (trace && tdbp) if (trace(1) && tdbp)
htrc("Subtable %s in %s\n", htrc("Subtable %s in %s\n",
name, SVP(tdbp->GetDef()->GetDB())); name, SVP(tdbp->GetDef()->GetDB()));
@@ -647,7 +647,7 @@ PRXCOL::PRXCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PCSZ am)
Pseudo = false; Pseudo = false;
Colnum = cdp->GetOffset(); // If columns are retrieved by number Colnum = cdp->GetOffset(); // If columns are retrieved by number
if (trace) if (trace(1))
htrc(" making new %sCOL C%d %s at %p\n", am, Index, Name, this); htrc(" making new %sCOL C%d %s at %p\n", am, Index, Name, this);
} // end of PRXCOL constructor } // end of PRXCOL constructor
@@ -732,7 +732,7 @@ void PRXCOL::Reset(void)
/***********************************************************************/ /***********************************************************************/
void PRXCOL::ReadColumn(PGLOBAL g) void PRXCOL::ReadColumn(PGLOBAL g)
{ {
if (trace > 1) if (trace(2))
htrc("PRX ReadColumn: name=%s\n", Name); htrc("PRX ReadColumn: name=%s\n", Name);
if (Colp) { if (Colp) {
@@ -759,7 +759,7 @@ void PRXCOL::ReadColumn(PGLOBAL g)
/***********************************************************************/ /***********************************************************************/
void PRXCOL::WriteColumn(PGLOBAL g) void PRXCOL::WriteColumn(PGLOBAL g)
{ {
if (trace > 1) if (trace(2))
htrc("PRX WriteColumn: name=%s\n", Name); htrc("PRX WriteColumn: name=%s\n", Name);
if (Colp) { if (Colp) {

View File

@@ -304,7 +304,7 @@ bool TDBVCT::IsUsingTemp(PGLOBAL)
/***********************************************************************/ /***********************************************************************/
bool TDBVCT::OpenDB(PGLOBAL g) bool TDBVCT::OpenDB(PGLOBAL g)
{ {
if (trace) if (trace(1))
htrc("VCT OpenDB: tdbp=%p tdb=R%d use=%d key=%p mode=%d\n", htrc("VCT OpenDB: tdbp=%p tdb=R%d use=%d key=%p mode=%d\n",
this, Tdb_No, Use, To_Key_Col, Mode); this, Tdb_No, Use, To_Key_Col, Mode);
@@ -364,7 +364,7 @@ bool TDBVCT::OpenDB(PGLOBAL g)
/***********************************************************************/ /***********************************************************************/
int TDBVCT::ReadDB(PGLOBAL g) int TDBVCT::ReadDB(PGLOBAL g)
{ {
if (trace) if (trace(1))
htrc("VCT ReadDB: R%d Mode=%d CurBlk=%d CurNum=%d key=%p link=%p Kindex=%p\n", htrc("VCT ReadDB: R%d Mode=%d CurBlk=%d CurNum=%d key=%p link=%p Kindex=%p\n",
GetTdb_No(), Mode, Txfp->CurBlk, Txfp->CurNum, GetTdb_No(), Mode, Txfp->CurBlk, Txfp->CurNum,
To_Key_Col, To_Link, To_Kindex); To_Key_Col, To_Link, To_Kindex);
@@ -546,7 +546,7 @@ void VCTCOL::ReadColumn(PGLOBAL g)
assert (!To_Kcol); assert (!To_Kcol);
#endif #endif
if (trace > 1) if (trace(2))
htrc("VCT ReadColumn: col %s R%d coluse=%.4X status=%.4X buf_type=%d\n", htrc("VCT ReadColumn: col %s R%d coluse=%.4X status=%.4X buf_type=%d\n",
Name, To_Tdb->GetTdb_No(), ColUse, Status, Buf_Type); Name, To_Tdb->GetTdb_No(), ColUse, Status, Buf_Type);
@@ -574,7 +574,7 @@ void VCTCOL::WriteColumn(PGLOBAL)
{ {
PTXF txfp = ((PTDBVCT)To_Tdb)->Txfp;; PTXF txfp = ((PTDBVCT)To_Tdb)->Txfp;;
if (trace > 1) if (trace(2))
htrc("VCT WriteColumn: col %s R%d coluse=%.4X status=%.4X buf_type=%d\n", htrc("VCT WriteColumn: col %s R%d coluse=%.4X status=%.4X buf_type=%d\n",
Name, To_Tdb->GetTdb_No(), ColUse, Status, Buf_Type); Name, To_Tdb->GetTdb_No(), ColUse, Status, Buf_Type);

View File

@@ -34,7 +34,7 @@ PWMIUT InitWMI(PGLOBAL g, PCSZ nsp, PCSZ classname)
HRESULT res; HRESULT res;
PWMIUT wp = (PWMIUT)PlugSubAlloc(g, NULL, sizeof(WMIUTIL)); PWMIUT wp = (PWMIUT)PlugSubAlloc(g, NULL, sizeof(WMIUTIL));
if (trace) if (trace(1))
htrc("WMIColumns class %s space %s\n", SVP(classname), SVP(nsp)); htrc("WMIColumns class %s space %s\n", SVP(classname), SVP(nsp));
/*********************************************************************/ /*********************************************************************/
@@ -103,7 +103,7 @@ PWMIUT InitWMI(PGLOBAL g, PCSZ nsp, PCSZ classname)
loc->Release(); loc->Release();
if (trace) if (trace(1))
htrc("Successfully connected to namespace.\n"); htrc("Successfully connected to namespace.\n");
/*********************************************************************/ /*********************************************************************/

View File

@@ -153,7 +153,7 @@ PQRYRES XMLColumns(PGLOBAL g, char *db, char *tab, PTOS topt, bool info)
lvl = (lvl < 0) ? 0 : (lvl > 16) ? 16 : lvl; lvl = (lvl < 0) ? 0 : (lvl > 16) ? 16 : lvl;
} // endif fn } // endif fn
if (trace) if (trace(1))
htrc("File %s lvl=%d\n", topt->filename, lvl); htrc("File %s lvl=%d\n", topt->filename, lvl);
tdp = new(g) XMLDEF; tdp = new(g) XMLDEF;
@@ -362,7 +362,7 @@ PQRYRES XMLColumns(PGLOBAL g, char *db, char *tab, PTOS topt, bool info)
txmp->CloseDB(g); txmp->CloseDB(g);
skipit: skipit:
if (trace) if (trace(1))
htrc("XMLColumns: n=%d len=%d\n", n, length[0]); htrc("XMLColumns: n=%d len=%d\n", n, length[0]);
/*********************************************************************/ /*********************************************************************/
@@ -686,7 +686,7 @@ PTDB TDBXML::Clone(PTABS t)
/***********************************************************************/ /***********************************************************************/
PCOL TDBXML::MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n) PCOL TDBXML::MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n)
{ {
if (trace) if (trace(1))
htrc("TDBXML: MakeCol %s n=%d\n", (cdp) ? cdp->GetName() : "<null>", n); htrc("TDBXML: MakeCol %s n=%d\n", (cdp) ? cdp->GetName() : "<null>", n);
return new(g) XMLCOL(cdp, this, cprec, n); return new(g) XMLCOL(cdp, this, cprec, n);
@@ -720,7 +720,7 @@ int TDBXML::LoadTableFile(PGLOBAL g, char *filename)
if (Docp) if (Docp)
return rc; // Already done return rc; // Already done
if (trace) if (trace(1))
htrc("TDBXML: loading %s\n", filename); htrc("TDBXML: loading %s\n", filename);
/*********************************************************************/ /*********************************************************************/
@@ -753,7 +753,7 @@ int TDBXML::LoadTableFile(PGLOBAL g, char *filename)
return RC_FX; return RC_FX;
} // endif init } // endif init
if (trace) if (trace(1))
htrc("TDBXML: parsing %s rc=%d\n", filename, rc); htrc("TDBXML: parsing %s rc=%d\n", filename, rc);
// Parse the XML file // Parse the XML file
@@ -1182,7 +1182,7 @@ int TDBXML::ReadDB(PGLOBAL g)
} // endswitch recpos } // endswitch recpos
} else { } else {
if (trace) if (trace(1))
htrc("TDBXML ReadDB: Irow=%d Nrow=%d\n", Irow, Nrow); htrc("TDBXML ReadDB: Irow=%d Nrow=%d\n", Irow, Nrow);
// This is to force the table to be expanded when constructing // This is to force the table to be expanded when constructing
@@ -1209,7 +1209,7 @@ int TDBXML::ReadDB(PGLOBAL g)
} // endif To_Kindex } // endif To_Kindex
if (!same) { if (!same) {
if (trace > 1) if (trace(2))
htrc("TDBXML ReadDB: Irow=%d RowNode=%p\n", Irow, RowNode); htrc("TDBXML ReadDB: Irow=%d RowNode=%p\n", Irow, RowNode);
// Get the new row node // Get the new row node
@@ -1472,7 +1472,7 @@ bool XMLCOL::ParseXpath(PGLOBAL g, bool mode)
} else } else
strcat(pbuf, Xname); strcat(pbuf, Xname);
if (trace) if (trace(1))
htrc("XMLCOL: pbuf=%s\n", pbuf); htrc("XMLCOL: pbuf=%s\n", pbuf);
// For Update or Insert the Xpath must be analyzed // For Update or Insert the Xpath must be analyzed
@@ -1555,7 +1555,7 @@ bool XMLCOL::ParseXpath(PGLOBAL g, bool mode)
if (Type || Nod) if (Type || Nod)
Tdbp->Hasnod = true; Tdbp->Hasnod = true;
if (trace) if (trace(1))
htrc("XMLCOL: Xname=%s\n", pbuf); htrc("XMLCOL: Xname=%s\n", pbuf);
// Save the calculated Xpath // Save the calculated Xpath
@@ -1679,7 +1679,7 @@ void XMLCOL::WriteColumn(PGLOBAL g)
int i, n, k = 0; int i, n, k = 0;
PXNODE TopNode = NULL; PXNODE TopNode = NULL;
if (trace > 1) if (trace(2))
htrc("XML WriteColumn: col %s R%d coluse=%.4X status=%.4X\n", htrc("XML WriteColumn: col %s R%d coluse=%.4X status=%.4X\n",
Name, Tdbp->GetTdb_No(), ColUse, Status); Name, Tdbp->GetTdb_No(), ColUse, Status);
@@ -1913,7 +1913,7 @@ void XMULCOL::WriteColumn(PGLOBAL g)
int i, n, len, k = 0; int i, n, len, k = 0;
PXNODE TopNode = NULL; PXNODE TopNode = NULL;
if (trace) if (trace(1))
htrc("XML WriteColumn: col %s R%d coluse=%.4X status=%.4X\n", htrc("XML WriteColumn: col %s R%d coluse=%.4X status=%.4X\n",
Name, Tdbp->GetTdb_No(), ColUse, Status); Name, Tdbp->GetTdb_No(), ColUse, Status);
@@ -2129,7 +2129,7 @@ void XPOSCOL::WriteColumn(PGLOBAL g)
char *p, buf[16]; char *p, buf[16];
int i, k, n; int i, k, n;
if (trace) if (trace(1))
htrc("XML WriteColumn: col %s R%d coluse=%.4X status=%.4X\n", htrc("XML WriteColumn: col %s R%d coluse=%.4X status=%.4X\n",
Name, Tdbp->GetTdb_No(), ColUse, Status); Name, Tdbp->GetTdb_No(), ColUse, Status);

View File

@@ -178,7 +178,7 @@ bool user_connect::CheckCleanup(bool force)
g->Mrr = 0; g->Mrr = 0;
last_query_id= thdp->query_id; last_query_id= thdp->query_id;
if (trace && !force) if (trace(65) && !force)
printf("=====> Begin new query %llu\n", last_query_id); printf("=====> Begin new query %llu\n", last_query_id);
return true; return true;

View File

@@ -53,7 +53,7 @@ PVBLK AllocValBlock(PGLOBAL g, void *mp, int type, int nval, int len,
{ {
PVBLK blkp; PVBLK blkp;
if (trace) if (trace(1))
htrc("AVB: mp=%p type=%d nval=%d len=%d check=%u blank=%u\n", htrc("AVB: mp=%p type=%d nval=%d len=%d check=%u blank=%u\n",
mp, type, nval, len, check, blank); mp, type, nval, len, check, blank);

View File

@@ -337,7 +337,7 @@ PVAL AllocateValue(PGLOBAL g, void *value, short type, short prec)
{ {
PVAL valp; PVAL valp;
if (trace) if (trace(1))
htrc("AllocateConstant: value=%p type=%hd\n", value, type); htrc("AllocateConstant: value=%p type=%hd\n", value, type);
switch (type) { switch (type) {
@@ -727,7 +727,7 @@ bool TYPVAL<TYPE>::SetValue_char(const char *p, int n)
else else
Tval = (TYPE)val; Tval = (TYPE)val;
if (trace > 1) { if (trace(2)) {
char buf[64]; char buf[64];
htrc(strcat(strcat(strcpy(buf, " setting %s to: "), Fmt), "\n"), htrc(strcat(strcat(strcpy(buf, " setting %s to: "), Fmt), "\n"),
GetTypeName(Type), Tval); GetTypeName(Type), Tval);
@@ -750,7 +750,7 @@ bool TYPVAL<double>::SetValue_char(const char *p, int n)
buf[n] = '\0'; buf[n] = '\0';
Tval = atof(buf); Tval = atof(buf);
if (trace > 1) if (trace(2))
htrc(" setting double: '%s' -> %lf\n", buf, Tval); htrc(" setting double: '%s' -> %lf\n", buf, Tval);
Null = false; Null = false;
@@ -996,7 +996,7 @@ int TYPVAL<TYPE>::CompareValue(PVAL vp)
// Process filtering on numeric values. // Process filtering on numeric values.
TYPE n = GetTypedValue(vp); TYPE n = GetTypedValue(vp);
//if (trace) //if (trace(1))
// htrc(" Comparing: val=%d,%d\n", Tval, n); // htrc(" Comparing: val=%d,%d\n", Tval, n);
return (Tval > n) ? 1 : (Tval < n) ? (-1) : 0; return (Tval > n) ? 1 : (Tval < n) ? (-1) : 0;
@@ -1384,7 +1384,7 @@ bool TYPVAL<PSZ>::SetValue_char(const char *cp, int n)
strncpy(Strp, cp, n); strncpy(Strp, cp, n);
Strp[n] = '\0'; Strp[n] = '\0';
if (trace > 1) if (trace(2))
htrc(" Setting string to: '%s'\n", Strp); htrc(" Setting string to: '%s'\n", Strp);
} else } else
@@ -1631,7 +1631,7 @@ int TYPVAL<PSZ>::CompareValue(PVAL vp)
int n; int n;
//assert(vp->GetType() == Type); //assert(vp->GetType() == Type);
if (trace) if (trace(1))
htrc(" Comparing: val='%s','%s'\n", Strp, vp->GetCharValue()); htrc(" Comparing: val='%s','%s'\n", Strp, vp->GetCharValue());
// Process filtering on character strings. // Process filtering on character strings.
@@ -1656,14 +1656,14 @@ bool TYPVAL<PSZ>::Compute(PGLOBAL g, PVAL *vp, int np, OPVAL op)
char *p[2], val[2][32]; char *p[2], val[2][32];
int i; int i;
if (trace) if (trace(1))
htrc("Compute: np=%d op=%d\n", np, op); htrc("Compute: np=%d op=%d\n", np, op);
for (i = 0; i < np; i++) for (i = 0; i < np; i++)
if (!vp[i]->IsNull()) { if (!vp[i]->IsNull()) {
p[i] = vp[i]->GetCharString(val[i]); p[i] = vp[i]->GetCharString(val[i]);
if (trace) if (trace(1))
htrc("p[%d]=%s\n", i, p[i]); htrc("p[%d]=%s\n", i, p[i]);
} else } else
@@ -1679,7 +1679,7 @@ bool TYPVAL<PSZ>::Compute(PGLOBAL g, PVAL *vp, int np, OPVAL op)
if ((i = Len - (signed)strlen(Strp)) > 0) if ((i = Len - (signed)strlen(Strp)) > 0)
strncat(Strp, p[np - 1], i); strncat(Strp, p[np - 1], i);
if (trace) if (trace(1))
htrc("Strp=%s\n", Strp); htrc("Strp=%s\n", Strp);
break; break;
@@ -1854,7 +1854,7 @@ int DECVAL::CompareValue(PVAL vp)
// Process filtering on numeric values. // Process filtering on numeric values.
double f = atof(Strp), n = vp->GetFloatValue(); double f = atof(Strp), n = vp->GetFloatValue();
//if (trace) //if (trace(1))
// htrc(" Comparing: val=%d,%d\n", f, n); // htrc(" Comparing: val=%d,%d\n", f, n);
return (f > n) ? 1 : (f < n) ? (-1) : 0; return (f > n) ? 1 : (f < n) ? (-1) : 0;
@@ -2410,7 +2410,7 @@ void DTVAL::SetTimeShift(void)
Shift = (int)mktime(&dtm) - 86400; Shift = (int)mktime(&dtm) - 86400;
if (trace) if (trace(1))
htrc("DTVAL Shift=%d\n", Shift); htrc("DTVAL Shift=%d\n", Shift);
} // end of SetTimeShift } // end of SetTimeShift
@@ -2485,7 +2485,7 @@ bool DTVAL::MakeTime(struct tm *ptm)
int n, y = ptm->tm_year; int n, y = ptm->tm_year;
time_t t = mktime_mysql(ptm); time_t t = mktime_mysql(ptm);
if (trace > 1) if (trace(2))
htrc("MakeTime from (%d,%d,%d,%d,%d,%d)\n", htrc("MakeTime from (%d,%d,%d,%d,%d,%d)\n",
ptm->tm_year, ptm->tm_mon, ptm->tm_mday, ptm->tm_year, ptm->tm_mon, ptm->tm_mday,
ptm->tm_hour, ptm->tm_min, ptm->tm_sec); ptm->tm_hour, ptm->tm_min, ptm->tm_sec);
@@ -2508,7 +2508,7 @@ bool DTVAL::MakeTime(struct tm *ptm)
} }
Tval= (int) t; Tval= (int) t;
if (trace > 1) if (trace(2))
htrc("MakeTime Ival=%d\n", Tval); htrc("MakeTime Ival=%d\n", Tval);
return false; return false;
@@ -2528,14 +2528,14 @@ bool DTVAL::MakeDate(PGLOBAL g, int *val, int nval)
datm.tm_mon=0; datm.tm_mon=0;
datm.tm_year=70; datm.tm_year=70;
if (trace > 1) if (trace(2))
htrc("MakeDate from(%d,%d,%d,%d,%d,%d) nval=%d\n", htrc("MakeDate from(%d,%d,%d,%d,%d,%d) nval=%d\n",
val[0], val[1], val[2], val[3], val[4], val[5], nval); val[0], val[1], val[2], val[3], val[4], val[5], nval);
for (i = 0; i < nval; i++) { for (i = 0; i < nval; i++) {
n = val[i]; n = val[i];
// if (trace > 1) // if (trace(2))
// htrc("i=%d n=%d\n", i, n); // htrc("i=%d n=%d\n", i, n);
switch (i) { switch (i) {
@@ -2545,7 +2545,7 @@ bool DTVAL::MakeDate(PGLOBAL g, int *val, int nval)
datm.tm_year = n; datm.tm_year = n;
// if (trace > 1) // if (trace(2))
// htrc("n=%d tm_year=%d\n", n, datm.tm_year); // htrc("n=%d tm_year=%d\n", n, datm.tm_year);
break; break;
@@ -2564,7 +2564,7 @@ bool DTVAL::MakeDate(PGLOBAL g, int *val, int nval)
datm.tm_mon = m; datm.tm_mon = m;
datm.tm_year += n; datm.tm_year += n;
// if (trace > 1) // if (trace(2))
// htrc("n=%d m=%d tm_year=%d tm_mon=%d\n", n, m, datm.tm_year, datm.tm_mon); // htrc("n=%d m=%d tm_year=%d tm_mon=%d\n", n, m, datm.tm_year, datm.tm_mon);
break; break;
@@ -2581,7 +2581,7 @@ bool DTVAL::MakeDate(PGLOBAL g, int *val, int nval)
datm.tm_mday = m; datm.tm_mday = m;
datm.tm_year += n; datm.tm_year += n;
// if (trace > 1) // if (trace(2))
// htrc("n=%d m=%d tm_year=%d tm_mon=%d\n", n, m, datm.tm_year, datm.tm_mon); // htrc("n=%d m=%d tm_year=%d tm_mon=%d\n", n, m, datm.tm_year, datm.tm_mon);
break; break;
@@ -2592,7 +2592,7 @@ bool DTVAL::MakeDate(PGLOBAL g, int *val, int nval)
} // endfor i } // endfor i
if (trace > 1) if (trace(2))
htrc("MakeDate datm=(%d,%d,%d,%d,%d,%d)\n", htrc("MakeDate datm=(%d,%d,%d,%d,%d,%d)\n",
datm.tm_year, datm.tm_mon, datm.tm_mday, datm.tm_year, datm.tm_mon, datm.tm_mday,
datm.tm_hour, datm.tm_min, datm.tm_sec); datm.tm_hour, datm.tm_min, datm.tm_sec);
@@ -2667,7 +2667,7 @@ bool DTVAL::SetValue_char(const char *p, int n)
ndv = ExtractDate(Sdate, Pdtp, DefYear, dval); ndv = ExtractDate(Sdate, Pdtp, DefYear, dval);
MakeDate(NULL, dval, ndv); MakeDate(NULL, dval, ndv);
if (trace > 1) if (trace(2))
htrc(" setting date: '%s' -> %d\n", Sdate, Tval); htrc(" setting date: '%s' -> %d\n", Sdate, Tval);
Null = (Nullable && ndv == 0); Null = (Nullable && ndv == 0);
@@ -2694,7 +2694,7 @@ void DTVAL::SetValue_psz(PCSZ p)
ndv = ExtractDate(Sdate, Pdtp, DefYear, dval); ndv = ExtractDate(Sdate, Pdtp, DefYear, dval);
MakeDate(NULL, dval, ndv); MakeDate(NULL, dval, ndv);
if (trace > 1) if (trace(2))
htrc(" setting date: '%s' -> %d\n", Sdate, Tval); htrc(" setting date: '%s' -> %d\n", Sdate, Tval);
Null = (Nullable && ndv == 0); Null = (Nullable && ndv == 0);
@@ -2849,13 +2849,13 @@ bool DTVAL::FormatValue(PVAL vp, PCSZ fmt)
char *buf = (char*)vp->GetTo_Val(); // Should be big enough char *buf = (char*)vp->GetTo_Val(); // Should be big enough
struct tm tm, *ptm = GetGmTime(&tm); struct tm tm, *ptm = GetGmTime(&tm);
if (trace > 1) if (trace(2))
htrc("FormatValue: ptm=%p len=%d\n", ptm, vp->GetValLen()); htrc("FormatValue: ptm=%p len=%d\n", ptm, vp->GetValLen());
if (ptm) { if (ptm) {
size_t n = strftime(buf, vp->GetValLen(), fmt, ptm); size_t n = strftime(buf, vp->GetValLen(), fmt, ptm);
if (trace > 1) if (trace(2))
htrc("strftime: n=%d buf=%s\n", n, (n) ? buf : "???"); htrc("strftime: n=%d buf=%s\n", n, (n) ? buf : "???");
return (n == 0); return (n == 0);

View File

@@ -344,7 +344,7 @@ bool XINDEX::Make(PGLOBAL g, PIXDEF sxp)
} // endif n } // endif n
if (trace) if (trace(1))
htrc("XINDEX Make: n=%d\n", n); htrc("XINDEX Make: n=%d\n", n);
// File position must be stored // File position must be stored
@@ -417,7 +417,7 @@ bool XINDEX::Make(PGLOBAL g, PIXDEF sxp)
if (kcp->Init(g, colp, n, true, 0)) if (kcp->Init(g, colp, n, true, 0))
return true; return true;
if (trace) if (trace(1))
htrc("Adding colp=%p Buf_Type=%d size=%d\n", htrc("Adding colp=%p Buf_Type=%d size=%d\n",
colp, colp->GetResultType(), n); colp, colp->GetResultType(), n);
@@ -484,7 +484,7 @@ bool XINDEX::Make(PGLOBAL g, PIXDEF sxp)
} else } else
To_Rec[nkey] = Tdbp->GetRecpos(); To_Rec[nkey] = Tdbp->GetRecpos();
if (trace > 1) if (trace(2))
htrc("Make: To_Rec[%d]=%d\n", nkey, To_Rec[nkey]); htrc("Make: To_Rec[%d]=%d\n", nkey, To_Rec[nkey]);
/*******************************************************************/ /*******************************************************************/
@@ -553,7 +553,7 @@ bool XINDEX::Make(PGLOBAL g, PIXDEF sxp)
if ((Ndif = Qsort(g, Num_K)) < 0) if ((Ndif = Qsort(g, Num_K)) < 0)
goto err; // Error during sort goto err; // Error during sort
if (trace) if (trace(1))
htrc("Make: Nk=%d n=%d Num_K=%d Ndif=%d addcolp=%p BlkFil=%p X=%p\n", htrc("Make: Nk=%d n=%d Num_K=%d Ndif=%d addcolp=%p BlkFil=%p X=%p\n",
Nk, n, Num_K, Ndif, addcolp, Tdbp->To_BlkFil, X); Nk, n, Num_K, Ndif, addcolp, Tdbp->To_BlkFil, X);
@@ -883,7 +883,7 @@ bool XINDEX::SaveIndex(PGLOBAL g, PIXDEF sxp)
n[5] = Nblk; n[6] = Sblk; n[5] = Nblk; n[6] = Sblk;
n[7] = Srtd ? 1 : 0; // Values are sorted in the file n[7] = Srtd ? 1 : 0; // Values are sorted in the file
if (trace) { if (trace(1)) {
htrc("Saving index %s\n", Xdp->GetName()); htrc("Saving index %s\n", Xdp->GetName());
htrc("ID=%d Nk=%d nof=%d Num_K=%d Incr=%d Nblk=%d Sblk=%d Srtd=%d\n", htrc("ID=%d Nk=%d nof=%d Num_K=%d Incr=%d Nblk=%d Sblk=%d Srtd=%d\n",
ID, Nk, nof, Num_K, Incr, Nblk, Sblk, Srtd); ID, Nk, nof, Num_K, Incr, Nblk, Sblk, Srtd);
@@ -926,7 +926,7 @@ bool XINDEX::SaveIndex(PGLOBAL g, PIXDEF sxp)
// dup->ProgCur += 5; // dup->ProgCur += 5;
} // endfor kcp } // endfor kcp
if (trace) if (trace(1))
htrc("Index %s saved, Size=%d\n", Xdp->GetName(), size); htrc("Index %s saved, Size=%d\n", Xdp->GetName(), size);
end: end:
@@ -1016,7 +1016,7 @@ bool XINDEX::Init(PGLOBAL g)
PlugSetPath(fn, fn, Tdbp->GetPath()); PlugSetPath(fn, fn, Tdbp->GetPath());
if (trace) if (trace(1))
htrc("Index %s file: %s\n", Xdp->GetName(), fn); htrc("Index %s file: %s\n", Xdp->GetName(), fn);
/*********************************************************************/ /*********************************************************************/
@@ -1039,7 +1039,7 @@ bool XINDEX::Init(PGLOBAL g)
} else } else
Srtd = false; Srtd = false;
if (trace) if (trace(1))
htrc("nv=%d %d %d %d %d %d %d (%d)\n", htrc("nv=%d %d %d %d %d %d %d (%d)\n",
nv[0], nv[1], nv[2], nv[3], nv[4], nv[5], nv[6], Srtd); nv[0], nv[1], nv[2], nv[3], nv[4], nv[5], nv[6], Srtd);
@@ -1048,7 +1048,7 @@ bool XINDEX::Init(PGLOBAL g)
if (/*nv[0] != ID ||*/ nv[1] != Nk) { if (/*nv[0] != ID ||*/ nv[1] != Nk) {
sprintf(g->Message, MSG(BAD_INDEX_FILE), fn); sprintf(g->Message, MSG(BAD_INDEX_FILE), fn);
if (trace) if (trace(1))
htrc("nv[0]=%d ID=%d nv[1]=%d Nk=%d\n", nv[0], ID, nv[1], Nk); htrc("nv[0]=%d ID=%d nv[1]=%d Nk=%d\n", nv[0], ID, nv[1], Nk);
goto err; goto err;
@@ -1269,7 +1269,7 @@ bool XINDEX::MapInit(PGLOBAL g)
PlugSetPath(fn, fn, Tdbp->GetPath()); PlugSetPath(fn, fn, Tdbp->GetPath());
if (trace) if (trace(1))
htrc("Index %s file: %s\n", Xdp->GetName(), fn); htrc("Index %s file: %s\n", Xdp->GetName(), fn);
/*********************************************************************/ /*********************************************************************/
@@ -1300,7 +1300,7 @@ bool XINDEX::MapInit(PGLOBAL g)
nv0 = nv[0]; nv0 = nv[0];
} // endif nv } // endif nv
if (trace) if (trace(1))
htrc("nv=%d %d %d %d %d %d %d %d\n", htrc("nv=%d %d %d %d %d %d %d %d\n",
nv0, nv[1], nv[2], nv[3], nv[4], nv[5], nv[6], Srtd); nv0, nv[1], nv[2], nv[3], nv[4], nv[5], nv[6], Srtd);
@@ -1310,7 +1310,7 @@ bool XINDEX::MapInit(PGLOBAL g)
// Not this index // Not this index
sprintf(g->Message, MSG(BAD_INDEX_FILE), fn); sprintf(g->Message, MSG(BAD_INDEX_FILE), fn);
if (trace) if (trace(1))
htrc("nv0=%d ID=%d nv[1]=%d Nk=%d\n", nv0, ID, nv[1], Nk); htrc("nv0=%d ID=%d nv[1]=%d Nk=%d\n", nv0, ID, nv[1], Nk);
goto err; goto err;
@@ -1483,7 +1483,7 @@ bool XINDEX::GetAllSizes(PGLOBAL g,/* int &ndif,*/ int &numk)
PlugSetPath(fn, fn, Tdbp->GetPath()); PlugSetPath(fn, fn, Tdbp->GetPath());
if (trace) if (trace(1))
htrc("Index %s file: %s\n", Xdp->GetName(), fn); htrc("Index %s file: %s\n", Xdp->GetName(), fn);
/*********************************************************************/ /*********************************************************************/
@@ -1500,7 +1500,7 @@ bool XINDEX::GetAllSizes(PGLOBAL g,/* int &ndif,*/ int &numk)
if (X->Read(g, nv, NZ, sizeof(int))) if (X->Read(g, nv, NZ, sizeof(int)))
goto err; goto err;
if (trace) if (trace(1))
htrc("nv=%d %d %d %d\n", nv[0], nv[1], nv[2], nv[3]); htrc("nv=%d %d %d %d\n", nv[0], nv[1], nv[2], nv[3]);
// The test on ID was suppressed because MariaDB can change an index ID // The test on ID was suppressed because MariaDB can change an index ID
@@ -1508,7 +1508,7 @@ bool XINDEX::GetAllSizes(PGLOBAL g,/* int &ndif,*/ int &numk)
if (/*nv[0] != ID ||*/ nv[1] != Nk) { if (/*nv[0] != ID ||*/ nv[1] != Nk) {
sprintf(g->Message, MSG(BAD_INDEX_FILE), fn); sprintf(g->Message, MSG(BAD_INDEX_FILE), fn);
if (trace) if (trace(1))
htrc("nv[0]=%d ID=%d nv[1]=%d Nk=%d\n", nv[0], ID, nv[1], Nk); htrc("nv[0]=%d ID=%d nv[1]=%d Nk=%d\n", nv[0], ID, nv[1], Nk);
goto err; goto err;
@@ -1770,7 +1770,7 @@ int XINDEX::Fetch(PGLOBAL g)
if (Num_K == 0) if (Num_K == 0)
return -1; // means end of file return -1; // means end of file
if (trace > 1) if (trace(2))
htrc("XINDEX Fetch: Op=%d\n", Op); htrc("XINDEX Fetch: Op=%d\n", Op);
/*********************************************************************/ /*********************************************************************/
@@ -1834,7 +1834,7 @@ int XINDEX::Fetch(PGLOBAL g)
Nth++; Nth++;
if (trace > 1) if (trace(2))
htrc("Fetch: Looking for new value Nth=%d\n", Nth); htrc("Fetch: Looking for new value Nth=%d\n", Nth);
Cur_K = FastFind(); Cur_K = FastFind();
@@ -1907,7 +1907,7 @@ int XINDEX::FastFind(void)
sup = To_KeyCol->Ndf; sup = To_KeyCol->Ndf;
} // endif Nblk } // endif Nblk
if (trace > 2) if (trace(4))
htrc("XINDEX FastFind: Nblk=%d Op=%d inf=%d sup=%d\n", htrc("XINDEX FastFind: Nblk=%d Op=%d inf=%d sup=%d\n",
Nblk, Op, inf, sup); Nblk, Op, inf, sup);
@@ -1985,7 +1985,7 @@ int XINDEX::FastFind(void)
curk = (kcp->Kof) ? kcp->Kof[kcp->Val_K] : kcp->Val_K; curk = (kcp->Kof) ? kcp->Kof[kcp->Val_K] : kcp->Val_K;
} // endfor kcp } // endfor kcp
if (trace > 2) if (trace(4))
htrc("XINDEX FastFind: curk=%d\n", curk); htrc("XINDEX FastFind: curk=%d\n", curk);
return curk; return curk;
@@ -2123,7 +2123,7 @@ int XINDXS::Fetch(PGLOBAL g)
if (Num_K == 0) if (Num_K == 0)
return -1; // means end of file return -1; // means end of file
if (trace > 1) if (trace(2))
htrc("XINDXS Fetch: Op=%d\n", Op); htrc("XINDXS Fetch: Op=%d\n", Op);
/*********************************************************************/ /*********************************************************************/
@@ -2176,7 +2176,7 @@ int XINDXS::Fetch(PGLOBAL g)
else else
Nth++; Nth++;
if (trace > 1) if (trace(2))
htrc("Fetch: Looking for new value Nth=%d\n", Nth); htrc("Fetch: Looking for new value Nth=%d\n", Nth);
Cur_K = FastFind(); Cur_K = FastFind();
@@ -2243,7 +2243,7 @@ int XINDXS::FastFind(void)
sup = Ndif; sup = Ndif;
} // endif Nblk } // endif Nblk
if (trace > 2) if (trace(4))
htrc("XINDXS FastFind: Nblk=%d Op=%d inf=%d sup=%d\n", htrc("XINDXS FastFind: Nblk=%d Op=%d inf=%d sup=%d\n",
Nblk, Op, inf, sup); Nblk, Op, inf, sup);
@@ -2269,7 +2269,7 @@ int XINDXS::FastFind(void)
n = 0; n = 0;
} // endif sup } // endif sup
if (trace > 2) if (trace(4))
htrc("XINDXS FastFind: n=%d i=%d\n", n, i); htrc("XINDXS FastFind: n=%d i=%d\n", n, i);
// Loop on kcp because of dynamic indexing // Loop on kcp because of dynamic indexing
@@ -2337,7 +2337,7 @@ bool XFILE::Open(PGLOBAL g, char *filename, int id, MODE mode)
} // endswitch mode } // endswitch mode
if (!(Xfile= global_fopen(g, MSGID_OPEN_ERROR_AND_STRERROR, filename, pmod))) { if (!(Xfile= global_fopen(g, MSGID_OPEN_ERROR_AND_STRERROR, filename, pmod))) {
if (trace) if (trace(1))
htrc("Open: %s\n", g->Message); htrc("Open: %s\n", g->Message);
return true; return true;
@@ -2354,7 +2354,7 @@ bool XFILE::Open(PGLOBAL g, char *filename, int id, MODE mode)
NewOff.v.Low = (int)ftell(Xfile); NewOff.v.Low = (int)ftell(Xfile);
if (trace) if (trace(1))
htrc("XFILE Open: NewOff.v.Low=%d\n", NewOff.v.Low); htrc("XFILE Open: NewOff.v.Low=%d\n", NewOff.v.Low);
} else if (mode == MODE_WRITE) { } else if (mode == MODE_WRITE) {
@@ -2365,7 +2365,7 @@ bool XFILE::Open(PGLOBAL g, char *filename, int id, MODE mode)
fseek(Xfile, 0, SEEK_END); fseek(Xfile, 0, SEEK_END);
NewOff.v.Low = (int)ftell(Xfile); NewOff.v.Low = (int)ftell(Xfile);
if (trace) if (trace(1))
htrc("XFILE Open: NewOff.v.Low=%d\n", NewOff.v.Low); htrc("XFILE Open: NewOff.v.Low=%d\n", NewOff.v.Low);
} // endif id } // endif id
@@ -2377,7 +2377,7 @@ bool XFILE::Open(PGLOBAL g, char *filename, int id, MODE mode)
return true; return true;
} // endif MAX_INDX } // endif MAX_INDX
if (trace) if (trace(1))
htrc("XFILE Open: noff[%d].v.Low=%d\n", id, noff[id].v.Low); htrc("XFILE Open: noff[%d].v.Low=%d\n", id, noff[id].v.Low);
// Position the cursor at the offset of this index // Position the cursor at the offset of this index
@@ -2510,7 +2510,7 @@ bool XHUGE::Open(PGLOBAL g, char *filename, int id, MODE mode)
return true; return true;
} // endif } // endif
if (trace) if (trace(1))
htrc(" Xopen: filename=%s id=%d mode=%d\n", filename, id, mode); htrc(" Xopen: filename=%s id=%d mode=%d\n", filename, id, mode);
#if defined(__WIN__) #if defined(__WIN__)
@@ -2554,7 +2554,7 @@ bool XHUGE::Open(PGLOBAL g, char *filename, int id, MODE mode)
return true; return true;
} // endif Hfile } // endif Hfile
if (trace) if (trace(1))
htrc(" access=%p share=%p creation=%d handle=%p fn=%s\n", htrc(" access=%p share=%p creation=%d handle=%p fn=%s\n",
access, share, creation, Hfile, filename); access, share, creation, Hfile, filename);
@@ -2628,13 +2628,13 @@ bool XHUGE::Open(PGLOBAL g, char *filename, int id, MODE mode)
if (Hfile == INVALID_HANDLE_VALUE) { if (Hfile == INVALID_HANDLE_VALUE) {
/*rc = errno;*/ /*rc = errno;*/
if (trace) if (trace(1))
htrc("Open: %s\n", g->Message); htrc("Open: %s\n", g->Message);
return true; return true;
} // endif Hfile } // endif Hfile
if (trace) if (trace(1))
htrc(" oflag=%p mode=%d handle=%d fn=%s\n", htrc(" oflag=%p mode=%d handle=%d fn=%s\n",
oflag, mode, Hfile, filename); oflag, mode, Hfile, filename);
@@ -2647,7 +2647,7 @@ bool XHUGE::Open(PGLOBAL g, char *filename, int id, MODE mode)
return true; return true;
} // endif } // endif
if (trace) if (trace(1))
htrc("INSERT: NewOff=%lld\n", NewOff.Val); htrc("INSERT: NewOff=%lld\n", NewOff.Val);
} else if (mode == MODE_WRITE) { } else if (mode == MODE_WRITE) {
@@ -2657,7 +2657,7 @@ bool XHUGE::Open(PGLOBAL g, char *filename, int id, MODE mode)
NewOff.v.Low = write(Hfile, &noff, sizeof(noff)); NewOff.v.Low = write(Hfile, &noff, sizeof(noff));
} // endif id } // endif id
if (trace) if (trace(1))
htrc("WRITE: NewOff=%lld\n", NewOff.Val); htrc("WRITE: NewOff=%lld\n", NewOff.Val);
} else if (mode == MODE_READ && id >= 0) { } else if (mode == MODE_READ && id >= 0) {
@@ -2667,7 +2667,7 @@ bool XHUGE::Open(PGLOBAL g, char *filename, int id, MODE mode)
return true; return true;
} // endif read } // endif read
if (trace) if (trace(1))
htrc("noff[%d]=%lld\n", id, noff[id].Val); htrc("noff[%d]=%lld\n", id, noff[id].Val);
// Position the cursor at the offset of this index // Position the cursor at the offset of this index
@@ -2705,13 +2705,13 @@ bool XHUGE::Seek(PGLOBAL g, int low, int high, int origin)
if (lseek64(Hfile, pos, origin) < 0) { if (lseek64(Hfile, pos, origin) < 0) {
sprintf(g->Message, MSG(ERROR_IN_LSK), errno); sprintf(g->Message, MSG(ERROR_IN_LSK), errno);
if (trace) if (trace(1))
htrc("lseek64 error %d\n", errno); htrc("lseek64 error %d\n", errno);
return true; return true;
} // endif lseek64 } // endif lseek64
if (trace) if (trace(1))
htrc("Seek: low=%d high=%d\n", low, high); htrc("Seek: low=%d high=%d\n", low, high);
#endif // UNIX #endif // UNIX
@@ -2750,13 +2750,13 @@ bool XHUGE::Read(PGLOBAL g, void *buf, int n, int size)
#else // UNIX #else // UNIX
ssize_t count = (ssize_t)(n * size); ssize_t count = (ssize_t)(n * size);
if (trace) if (trace(1))
htrc("Hfile=%d n=%d size=%d count=%d\n", Hfile, n, size, count); htrc("Hfile=%d n=%d size=%d count=%d\n", Hfile, n, size, count);
if (read(Hfile, buf, count) != count) { if (read(Hfile, buf, count) != count) {
sprintf(g->Message, MSG(READ_ERROR), "Index file", strerror(errno)); sprintf(g->Message, MSG(READ_ERROR), "Index file", strerror(errno));
if (trace) if (trace(1))
htrc("read error %d\n", errno); htrc("read error %d\n", errno);
rc = true; rc = true;
@@ -2810,7 +2810,7 @@ int XHUGE::Write(PGLOBAL g, void *buf, int n, int size, bool& rc)
/***********************************************************************/ /***********************************************************************/
void XHUGE::Close(char *fn, int id) void XHUGE::Close(char *fn, int id)
{ {
if (trace) if (trace(1))
htrc("XHUGE::Close: fn=%s id=%d NewOff=%lld\n", fn, id, NewOff.Val); htrc("XHUGE::Close: fn=%s id=%d NewOff=%lld\n", fn, id, NewOff.Val);
#if defined(__WIN__) #if defined(__WIN__)
@@ -3022,7 +3022,7 @@ bool KXYCOL::Init(PGLOBAL g, PCOL colp, int n, bool sm, int kln)
Prefix = true; Prefix = true;
} // endif kln } // endif kln
if (trace) if (trace(1))
htrc("KCOL(%p) Init: col=%s n=%d type=%d sm=%d\n", htrc("KCOL(%p) Init: col=%s n=%d type=%d sm=%d\n",
this, colp->GetName(), n, colp->GetResultType(), sm); this, colp->GetName(), n, colp->GetResultType(), sm);
@@ -3076,7 +3076,7 @@ BYTE* KXYCOL::MapInit(PGLOBAL g, PCOL colp, int *n, BYTE *m)
Type = colp->GetResultType(); Type = colp->GetResultType();
if (trace) if (trace(1))
htrc("MapInit(%p): colp=%p type=%d n=%d len=%d m=%p\n", htrc("MapInit(%p): colp=%p type=%d n=%d len=%d m=%p\n",
this, colp, Type, n[0], len, m); this, colp, Type, n[0], len, m);
@@ -3196,7 +3196,7 @@ bool KXYCOL::InitFind(PGLOBAL g, PXOB xp)
Valp->SetValue_pval(xp->GetValue(), false); Valp->SetValue_pval(xp->GetValue(), false);
} // endif Type } // endif Type
if (trace > 1) { if (trace(2)) {
char buf[32]; char buf[32];
htrc("KCOL InitFind: value=%s\n", Valp->GetCharString(buf)); htrc("KCOL InitFind: value=%s\n", Valp->GetCharString(buf));
@@ -3237,7 +3237,7 @@ int KXYCOL::Compare(int i1, int i2)
// Do the actual comparison between values. // Do the actual comparison between values.
register int k = Kblp->CompVal(i1, i2); register int k = Kblp->CompVal(i1, i2);
if (trace > 2) if (trace(4))
htrc("Compare done result=%d\n", k); htrc("Compare done result=%d\n", k);
return (Asc) ? k : -k; return (Asc) ? k : -k;
@@ -3249,7 +3249,7 @@ int KXYCOL::Compare(int i1, int i2)
int KXYCOL::CompVal(int i) int KXYCOL::CompVal(int i)
{ {
// Do the actual comparison between numerical values. // Do the actual comparison between numerical values.
if (trace > 2) { if (trace(4)) {
register int k = (int)Kblp->CompVal(Valp, (int)i); register int k = (int)Kblp->CompVal(Valp, (int)i);
htrc("Compare done result=%d\n", k); htrc("Compare done result=%d\n", k);