mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
08c852026d
This patch is the result of running run-clang-tidy -fix -header-filter=.* -checks='-*,modernize-use-equals-default' . Code style changes have been done on top. The result of this change leads to the following improvements: 1. Binary size reduction. * For a -DBUILD_CONFIG=mysql_release build, the binary size is reduced by ~400kb. * A raw -DCMAKE_BUILD_TYPE=Release reduces the binary size by ~1.4kb. 2. Compiler can better understand the intent of the code, thus it leads to more optimization possibilities. Additionally it enabled detecting unused variables that had an empty default constructor but not marked so explicitly. Particular change required following this patch in sql/opt_range.cc result_keys, an unused template class Bitmap now correctly issues unused variable warnings. Setting Bitmap template class constructor to default allows the compiler to identify that there are no side-effects when instantiating the class. Previously the compiler could not issue the warning as it assumed Bitmap class (being a template) would not be performing a NO-OP for its default constructor. This prevented the "unused variable warning".
344 lines
12 KiB
C++
344 lines
12 KiB
C++
/*************** tabbson H Declares Source Code File (.H) **************/
|
|
/* Name: tabbson.h Version 1.1 */
|
|
/* */
|
|
/* (C) Copyright to the author Olivier BERTRAND 2020 - 2021 */
|
|
/* */
|
|
/* This file contains the BSON classes declares. */
|
|
/***********************************************************************/
|
|
#pragma once
|
|
#include "block.h"
|
|
#include "colblk.h"
|
|
#include "bson.h"
|
|
#include "tabjson.h"
|
|
|
|
typedef class BTUTIL* PBTUT;
|
|
typedef class BCUTIL* PBCUT;
|
|
typedef class BSONDEF* PBDEF;
|
|
typedef class TDBBSON* PBTDB;
|
|
typedef class BSONCOL* PBSCOL;
|
|
class TDBBSN;
|
|
DllExport PQRYRES BSONColumns(PGLOBAL, PCSZ, PCSZ, PTOS, bool);
|
|
|
|
/***********************************************************************/
|
|
/* Class used to get the columns of a mongo collection. */
|
|
/***********************************************************************/
|
|
class BSONDISC : public BLOCK {
|
|
public:
|
|
// Constructor
|
|
BSONDISC(PGLOBAL g, uint* lg);
|
|
|
|
// Functions
|
|
int GetColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt);
|
|
bool Find(PGLOBAL g, PBVAL jvp, PCSZ key, int j);
|
|
void AddColumn(PGLOBAL g);
|
|
|
|
// Members
|
|
JCOL jcol;
|
|
PJCL jcp, fjcp, pjcp;
|
|
//PVL vlp;
|
|
PBDEF tdp;
|
|
TDBBSN *tjnp;
|
|
PBTDB tjsp;
|
|
PBPR jpp;
|
|
PBVAL jsp;
|
|
PBPR row;
|
|
PBTUT bp;
|
|
PCSZ sep;
|
|
PCSZ strfy;
|
|
char colname[65], fmt[129], buf[16];
|
|
uint *length;
|
|
int i, n, bf, ncol, lvl, sz, limit;
|
|
bool all;
|
|
}; // end of BSONDISC
|
|
|
|
/***********************************************************************/
|
|
/* JSON table. */
|
|
/***********************************************************************/
|
|
class DllExport BSONDEF : public DOSDEF { /* Table description */
|
|
friend class TDBBSON;
|
|
friend class TDBBSN;
|
|
friend class TDBBCL;
|
|
friend class BSONDISC;
|
|
friend class BSONCOL;
|
|
#if defined(CMGO_SUPPORT)
|
|
friend class CMGFAM;
|
|
#endif // CMGO_SUPPORT
|
|
#if defined(JAVA_SUPPORT)
|
|
friend class JMGFAM;
|
|
#endif // JAVA_SUPPORT
|
|
public:
|
|
// Constructor
|
|
BSONDEF(void);
|
|
|
|
// Implementation
|
|
virtual const char* GetType(void) { return "BSON"; }
|
|
|
|
// Methods
|
|
virtual bool DefineAM(PGLOBAL g, LPCSTR am, int poff);
|
|
virtual PTDB GetTable(PGLOBAL g, MODE m);
|
|
|
|
protected:
|
|
// Members
|
|
PGLOBAL G; /* Bson utility memory */
|
|
JMODE Jmode; /* MODE_OBJECT by default */
|
|
PCSZ Objname; /* Name of first level object */
|
|
PCSZ Xcol; /* Name of expandable column */
|
|
int Limit; /* Limit of multiple values */
|
|
int Pretty; /* Depends on file structure */
|
|
int Base; /* The array index base */
|
|
bool Strict; /* Strict syntax checking */
|
|
char Sep; /* The Jpath separator */
|
|
const char* Uri; /* MongoDB connection URI */
|
|
PCSZ Collname; /* External collection name */
|
|
PSZ Options; /* Colist ; Pipe */
|
|
PSZ Filter; /* Filter */
|
|
PSZ Driver; /* MongoDB Driver (C or JAVA) */
|
|
bool Pipe; /* True if Colist is a pipeline */
|
|
int Version; /* Driver version */
|
|
PSZ Wrapname; /* MongoDB java wrapper name */
|
|
}; // end of BSONDEF
|
|
|
|
|
|
/* -------------------------- BTUTIL class --------------------------- */
|
|
|
|
/***********************************************************************/
|
|
/* Handles all BJSON actions for a BSON table. */
|
|
/***********************************************************************/
|
|
class BTUTIL : public BDOC {
|
|
public:
|
|
// Constructor
|
|
BTUTIL(PGLOBAL G, TDBBSN* tp) : BDOC(G) { Tp = tp; }
|
|
|
|
// Utility functions
|
|
PBVAL FindRow(PGLOBAL g);
|
|
PBVAL ParseLine(PGLOBAL g, int prty, bool cma);
|
|
PBVAL MakeTopTree(PGLOBAL g, int type);
|
|
PSZ SerialVal(PGLOBAL g, PBVAL top, int pretty);
|
|
|
|
protected:
|
|
// Members
|
|
TDBBSN* Tp;
|
|
}; // end of class BTUTIL
|
|
|
|
/* -------------------------- BCUTIL class --------------------------- */
|
|
|
|
/***********************************************************************/
|
|
/* Handles all BJSON actions for a BSON columns. */
|
|
/***********************************************************************/
|
|
class BCUTIL : public BTUTIL {
|
|
public:
|
|
// Constructor
|
|
BCUTIL(PGLOBAL G, PBSCOL cp, TDBBSN* tp) : BTUTIL(G, tp)
|
|
{ Cp = cp; Jb = false; }
|
|
|
|
// Utility functions
|
|
void SetJsonValue(PGLOBAL g, PVAL vp, PBVAL jvp);
|
|
PBVAL MakeBson(PGLOBAL g, PBVAL jsp, int n);
|
|
PBVAL GetRowValue(PGLOBAL g, PBVAL row, int i);
|
|
PVAL GetColumnValue(PGLOBAL g, PBVAL row, int i);
|
|
PVAL ExpandArray(PGLOBAL g, PBVAL arp, int n);
|
|
PVAL CalculateArray(PGLOBAL g, PBVAL arp, int n);
|
|
PBVAL GetRow(PGLOBAL g);
|
|
|
|
protected:
|
|
// Member
|
|
PBSCOL Cp;
|
|
bool Jb;
|
|
}; // end of class BCUTIL
|
|
|
|
/* -------------------------- TDBBSN class --------------------------- */
|
|
|
|
/***********************************************************************/
|
|
/* This is the BSN Access Method class declaration. */
|
|
/* The table is a DOS file, each record being a JSON object. */
|
|
/***********************************************************************/
|
|
class DllExport TDBBSN : public TDBDOS {
|
|
friend class BSONCOL;
|
|
friend class BSONDEF;
|
|
friend class BTUTIL;
|
|
friend class BCUTIL;
|
|
friend class BSONDISC;
|
|
#if defined(CMGO_SUPPORT)
|
|
friend class CMGFAM;
|
|
#endif // CMGO_SUPPORT
|
|
#if defined(JAVA_SUPPORT)
|
|
friend class JMGFAM;
|
|
#endif // JAVA_SUPPORT
|
|
public:
|
|
// Constructor
|
|
TDBBSN(PGLOBAL g, PBDEF tdp, PTXF txfp);
|
|
TDBBSN(TDBBSN* tdbp);
|
|
|
|
// Implementation
|
|
virtual AMT GetAmType(void) { return TYPE_AM_JSN; }
|
|
virtual bool SkipHeader(PGLOBAL g);
|
|
virtual PTDB Duplicate(PGLOBAL g) { return (PTDB)new(g) TDBBSN(this); }
|
|
PBVAL GetRow(void) { return Row; }
|
|
|
|
// Methods
|
|
virtual PTDB Clone(PTABS t);
|
|
virtual PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n);
|
|
virtual PCOL InsertSpecialColumn(PCOL colp);
|
|
virtual int RowNumber(PGLOBAL g, bool b = FALSE) {return (b) ? M : N;}
|
|
virtual bool CanBeFiltered(void)
|
|
{return Txfp->GetAmType() == TYPE_AM_MGO || !Xcol;}
|
|
|
|
// Database routines
|
|
virtual int Cardinality(PGLOBAL g);
|
|
virtual int GetMaxSize(PGLOBAL g);
|
|
virtual bool OpenDB(PGLOBAL g);
|
|
virtual int ReadDB(PGLOBAL g);
|
|
virtual bool PrepareWriting(PGLOBAL g);
|
|
virtual int WriteDB(PGLOBAL g);
|
|
virtual void CloseDB(PGLOBAL g);
|
|
|
|
// Specific routine
|
|
virtual int EstimatedLength(void);
|
|
|
|
protected:
|
|
PBVAL FindRow(PGLOBAL g);
|
|
//int MakeTopTree(PGLOBAL g, PBVAL jsp);
|
|
|
|
// Members
|
|
PBTUT Bp; // The BSUTIL handling class
|
|
PBVAL Top; // The top JSON tree
|
|
PBVAL Row; // The current row
|
|
PBSCOL Colp; // The multiple column
|
|
JMODE Jmode; // MODE_OBJECT by default
|
|
PCSZ Objname; // The table object name
|
|
PCSZ Xcol; // Name of expandable column
|
|
int Fpos; // The current row index
|
|
int N; // The current Rownum
|
|
int M; // Index of multiple value
|
|
int Limit; // Limit of multiple values
|
|
int Pretty; // Depends on file structure
|
|
int NextSame; // Same next row
|
|
int SameRow; // Same row nb
|
|
int Xval; // Index of expandable array
|
|
int B; // Array index base
|
|
char Sep; // The Jpath separator
|
|
bool Strict; // Strict syntax checking
|
|
bool Comma; // Row has final comma
|
|
}; // end of class TDBBSN
|
|
|
|
/* -------------------------- BSONCOL class -------------------------- */
|
|
|
|
/***********************************************************************/
|
|
/* Class BSONCOL: JSON access method column descriptor. */
|
|
/***********************************************************************/
|
|
class DllExport BSONCOL : public DOSCOL {
|
|
friend class TDBBSN;
|
|
friend class TDBBSON;
|
|
friend class BCUTIL;
|
|
#if defined(CMGO_SUPPORT)
|
|
friend class CMGFAM;
|
|
#endif // CMGO_SUPPORT
|
|
#if defined(JAVA_SUPPORT)
|
|
friend class JMGFAM;
|
|
#endif // JAVA_SUPPORT
|
|
public:
|
|
// Constructors
|
|
BSONCOL(PGLOBAL g, PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i);
|
|
BSONCOL(BSONCOL* colp, PTDB tdbp); // Constructor used in copy process
|
|
|
|
// Implementation
|
|
virtual int GetAmType(void) { return Tbp->GetAmType(); }
|
|
virtual bool Stringify(void) { return Sgfy; }
|
|
|
|
// Methods
|
|
virtual bool SetBuffer(PGLOBAL g, PVAL value, bool ok, bool check);
|
|
bool ParseJpath(PGLOBAL g);
|
|
virtual PSZ GetJpath(PGLOBAL g, bool proj);
|
|
virtual void ReadColumn(PGLOBAL g);
|
|
virtual void WriteColumn(PGLOBAL g);
|
|
|
|
protected:
|
|
bool CheckExpand(PGLOBAL g, int i, PSZ nm, bool b);
|
|
bool SetArrayOptions(PGLOBAL g, char* p, int i, PSZ nm);
|
|
|
|
// Default constructor not to be used
|
|
BSONCOL(void) = default;
|
|
|
|
// Members
|
|
TDBBSN *Tbp; // To the JSN table block
|
|
PBCUT Cp; // To the BCUTIL handling class
|
|
PVAL MulVal; // To value used by multiple column
|
|
char *Jpath; // The json path
|
|
JNODE *Nodes; // The intermediate objects
|
|
int Nod; // The number of intermediate objects
|
|
int Xnod; // Index of multiple values
|
|
char Sep; // The Jpath separator
|
|
bool Xpd; // True for expandable column
|
|
bool Parsed; // True when parsed
|
|
bool Warned; // True when warning issued
|
|
bool Sgfy; // True if stringified
|
|
}; // end of class BSONCOL
|
|
|
|
/* -------------------------- TDBBSON class -------------------------- */
|
|
|
|
/***********************************************************************/
|
|
/* This is the JSON Access Method class declaration. */
|
|
/***********************************************************************/
|
|
class DllExport TDBBSON : public TDBBSN {
|
|
friend class BSONDEF;
|
|
friend class BSONCOL;
|
|
public:
|
|
// Constructor
|
|
TDBBSON(PGLOBAL g, PBDEF tdp, PTXF txfp);
|
|
TDBBSON(PBTDB tdbp);
|
|
|
|
// Implementation
|
|
virtual AMT GetAmType(void) { return TYPE_AM_JSON; }
|
|
virtual PTDB Duplicate(PGLOBAL g) { return (PTDB)new(g) TDBBSON(this); }
|
|
PBVAL GetDoc(void) { return Docp; }
|
|
|
|
// Methods
|
|
virtual PTDB Clone(PTABS t);
|
|
|
|
// Database routines
|
|
virtual int Cardinality(PGLOBAL g);
|
|
virtual int GetMaxSize(PGLOBAL g);
|
|
virtual void ResetSize(void);
|
|
virtual int GetProgCur(void) { return N; }
|
|
virtual int GetRecpos(void);
|
|
virtual bool SetRecpos(PGLOBAL g, int recpos);
|
|
virtual bool OpenDB(PGLOBAL g);
|
|
virtual int ReadDB(PGLOBAL g);
|
|
virtual bool PrepareWriting(PGLOBAL g) { return false; }
|
|
virtual int WriteDB(PGLOBAL g);
|
|
virtual int DeleteDB(PGLOBAL g, int irc);
|
|
virtual void CloseDB(PGLOBAL g);
|
|
int MakeDocument(PGLOBAL g);
|
|
|
|
// Optimization routines
|
|
virtual int MakeIndex(PGLOBAL g, PIXDEF pxdf, bool add);
|
|
|
|
protected:
|
|
int MakeNewDoc(PGLOBAL g);
|
|
|
|
// Members
|
|
PBVAL Docp; // The document array
|
|
PBVAL Docrow; // Document row
|
|
int Multiple; // 0: No 1: DIR 2: Section 3: filelist
|
|
int Docsize; // The document size
|
|
bool Done; // True when document parsing is done
|
|
bool Changed; // After Update, Insert or Delete
|
|
}; // end of class TDBBSON
|
|
|
|
/***********************************************************************/
|
|
/* This is the class declaration for the JSON catalog table. */
|
|
/***********************************************************************/
|
|
class DllExport TDBBCL : public TDBCAT {
|
|
public:
|
|
// Constructor
|
|
TDBBCL(PBDEF tdp);
|
|
|
|
protected:
|
|
// Specific routines
|
|
virtual PQRYRES GetResult(PGLOBAL g);
|
|
|
|
// Members
|
|
PTOS Topt;
|
|
PCSZ Db;
|
|
PCSZ Dsn;
|
|
}; // end of class TDBBCL
|