mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
5ae2656b69
commit c545d544378483bf68c4fb713cd4ec872d0df2c4 Author: Olivier Bertrand <bertrandop@gmail.com> Date: Tue Mar 27 23:13:14 2018 +0200 - Fix MDEV-15577 CONNECT engine JDBC remote index prevents UPDATE Fixed in TDBJDBC::OpenDB because query can be null for updates modified: storage/connect/tabjdbc.cpp commit c4f1fe2e8e74566e9c3296f435448d9f5c718b23 Author: Olivier Bertrand <bertrandop@gmail.com> Date: Wed Mar 14 12:21:17 2018 +0100 - Fix MDEV-15429 CONNECT engine JDBC handling Postgresql UUID type Also handle Postgresql sending type VARCHAR for TEXT column and setting length to b x7FFFFFF when the length is unknown. modified: storage/connect/Client.java modified: storage/connect/JavaWrappers.jar modified: storage/connect/JdbcInterface.java modified: storage/connect/PostgresqlInterface.java modified: storage/connect/global.h modified: storage/connect/ha_connect.cc modified: storage/connect/jdbconn.cpp modified: storage/connect/jdbconn.h modified: storage/connect/mysql-test/connect/r/jdbc_postgresql.result modified: storage/connect/mysql-test/connect/t/jdbc_postgresql.test modified: storage/connect/mysql-test/connect/t/jdbconn.inc modified: storage/connect/plgdbsem.h modified: storage/connect/tabjdbc.cpp modified: storage/connect/tabjdbc.h added: storage/connect/mysql-test/connect/std_data/JavaWrappers.jar commit 3068bb4882a316c6c32c624609db2bf24ae3ad40 Author: Olivier Bertrand <bertrandop@gmail.com> Date: Mon Feb 26 19:40:27 2018 +0100 Revert to old cmake file to avoid compile error commit da8c1c0bd6a327fd03bd321be3170f468122ef67 Author: Olivier Bertrand <bertrandop@gmail.com> Date: Mon Feb 26 16:13:39 2018 +0100 - Remove warning on not used tabtyp variable in connect_assisted_discovery modified: storage/connect/ha_connect.cc - Fix a bug causing CONNECT to loop when expanding a JSON column when the expanded column value is null or void array. - Adding the FullArray option to JSON tables. - Skipping expanded JSON lines when the expanded column value is null. modified: storage/connect/connect.cc modified: storage/connect/tabdos.h modified: storage/connect/tabjson.cpp modified: storage/connect/tabjson.h - Fix MDEV-13353 No file privilege for ODBC, JDBC, MONGO, MAC, WMI file types. modified: storage/connect/ha_connect.cc - Make some Json UDFs to accept a non JSON item as 1st parameter. modified: storage/connect/json.cpp modified: storage/connect/json.h modified: storage/connect/jsonudf.cpp modified: storage/connect/jsonudf.h - Update Json UDF tests to cope with above changes. modified: storage/connect/mysql-test/connect/r/json_udf.result modified: storage/connect/mysql-test/connect/r/json_udf_bin.result modified: storage/connect/mysql-test/connect/r/vcol.result modified: storage/connect/mysql-test/connect/t/json_udf.test modified: storage/connect/mysql-test/connect/t/vcol.test - Fix some compiler warning treated as error PlugSubAlloc no more exported because it does throw. modified: storage/connect/global.h modified: storage/connect/ha_connect.cc modified: storage/connect/jsonudf.cpp modified: storage/connect/tabjson.cpp modified: storage/connect/tabjson.h - Other files modified (?) when going back to wrong merge modified: storage/connect/CMakeLists.txt modified: storage/connect/array.cpp modified: storage/connect/colblk.cpp modified: storage/connect/connect.cc modified: storage/connect/csort.cpp modified: storage/connect/domdoc.cpp modified: storage/connect/filamap.cpp modified: storage/connect/filamgz.cpp modified: storage/connect/filamtxt.cpp modified: storage/connect/filamzip.cpp modified: storage/connect/filter.cpp modified: storage/connect/fmdlex.c modified: storage/connect/jdbconn.cpp modified: storage/connect/macutil.cpp modified: storage/connect/myconn.cpp modified: storage/connect/odbconn.cpp modified: storage/connect/plgdbutl.cpp modified: storage/connect/plugutil.cpp modified: storage/connect/preparse.h modified: storage/connect/rcmsg.c modified: storage/connect/rcmsg.h modified: storage/connect/reldef.cpp modified: storage/connect/tabdos.cpp modified: storage/connect/tabfmt.cpp modified: storage/connect/tabmac.cpp modified: storage/connect/tabmul.cpp modified: storage/connect/tabmysql.cpp modified: storage/connect/tabmysql.h modified: storage/connect/tabodbc.cpp modified: storage/connect/tabtbl.cpp modified: storage/connect/tabxml.cpp modified: storage/connect/value.cpp modified: storage/connect/xobject.cpp commit 5095628b31ed8c94bd7c794c6b0162894a9040b1 Author: Olivier Bertrand <bertrandop@gmail.com> Date: Tue Feb 13 14:29:00 2018 +0100 - Fix a bug causing CONNECT to loop when expanding a JSON column when the expanded column value is null or void array. - Adding the FullArray option to JSON tables. - Skipping expanded JSON lines when the expanded column value is null. modified: storage/connect/connect.cc modified: storage/connect/tabdos.h modified: storage/connect/tabjson.cpp modified: storage/connect/tabjson.h commit 9896174328da42016735630c893fd09eb128b48e Author: Olivier Bertrand <bertrandop@gmail.com> Date: Fri Feb 2 15:48:57 2018 +0100 - Remove warning on not used tabtyp variable in connect_assisted_discovery modified: storage/connect/ha_connect.cc commit d7e254c05f88173eb04d8dafc813013eb42ccdbe Author: Olivier Bertrand <bertrandop@gmail.com> Date: Wed Jan 31 14:42:45 2018 +0100 - Use delayed load for the MongoDB C Drive on Windows modified: storage/connect/CMakeLists.txt modified: storage/connect/cmgoconn.cpp modified: storage/connect/ha_connect.cc - Add FORCE to the connect_type_conv enum values This will translate binary values to TYPE_STRING modified: storage/connect/checklvl.h modified: storage/connect/ha_connect.cc modified: storage/connect/odbconn.cpp - Change the connect_xtrace variable to from int to set modified: storage/connect/array.cpp modified: storage/connect/blkfil.cpp modified: storage/connect/block.h modified: storage/connect/cmgoconn.cpp modified: storage/connect/colblk.cpp modified: storage/connect/connect.cc modified: storage/connect/filamap.cpp modified: storage/connect/filamdbf.cpp modified: storage/connect/filamfix.cpp modified: storage/connect/filamgz.cpp modified: storage/connect/filamtxt.cpp modified: storage/connect/filamvct.cpp modified: storage/connect/filamzip.cpp modified: storage/connect/filter.cpp modified: storage/connect/global.h modified: storage/connect/ha_connect.cc modified: storage/connect/inihandl.cpp modified: storage/connect/javaconn.cpp modified: storage/connect/jdbconn.cpp modified: storage/connect/jmgfam.cpp modified: storage/connect/jmgoconn.cpp modified: storage/connect/json.cpp modified: storage/connect/jsonudf.cpp modified: storage/connect/libdoc.cpp modified: storage/connect/mongo.cpp modified: storage/connect/mycat.cc modified: storage/connect/myconn.cpp modified: storage/connect/odbconn.cpp modified: storage/connect/plgdbutl.cpp modified: storage/connect/plugutil.cpp modified: storage/connect/reldef.cpp modified: storage/connect/tabcol.cpp modified: storage/connect/tabdos.cpp modified: storage/connect/tabext.cpp modified: storage/connect/tabfix.cpp modified: storage/connect/tabfmt.cpp modified: storage/connect/tabjdbc.cpp modified: storage/connect/tabjson.cpp modified: storage/connect/table.cpp modified: storage/connect/tabmul.cpp modified: storage/connect/tabmysql.cpp modified: storage/connect/tabodbc.cpp modified: storage/connect/tabpivot.cpp modified: storage/connect/tabsys.cpp modified: storage/connect/tabtbl.cpp modified: storage/connect/tabutil.cpp modified: storage/connect/tabvct.cpp modified: storage/connect/tabwmi.cpp modified: storage/connect/tabxml.cpp modified: storage/connect/user_connect.cc modified: storage/connect/valblk.cpp modified: storage/connect/value.cpp modified: storage/connect/xindex.cpp - Restore connect_enable_mongo variable (but undocumented) modified: storage/connect/ha_connect.cc modified: storage/connect/mycat.cc modified: storage/connect/mysql-test/connect/r/json_java_2.result modified: storage/connect/mysql-test/connect/r/json_java_3.result modified: storage/connect/mysql-test/connect/r/json_mongo_c.result modified: storage/connect/mysql-test/connect/r/mongo_c.result modified: storage/connect/mysql-test/connect/r/mongo_java_2.result modified: storage/connect/mysql-test/connect/r/mongo_java_3.result modified: storage/connect/mysql-test/connect/r/tbl_thread.result modified: storage/connect/mysql-test/connect/t/mongo.inc modified: storage/connect/mysql-test/connect/t/mongo_test.inc modified: storage/connect/mysql-test/connect/t/tbl_thread.test
414 lines
15 KiB
C++
414 lines
15 KiB
C++
/************* Colblk C++ Functions Source Code File (.CPP) ************/
|
|
/* Name: COLBLK.CPP Version 2.2 */
|
|
/* */
|
|
/* (C) Copyright to the author Olivier BERTRAND 1998-2017 */
|
|
/* */
|
|
/* This file contains the COLBLK class functions. */
|
|
/***********************************************************************/
|
|
|
|
/***********************************************************************/
|
|
/* Include relevant MariaDB header file. */
|
|
/***********************************************************************/
|
|
#include "my_global.h"
|
|
|
|
/***********************************************************************/
|
|
/* Include required application header files */
|
|
/* global.h is header containing all global Plug declarations. */
|
|
/* plgdbsem.h is header containing the DB applic. declarations. */
|
|
/***********************************************************************/
|
|
#include "global.h"
|
|
#include "plgdbsem.h"
|
|
#include "tabcol.h"
|
|
#include "colblk.h"
|
|
#include "xindex.h"
|
|
#include "xtable.h"
|
|
|
|
/***********************************************************************/
|
|
/* COLBLK protected constructor. */
|
|
/***********************************************************************/
|
|
COLBLK::COLBLK(PCOLDEF cdp, PTDB tdbp, int i)
|
|
{
|
|
Next = NULL;
|
|
Index = i;
|
|
//Number = 0;
|
|
ColUse = 0;
|
|
|
|
if ((Cdp = cdp)) {
|
|
Name = cdp->Name;
|
|
Format = cdp->F;
|
|
Opt = cdp->Opt;
|
|
Long = cdp->Long;
|
|
Precision = cdp->Precision;
|
|
Freq = cdp->Freq;
|
|
Buf_Type = cdp->Buf_Type;
|
|
ColUse |= cdp->Flags; // Used by CONNECT
|
|
Nullable = !!(cdp->Flags & U_NULLS);
|
|
Unsigned = !!(cdp->Flags & U_UNSIGNED);
|
|
} else {
|
|
Name = NULL;
|
|
memset(&Format, 0, sizeof(FORMAT));
|
|
Opt = 0;
|
|
Long = 0;
|
|
Precision = 0;
|
|
Freq = 0;
|
|
Buf_Type = TYPE_ERROR;
|
|
Nullable = false;
|
|
Unsigned = false;
|
|
} // endif cdp
|
|
|
|
To_Tdb = tdbp;
|
|
Status = BUF_NO;
|
|
//Value = NULL; done in XOBJECT constructor
|
|
To_Kcol = NULL;
|
|
} // end of COLBLK constructor
|
|
|
|
/***********************************************************************/
|
|
/* COLBLK constructor used for copying columns. */
|
|
/* tdbp is the pointer to the new table descriptor. */
|
|
/***********************************************************************/
|
|
COLBLK::COLBLK(PCOL col1, PTDB tdbp)
|
|
{
|
|
PCOL colp;
|
|
|
|
// Copy the old column block to the new one
|
|
*this = *col1;
|
|
Next = NULL;
|
|
//To_Orig = col1;
|
|
To_Tdb = tdbp;
|
|
|
|
if (trace(2))
|
|
htrc(" copying COLBLK %s from %p to %p\n", Name, col1, this);
|
|
|
|
if (tdbp)
|
|
// Attach the new column to the table block
|
|
if (!tdbp->GetColumns())
|
|
tdbp->SetColumns(this);
|
|
else {
|
|
for (colp = tdbp->GetColumns(); colp->Next; colp = colp->Next) ;
|
|
|
|
colp->Next = this;
|
|
} // endelse
|
|
|
|
} // end of COLBLK copy constructor
|
|
|
|
/***********************************************************************/
|
|
/* Reset the column descriptor to non evaluated yet. */
|
|
/***********************************************************************/
|
|
void COLBLK::Reset(void)
|
|
{
|
|
Status &= ~BUF_READ;
|
|
} // end of Reset
|
|
|
|
/***********************************************************************/
|
|
/* Compare: compares itself to an (expression) object and returns */
|
|
/* true if it is equivalent. */
|
|
/***********************************************************************/
|
|
bool COLBLK::Compare(PXOB xp)
|
|
{
|
|
return (this == xp);
|
|
} // end of Compare
|
|
|
|
/***********************************************************************/
|
|
/* SetFormat: function used to set SELECT output format. */
|
|
/***********************************************************************/
|
|
bool COLBLK::SetFormat(PGLOBAL, FORMAT& fmt)
|
|
{
|
|
fmt = Format;
|
|
|
|
if (trace(2))
|
|
htrc("COLBLK: %p format=%c(%d,%d)\n",
|
|
this, *fmt.Type, fmt.Length, fmt.Prec);
|
|
|
|
return false;
|
|
} // end of SetFormat
|
|
|
|
/***********************************************************************/
|
|
/* Eval: get the column value from the last read record or from a */
|
|
/* matching Index column if there is one. */
|
|
/***********************************************************************/
|
|
bool COLBLK::Eval(PGLOBAL g)
|
|
{
|
|
if (trace(2))
|
|
htrc("Col Eval: %s status=%.4X\n", Name, Status);
|
|
|
|
if (!GetStatus(BUF_READ)) {
|
|
// if (To_Tdb->IsNull())
|
|
// Value->Reset();
|
|
if (To_Kcol)
|
|
To_Kcol->FillValue(Value);
|
|
else
|
|
ReadColumn(g);
|
|
|
|
AddStatus(BUF_READ);
|
|
} // endif
|
|
|
|
return false;
|
|
} // end of Eval
|
|
|
|
/***********************************************************************/
|
|
/* InitValue: prepare a column block for read operation. */
|
|
/* Now we use Format.Length for the len parameter to avoid strings */
|
|
/* to be truncated when converting from string to coded string. */
|
|
/* Added in version 1.5 is the arguments GetScale() and Domain */
|
|
/* in calling AllocateValue. Domain is used for TYPE_DATE only. */
|
|
/***********************************************************************/
|
|
bool COLBLK::InitValue(PGLOBAL g)
|
|
{
|
|
if (Value)
|
|
return false; // Already done
|
|
|
|
// Allocate a Value object
|
|
if (!(Value = AllocateValue(g, Buf_Type, Precision,
|
|
GetScale(), Unsigned, GetDomain())))
|
|
return true;
|
|
|
|
AddStatus(BUF_READY);
|
|
Value->SetNullable(Nullable);
|
|
|
|
if (trace(2))
|
|
htrc(" colp=%p type=%d value=%p coluse=%.4X status=%.4X\n",
|
|
this, Buf_Type, Value, ColUse, Status);
|
|
|
|
return false;
|
|
} // end of InitValue
|
|
|
|
/***********************************************************************/
|
|
/* SetBuffer: prepare a column block for write operation. */
|
|
/***********************************************************************/
|
|
bool COLBLK::SetBuffer(PGLOBAL g, PVAL, bool, bool)
|
|
{
|
|
sprintf(g->Message, MSG(UNDEFINED_AM), "SetBuffer");
|
|
return true;
|
|
} // end of SetBuffer
|
|
|
|
/***********************************************************************/
|
|
/* GetLength: returns an evaluation of the column string length. */
|
|
/***********************************************************************/
|
|
int COLBLK::GetLengthEx(void)
|
|
{
|
|
return Long;
|
|
} // end of GetLengthEx
|
|
|
|
/***********************************************************************/
|
|
/* ReadColumn: what this routine does is to access the last line */
|
|
/* read from the corresponding table, extract from it the field */
|
|
/* corresponding to this column and convert it to buffer type. */
|
|
/***********************************************************************/
|
|
void COLBLK::ReadColumn(PGLOBAL g)
|
|
{
|
|
sprintf(g->Message, MSG(UNDEFINED_AM), "ReadColumn");
|
|
throw (int)TYPE_COLBLK;
|
|
} // end of ReadColumn
|
|
|
|
/***********************************************************************/
|
|
/* WriteColumn: what this routine does is to access the last line */
|
|
/* read from the corresponding table, and rewrite the field */
|
|
/* corresponding to this column from the column buffer and type. */
|
|
/***********************************************************************/
|
|
void COLBLK::WriteColumn(PGLOBAL g)
|
|
{
|
|
sprintf(g->Message, MSG(UNDEFINED_AM), "WriteColumn");
|
|
throw (int)TYPE_COLBLK;
|
|
} // end of WriteColumn
|
|
|
|
/***********************************************************************/
|
|
/* Make file output of a column descriptor block. */
|
|
/***********************************************************************/
|
|
void COLBLK::Printf(PGLOBAL, FILE *f, uint n)
|
|
{
|
|
char m[64];
|
|
int i;
|
|
PCOL colp;
|
|
|
|
memset(m, ' ', n); // Make margin string
|
|
m[n] = '\0';
|
|
|
|
for (colp = To_Tdb->GetColumns(), i = 1; colp; colp = colp->Next, i++)
|
|
if (colp == this)
|
|
break;
|
|
|
|
fprintf(f, "%sR%dC%d type=%d F=%.2s(%d,%d)", m, To_Tdb->GetTdb_No(),
|
|
i, GetAmType(), Format.Type, Format.Length, Format.Prec);
|
|
fprintf(f,
|
|
" coluse=%04X status=%04X buftyp=%d value=%p name=%s\n",
|
|
ColUse, Status, Buf_Type, Value, Name);
|
|
} // end of Printf
|
|
|
|
/***********************************************************************/
|
|
/* Make string output of a column descriptor block. */
|
|
/***********************************************************************/
|
|
void COLBLK::Prints(PGLOBAL, char *ps, uint)
|
|
{
|
|
sprintf(ps, "R%d.%s", To_Tdb->GetTdb_No(), Name);
|
|
} // end of Prints
|
|
|
|
|
|
/***********************************************************************/
|
|
/* SPCBLK constructor. */
|
|
/***********************************************************************/
|
|
SPCBLK::SPCBLK(PCOLUMN cp)
|
|
: COLBLK((PCOLDEF)NULL, cp->GetTo_Table()->GetTo_Tdb(), 0)
|
|
{
|
|
Name = (char*)cp->GetName();
|
|
Precision = Long = 0;
|
|
Buf_Type = TYPE_ERROR;
|
|
} // end of SPCBLK constructor
|
|
|
|
/***********************************************************************/
|
|
/* WriteColumn: what this routine does is to access the last line */
|
|
/* read from the corresponding table, and rewrite the field */
|
|
/* corresponding to this column from the column buffer and type. */
|
|
/***********************************************************************/
|
|
void SPCBLK::WriteColumn(PGLOBAL g)
|
|
{
|
|
sprintf(g->Message, MSG(SPCOL_READONLY), Name);
|
|
throw (int)TYPE_COLBLK;
|
|
} // end of WriteColumn
|
|
|
|
/***********************************************************************/
|
|
/* RIDBLK constructor for the ROWID special column. */
|
|
/***********************************************************************/
|
|
RIDBLK::RIDBLK(PCOLUMN cp, bool rnm) : SPCBLK(cp)
|
|
{
|
|
Precision = Long = 10;
|
|
Buf_Type = TYPE_INT;
|
|
Rnm = rnm;
|
|
*Format.Type = 'N';
|
|
Format.Length = 10;
|
|
} // end of RIDBLK constructor
|
|
|
|
/***********************************************************************/
|
|
/* ReadColumn: what this routine does is to return the ordinal */
|
|
/* number of the current row in the table (if Rnm is true) or in the */
|
|
/* current file (if Rnm is false) the same except for multiple tables.*/
|
|
/***********************************************************************/
|
|
void RIDBLK::ReadColumn(PGLOBAL g)
|
|
{
|
|
Value->SetValue(To_Tdb->RowNumber(g, Rnm));
|
|
} // end of ReadColumn
|
|
|
|
/***********************************************************************/
|
|
/* FIDBLK constructor for the FILEID special column. */
|
|
/***********************************************************************/
|
|
FIDBLK::FIDBLK(PCOLUMN cp, OPVAL op) : SPCBLK(cp), Op(op)
|
|
{
|
|
//Is_Key = 2; for when the MUL table indexed reading will be implemented.
|
|
Precision = Long = _MAX_PATH;
|
|
Buf_Type = TYPE_STRING;
|
|
*Format.Type = 'C';
|
|
Format.Length = Long;
|
|
#if defined(__WIN__)
|
|
Format.Prec = 1; // Case insensitive
|
|
#endif // __WIN__
|
|
Constant = (!To_Tdb->GetDef()->GetMultiple() &&
|
|
To_Tdb->GetAmType() != TYPE_AM_PLG &&
|
|
To_Tdb->GetAmType() != TYPE_AM_PLM);
|
|
Fn = NULL;
|
|
} // end of FIDBLK constructor
|
|
|
|
/***********************************************************************/
|
|
/* ReadColumn: what this routine does is to return the current */
|
|
/* file ID of the table (can change for Multiple tables). */
|
|
/***********************************************************************/
|
|
void FIDBLK::ReadColumn(PGLOBAL g)
|
|
{
|
|
if (Fn != To_Tdb->GetFile(g)) {
|
|
char filename[_MAX_PATH];
|
|
|
|
Fn = To_Tdb->GetFile(g);
|
|
PlugSetPath(filename, Fn, To_Tdb->GetPath());
|
|
|
|
if (Op != OP_XX) {
|
|
char buff[_MAX_PATH];
|
|
|
|
Value->SetValue_psz(ExtractFromPath(g, buff, filename, Op));
|
|
} else
|
|
Value->SetValue_psz(filename);
|
|
|
|
} // endif Fn
|
|
|
|
} // end of ReadColumn
|
|
|
|
/***********************************************************************/
|
|
/* TIDBLK constructor for the TABID special column. */
|
|
/***********************************************************************/
|
|
TIDBLK::TIDBLK(PCOLUMN cp) : SPCBLK(cp)
|
|
{
|
|
//Is_Key = 2; for when the MUL table indexed reading will be implemented.
|
|
Precision = Long = 64;
|
|
Buf_Type = TYPE_STRING;
|
|
*Format.Type = 'C';
|
|
Format.Length = Long;
|
|
Format.Prec = 1; // Case insensitive
|
|
Constant = (To_Tdb->GetAmType() != TYPE_AM_TBL);
|
|
Tname = NULL;
|
|
} // end of TIDBLK constructor
|
|
|
|
/***********************************************************************/
|
|
/* ReadColumn: what this routine does is to return the table ID. */
|
|
/***********************************************************************/
|
|
void TIDBLK::ReadColumn(PGLOBAL)
|
|
{
|
|
if (Tname == NULL) {
|
|
Tname = (char*)To_Tdb->GetName();
|
|
Value->SetValue_psz(Tname);
|
|
} // endif Tname
|
|
|
|
} // end of ReadColumn
|
|
|
|
/***********************************************************************/
|
|
/* PRTBLK constructor for the PARTID special column. */
|
|
/***********************************************************************/
|
|
PRTBLK::PRTBLK(PCOLUMN cp) : SPCBLK(cp)
|
|
{
|
|
//Is_Key = 2; for when the MUL table indexed reading will be implemented.
|
|
Precision = Long = 64;
|
|
Buf_Type = TYPE_STRING;
|
|
*Format.Type = 'C';
|
|
Format.Length = Long;
|
|
Format.Prec = 1; // Case insensitive
|
|
Constant = true; // TODO: check whether this is true indeed
|
|
Pname = NULL;
|
|
} // end of PRTBLK constructor
|
|
|
|
/***********************************************************************/
|
|
/* ReadColumn: what this routine does is to return the partition ID. */
|
|
/***********************************************************************/
|
|
void PRTBLK::ReadColumn(PGLOBAL g)
|
|
{
|
|
if (Pname == NULL) {
|
|
const char *p;
|
|
|
|
Pname = To_Tdb->GetDef()->GetStringCatInfo(g, "partname", "?");
|
|
p = strrchr(Pname, '#');
|
|
Value->SetValue_psz((p) ? p + 1 : Pname);
|
|
} // endif Pname
|
|
|
|
} // end of ReadColumn
|
|
|
|
/***********************************************************************/
|
|
/* SIDBLK constructor for the SERVID special column. */
|
|
/***********************************************************************/
|
|
SIDBLK::SIDBLK(PCOLUMN cp) : SPCBLK(cp)
|
|
{
|
|
//Is_Key = 2; for when the MUL table indexed reading will be implemented.
|
|
Precision = Long = 64;
|
|
Buf_Type = TYPE_STRING;
|
|
*Format.Type = 'C';
|
|
Format.Length = Long;
|
|
Format.Prec = 1; // Case insensitive
|
|
Constant = (To_Tdb->GetAmType() != TYPE_AM_TBL);
|
|
Sname = NULL;
|
|
} // end of TIDBLK constructor
|
|
|
|
/***********************************************************************/
|
|
/* ReadColumn: what this routine does is to return the server ID. */
|
|
/***********************************************************************/
|
|
void SIDBLK::ReadColumn(PGLOBAL)
|
|
{
|
|
//if (Sname == NULL) {
|
|
Sname = To_Tdb->GetServer();
|
|
Value->SetValue_psz(Sname);
|
|
// } // endif Sname
|
|
|
|
} // end of ReadColumn
|