mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
0c06320ae9
Reviewer: andrew@mariadb.org
205 lines
7.8 KiB
C++
205 lines
7.8 KiB
C++
/*************** Tabext H Declares Source Code File (.H) ***************/
|
|
/* Name: TABEXT.H Version 1.1 */
|
|
/* */
|
|
/* (C) Copyright to the author Olivier BERTRAND 2017 - 2019 */
|
|
/* */
|
|
/* This is the EXTDEF, TABEXT and EXTCOL classes definitions. */
|
|
/***********************************************************************/
|
|
|
|
#ifndef __TABEXT_H
|
|
#define __TABEXT_H
|
|
|
|
#include "reldef.h"
|
|
|
|
typedef class ALIAS *PAL;
|
|
|
|
class ALIAS : public BLOCK {
|
|
public:
|
|
ALIAS(PAL x, PSZ n, PSZ a, bool h)
|
|
{Next = x, Name = n, Alias = a, Having = h;}
|
|
|
|
PAL Next;
|
|
PSZ Name;
|
|
PSZ Alias;
|
|
bool Having;
|
|
}; // end of class ALIAS
|
|
|
|
// Condition filter structure
|
|
class CONDFIL : public BLOCK {
|
|
public:
|
|
// Constructor
|
|
CONDFIL(uint idx, AMT type);
|
|
|
|
// Functions
|
|
int Init(PGLOBAL g, PHC hc);
|
|
const char *Chk(const char *cln, bool *h);
|
|
|
|
// Members
|
|
//const Item *Cond;
|
|
AMT Type;
|
|
uint Idx;
|
|
OPVAL Op;
|
|
PCMD Cmds;
|
|
PAL Alist;
|
|
bool All;
|
|
bool Bd;
|
|
bool Hv;
|
|
char *Body;
|
|
char *Having;
|
|
}; // end of class CONDFIL
|
|
|
|
/***********************************************************************/
|
|
/* This class corresponds to the data base description for external */
|
|
/* tables of type MYSQL, ODBC, JDBC... */
|
|
/***********************************************************************/
|
|
class DllExport EXTDEF : public TABDEF { /* EXT table */
|
|
friend class TDBEXT;
|
|
public:
|
|
// Constructor
|
|
EXTDEF(void); // Constructor
|
|
|
|
// Implementation
|
|
virtual const char *GetType(void) { return "EXT"; }
|
|
inline PCSZ GetTabname(void) { return Tabname; }
|
|
inline PCSZ GetTabschema(void) { return Tabschema; }
|
|
inline PCSZ GetUsername(void) { return Username; };
|
|
inline PCSZ GetPassword(void) { return Password; };
|
|
inline PSZ GetTabcat(void) { return Tabcat; }
|
|
inline PSZ GetSrcdef(void) { return Srcdef; }
|
|
inline char GetSep(void) { return (Sep) ? *Sep : 0; }
|
|
inline int GetQuoted(void) { return Quoted; }
|
|
inline PSZ GetQchar(void) { return Qchar; }
|
|
inline int GetOptions(void) { return Options; }
|
|
|
|
// Methods
|
|
virtual int Indexable(void) { return 2; }
|
|
virtual bool DefineAM(PGLOBAL g, LPCSTR am, int poff);
|
|
|
|
protected:
|
|
// Members
|
|
PCSZ Tabname; /* External table name */
|
|
PCSZ Tabschema; /* External table schema */
|
|
PCSZ Username; /* User connect name */
|
|
PCSZ Password; /* Password connect info */
|
|
PSZ Tabcat; /* External table catalog */
|
|
PSZ Tabtyp; /* Catalog table type */
|
|
PSZ Colpat; /* Catalog column pattern */
|
|
PSZ Srcdef; /* The source table SQL definition */
|
|
PSZ Qchar; /* Identifier quoting character */
|
|
PSZ Qrystr; /* The original query */
|
|
PSZ Sep; /* Decimal separator */
|
|
//PSZ Alias; /* Column alias list */
|
|
PSZ Phpos; /* Place holer positions */
|
|
int Options; /* Open connection options */
|
|
int Cto; /* Open connection timeout */
|
|
int Qto; /* Query (command) timeout */
|
|
int Quoted; /* Identifier quoting level */
|
|
int Maxerr; /* Maxerr for an Exec table */
|
|
int Maxres; /* Maxres for a catalog table */
|
|
int Memory; /* Put result set in memory */
|
|
bool Scrollable; /* Use scrollable cursor */
|
|
bool Xsrc; /* Execution type */
|
|
}; // end of EXTDEF
|
|
|
|
/***********************************************************************/
|
|
/* This is the base class for all external tables. */
|
|
/***********************************************************************/
|
|
class DllExport TDBEXT : public TDB {
|
|
friend class JAVAConn;
|
|
friend class JMgoConn;
|
|
public:
|
|
// Constructors
|
|
TDBEXT(EXTDEF *tdp);
|
|
TDBEXT(PTDBEXT tdbp);
|
|
|
|
// Implementation
|
|
|
|
// Properties
|
|
virtual bool IsRemote(void) { return true; }
|
|
|
|
// Methods
|
|
virtual PCSZ GetServer(void) { return "Remote"; }
|
|
virtual int GetRecpos(void);
|
|
|
|
// Database routines
|
|
virtual int GetMaxSize(PGLOBAL g);
|
|
virtual int GetProgMax(PGLOBAL g);
|
|
|
|
protected:
|
|
// Internal functions
|
|
virtual bool MakeSrcdef(PGLOBAL g);
|
|
virtual bool MakeSQL(PGLOBAL g, bool cnt);
|
|
//virtual bool MakeInsert(PGLOBAL g);
|
|
virtual bool MakeCommand(PGLOBAL g);
|
|
void RemoveConst(PGLOBAL g, char *stmt);
|
|
int Decode(PCSZ utf, char *buf, size_t n);
|
|
|
|
// Members
|
|
PQRYRES Qrp; // Points to storage result
|
|
PSTRG Query; // Constructed SQL query
|
|
PCSZ TableName; // Points to ODBC table name
|
|
PCSZ Schema; // Points to ODBC table Schema
|
|
PCSZ User; // User connect info
|
|
PCSZ Pwd; // Password connect info
|
|
char *Catalog; // Points to ODBC table Catalog
|
|
char *Srcdef; // The source table SQL definition
|
|
char *Count; // Points to count(*) SQL statement
|
|
//char *Where; // Points to local where clause
|
|
char *Quote; // The identifier quoting character
|
|
char *MulConn; // Used for multiple ODBC tables
|
|
char *DBQ; // The address part of Connect string
|
|
char *Qrystr; // The original query
|
|
char Sep; // The decimal separator
|
|
int Options; // Connect options
|
|
int Cto; // Connect timeout
|
|
int Qto; // Query timeout
|
|
int Quoted; // The identifier quoting level
|
|
int Fpos; // Position of last read record
|
|
int Curpos; // Cursor position of last fetch
|
|
int AftRows; // The number of affected rows
|
|
int Rows; // Rowset size
|
|
int CurNum; // Current buffer line number
|
|
int Rbuf; // Number of lines read in buffer
|
|
int BufSize; // Size of connect string buffer
|
|
int Nparm; // The number of statement parameters
|
|
int Memory; // 0: No 1: Alloc 2: Put 3: Get
|
|
int Ncol; // The column number (JDBC)
|
|
bool Scrollable; // Use scrollable cursor
|
|
bool Placed; // True for position reading
|
|
}; // end of class TDBEXT
|
|
|
|
/***********************************************************************/
|
|
/* Virtual class EXTCOL: external column. */
|
|
/***********************************************************************/
|
|
class DllExport EXTCOL : public COLBLK {
|
|
friend class TDBEXT;
|
|
public:
|
|
// Constructor
|
|
EXTCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PCSZ am);
|
|
EXTCOL(PEXTCOL colp, PTDB tdbp); // Constructor used in copy process
|
|
|
|
// Implementation
|
|
inline int GetRank(void) { return Rank; }
|
|
inline void SetRank(int k) { Rank = k; }
|
|
//inline PVBLK GetBlkp(void) {return Blkp;}
|
|
inline void SetCrp(PCOLRES crp) { Crp = crp; }
|
|
|
|
// Methods
|
|
virtual bool SetBuffer(PGLOBAL g, PVAL value, bool ok, bool check);
|
|
virtual void ReadColumn(PGLOBAL) = 0;
|
|
virtual void WriteColumn(PGLOBAL) = 0;
|
|
|
|
protected:
|
|
// Constructor for count(*) column
|
|
EXTCOL(void);
|
|
|
|
// Members
|
|
PCOLRES Crp; // To storage result
|
|
void *Bufp; // To extended buffer
|
|
PVBLK Blkp; // To Value Block
|
|
PVAL To_Val; // To value used for Insert
|
|
int Rank; // Rank (position) number in the query
|
|
//int Flag; // ???
|
|
}; // end of class EXTCOL
|
|
|
|
#endif // __TABEXT_H
|