1 /************* TabCol C++ Functions Source Code File (.CPP) ************/
2 /* Name: TABCOL.CPP Version 2.7 */
3 /* */
4 /* (C) Copyright to the author Olivier BERTRAND 1998-2015 */
5 /* */
6 /* This file contains the PlugDB++ XTAB, COLUMN and XORDER methods. */
7 /***********************************************************************/
8
9 /***********************************************************************/
10 /* Include relevant MariaDB header file. */
11 /***********************************************************************/
12 #include "my_global.h"
13
14 /***********************************************************************/
15 /* Include required application header files */
16 /* global.h is header containing all global Plug declarations. */
17 /* plgdbsem.h is header containing the DB applic. declarations. */
18 /* tabcol.h is header containing XTAB, and XORDER declares. */
19 /***********************************************************************/
20 #include "global.h"
21 #include "plgdbsem.h"
22 #include "xtable.h"
23 #include "tabcol.h"
24
25 /***********************************************************************/
26 /* XTAB public constructor. */
27 /***********************************************************************/
XTAB(LPCSTR name,LPCSTR srcdef)28 XTAB::XTAB(LPCSTR name, LPCSTR srcdef) : Name(name)
29 {
30 Next = NULL;
31 To_Tdb = NULL;
32 Srcdef = srcdef;
33 Schema = NULL;
34 Qualifier = NULL;
35
36 if (trace(1))
37 htrc("XTAB: making new TABLE %s %s\n", Name, Srcdef);
38
39 } // end of XTAB constructor
40
41 /***********************************************************************/
42 /* XTAB public constructor as a copy of another table. */
43 /***********************************************************************/
XTAB(PTABLE tp)44 XTAB::XTAB(PTABLE tp) : Name(tp->Name)
45 {
46 Next = NULL;
47 To_Tdb = NULL;
48 Srcdef = tp->Srcdef;
49 Schema = tp->Schema;
50 Qualifier = tp->Qualifier;
51
52 if (trace(1))
53 htrc(" making copy TABLE %s %s\n", Name, SVP(Srcdef));
54
55 } // end of XTAB constructor
56
57 /***********************************************************************/
58 /* Link the tab2 tables to the tab1(this) table chain. */
59 /***********************************************************************/
Link(PTABLE tab2)60 PTABLE XTAB::Link(PTABLE tab2)
61 {
62 PTABLE tabp;
63
64 if (trace(1))
65 htrc("Linking tables %s... to %s\n", Name, tab2->Name);
66
67 for (tabp = this; tabp->Next; tabp = tabp->Next) ;
68
69 tabp->Next = tab2;
70 return (this);
71 } /* end of Link */
72
73 /***********************************************************************/
74 /* Make file output of XTAB contents. */
75 /***********************************************************************/
Printf(PGLOBAL g,FILE * f,uint n)76 void XTAB::Printf(PGLOBAL g, FILE *f, uint n)
77 {
78 char m[64];
79
80 memset(m, ' ', n); /* Make margin string */
81 m[n] = '\0';
82
83 for (PTABLE tp = this; tp; tp = tp->Next) {
84 fprintf(f, "%sTABLE: %s.%s %s\n",
85 m, SVP(tp->Schema), tp->Name, SVP(tp->Srcdef));
86 PlugPutOut(g, f, TYPE_TDB, tp->To_Tdb, n + 2);
87 } /* endfor tp */
88
89 } /* end of Printf */
90
91 /***********************************************************************/
92 /* Make string output of XTAB contents. */
93 /***********************************************************************/
Prints(PGLOBAL,char * ps,uint z)94 void XTAB::Prints(PGLOBAL, char *ps, uint z)
95 {
96 char buf[128];
97 int i, n = (int)z - 1;
98
99 *ps = '\0';
100
101 for (PTABLE tp = this; tp && n > 0; tp = tp->Next) {
102 i = sprintf(buf, "TABLE: %s.%s %s To_Tdb=%p ",
103 SVP(tp->Schema), tp->Name, SVP(tp->Srcdef), tp->To_Tdb);
104 strncat(ps, buf, n);
105 n -= i;
106 } // endif tp
107
108 } /* end of Prints */
109
110
111 /***********************************************************************/
112 /* COLUMN public constructor. */
113 /***********************************************************************/
COLUMN(LPCSTR name)114 COLUMN::COLUMN(LPCSTR name) : Name(name)
115 {
116 To_Table = NULL;
117 To_Col = NULL;
118 Qualifier = NULL;
119
120 if (trace(1))
121 htrc(" making new COLUMN %s\n", Name);
122
123 } // end of COLUMN constructor
124
125 /***********************************************************************/
126 /* COLUMN SetFormat: should never be called. */
127 /***********************************************************************/
SetFormat(PGLOBAL g,FORMAT &)128 bool COLUMN::SetFormat(PGLOBAL g, FORMAT&)
129 {
130 strcpy(g->Message, MSG(NO_FORMAT_COL));
131 return true;
132 } // end of SetFormat
133
134 /***********************************************************************/
135 /* Make file output of COLUMN contents. */
136 /***********************************************************************/
Printf(PGLOBAL g,FILE * f,uint n)137 void COLUMN::Printf(PGLOBAL g, FILE *f, uint n)
138 {
139 char m[64];
140
141 memset(m, ' ', n); // Make margin string
142 m[n] = '\0';
143
144 if (Name)
145 fprintf(f, "%sCOLUMN: %s.%s\n", m,
146 ((!Qualifier) ? (PSZ)"?" : Qualifier), Name);
147 else // LNA
148 fprintf(f, "%sC%d\n", m, (!Qualifier) ? 0 : *(int *)Qualifier);
149
150 PlugPutOut(g, f, TYPE_TABLE, To_Table, n + 2);
151 PlugPutOut(g, f, TYPE_XOBJECT, To_Col, n + 2);
152 } /* end of Printf */
153
154 /***********************************************************************/
155 /* Make string output of COLUMN contents. */
156 /***********************************************************************/
Prints(PGLOBAL,char * ps,uint z)157 void COLUMN::Prints(PGLOBAL, char *ps, uint z)
158 {
159 char buf[80];
160
161 if (Name)
162 sprintf(buf, "COLUMN: %s.%s table=%p col=%p",
163 ((!Qualifier) ? (PSZ)"?" : Qualifier), Name, To_Table, To_Col);
164 else // LNA
165 sprintf(buf, "C%d", (!Qualifier) ? 0 : *(int *)Qualifier);
166
167 strncpy(ps, buf, z);
168 ps[z - 1] = '\0';
169 } /* end of Prints */
170