CUBRID Engine  latest
storage_common.c
Go to the documentation of this file.
1 /*
2  * Copyright 2008 Search Solution Corporation
3  * Copyright 2016 CUBRID Corporation
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 /*
20  * storage_common.c - Definitions and data types of disk related stuffs
21  * such as pages, file structures, and so on.
22  */
23 
24 #ident "$Id$"
25 
26 #include <stdlib.h>
27 #include <assert.h>
28 
29 #include "config.h"
30 
31 #include "storage_common.h"
32 #include "memory_alloc.h"
33 #include "error_manager.h"
34 #include "system_parameter.h"
35 #include "environment_variable.h"
36 #include "file_io.h"
37 #include "tz_support.h"
38 #include "db_date.h"
39 #include "dbtype.h"
40 
41 
42 /* RESERVED_SIZE_IN_PAGE should be aligned */
43 #define RESERVED_SIZE_IN_PAGE (sizeof (FILEIO_PAGE_RESERVED) + sizeof (FILEIO_PAGE_WATERMARK))
44 
48 
50 
51 /*
52  * db_page_size(): returns the user page size
53  *
54  * returns: user page size
55  */
58 {
59  return db_User_page_size;
60 }
61 
62 /*
63  * db_io_page_size(): returns the IO page size
64  *
65  * returns: IO page size
66  */
69 {
70  return db_Io_page_size;
71 }
72 
73 /*
74  * db_log_page_size(): returns the log page size
75  *
76  * returns: log page size
77  */
80 {
81  return db_Log_page_size;
82 }
83 
84 /*
85  * db_set_page_size(): set the page size of system.
86  *
87  * returns: NO_ERROR if page size is set by given size, otherwise ER_FAILED
88  * io_page_size(IN): the IO page size
89  * log_page_size(IN): the LOG page size
90  *
91  * Note: Set the database page size to the given size. The given size
92  * must be power of 2, greater than or equal to 1K, and smaller
93  * than or equal to 16K.
94  */
95 int
96 db_set_page_size (PGLENGTH io_page_size, PGLENGTH log_page_size)
97 {
98  assert (io_page_size >= IO_MIN_PAGE_SIZE && log_page_size >= IO_MIN_PAGE_SIZE);
99 
100  if (io_page_size < IO_MIN_PAGE_SIZE || log_page_size < IO_MIN_PAGE_SIZE)
101  {
102  return ER_FAILED;
103  }
104 
105  db_Io_page_size = find_valid_page_size (io_page_size);
107  db_Log_page_size = find_valid_page_size (log_page_size);
108 
109  if (db_Io_page_size != io_page_size || db_Log_page_size != log_page_size)
110  {
111  return ER_FAILED;
112  }
113 
114  return NO_ERROR;
115 }
116 
117 /*
118  * db_network_page_size(): find the network pagesize
119  *
120  * returns: network pagesize
121  *
122  * Note: Find the best network pagesize for C/S communications for
123  * given transaction/client.
124  */
125 PGLENGTH
127 {
128  return db_Io_page_size;
129 }
130 
131 /*
132  * find_valid_page_size(): find the valid page size of system
133  *
134  * returns: page_size
135  * page_size(IN): the page size
136  *
137  * Note: Find the database pagesize with the given size, where the given size
138  * must be power of 2, greater than or equal to 1K, and smaller than or
139  * equal to 16K.
140  */
141 static PGLENGTH
143 {
144  PGLENGTH power2_page_size = page_size;
145 
146  if (power2_page_size < IO_MIN_PAGE_SIZE)
147  {
148  power2_page_size = IO_MIN_PAGE_SIZE;
149  }
150  else if (power2_page_size > IO_MAX_PAGE_SIZE)
151  {
152  power2_page_size = IO_MAX_PAGE_SIZE;
153  }
154  else
155  {
156  if (!IS_POWER_OF_2 (power2_page_size))
157  {
158  /*
159  * Not a power of 2 or page size is too small
160  *
161  * Round the number to a power of two. Find smaller number that it is
162  * a power of two, and then shift to get larger number.
163  */
164  while (!IS_POWER_OF_2 (power2_page_size))
165  {
166  if (power2_page_size < IO_MIN_PAGE_SIZE)
167  {
168  power2_page_size = IO_MIN_PAGE_SIZE;
169  break;
170  }
171  else
172  {
173  /* Turn off some bits but the left most one */
174  power2_page_size = power2_page_size & (power2_page_size - 1);
175  }
176  }
177 
178  power2_page_size <<= 1;
179 
180  if (power2_page_size < IO_MIN_PAGE_SIZE)
181  {
182  power2_page_size = IO_MIN_PAGE_SIZE;
183  }
184  else if (power2_page_size > IO_MAX_PAGE_SIZE)
185  {
186  power2_page_size = IO_MAX_PAGE_SIZE;
187  }
188 
189  er_set (ER_WARNING_SEVERITY, ARG_FILE_LINE, ER_DTSR_BAD_PAGESIZE, 2, page_size, power2_page_size);
190  }
191  }
192 
193  return power2_page_size;
194 }
195 
196 void
197 db_print_data (DB_TYPE type, DB_DATA * data, FILE * fd)
198 {
199  int hour, minute, second, millisecond, month, day, year;
200 
201  switch (type)
202  {
203  case DB_TYPE_SHORT:
204  fprintf (fd, "%d", data->sh);
205  break;
206 
207  case DB_TYPE_INTEGER:
208  fprintf (fd, "%d", data->i);
209  break;
210 
211  case DB_TYPE_BIGINT:
212  fprintf (fd, "%lld", (long long) data->bigint);
213  break;
214 
215  case DB_TYPE_FLOAT:
216  fprintf (fd, "%f", data->f);
217  break;
218 
219  case DB_TYPE_DOUBLE:
220  fprintf (fd, "%f", data->d);
221  break;
222 
223  case DB_TYPE_DATE:
224  db_date_decode (&data->date, &month, &day, &year);
225  fprintf (fd, "%d / %d / %d", month, day, year);
226  break;
227 
228  case DB_TYPE_TIME:
229  db_time_decode (&data->time, &hour, &minute, &second);
230  fprintf (fd, "%d:%d:%d", hour, minute, second);
231  break;
232 
233  case DB_TYPE_TIMESTAMP:
235  fprintf (fd, "%d", data->utime);
236  break;
237 
238  case DB_TYPE_TIMESTAMPTZ:
239  fprintf (fd, "%d Z:%X", data->timestamptz.timestamp, data->timestamptz.tz_id);
240  break;
241 
242  case DB_TYPE_DATETIME:
243  case DB_TYPE_DATETIMELTZ:
244  db_datetime_decode (&data->datetime, &month, &day, &year, &hour, &minute, &second, &millisecond);
245  fprintf (fd, "%d/%d/%d %d:%d:%d.%d", month, day, year, hour, minute, second, millisecond);
246  break;
247 
248  case DB_TYPE_DATETIMETZ:
249  db_datetime_decode (&(data->datetimetz.datetime), &month, &day, &year, &hour, &minute, &second, &millisecond);
250  fprintf (fd, "%d/%d/%d %d:%d:%d.%d Z:%X", month, day, year, hour, minute, second, millisecond,
251  data->datetimetz.tz_id);
252  break;
253 
254  case DB_TYPE_MONETARY:
255  fprintf (fd, "%f", data->money.amount);
256  switch (data->money.type)
257  {
258  case DB_CURRENCY_DOLLAR:
259  fprintf (fd, " dollars");
260  break;
261  case DB_CURRENCY_YEN:
262  fprintf (fd, " yens");
263  break;
264  case DB_CURRENCY_WON:
265  fprintf (fd, " wons");
266  break;
267  case DB_CURRENCY_TL:
268  fprintf (fd, " turkish lira");
269  break;
271  fprintf (fd, " pounds");
272  break;
274  fprintf (fd, " riels");
275  break;
277  fprintf (fd, " renminbi");
278  break;
280  fprintf (fd, " rupees");
281  break;
283  fprintf (fd, " rubles");
284  break;
286  fprintf (fd, " Australian dollars");
287  break;
289  fprintf (fd, " Canadian dollars");
290  break;
292  fprintf (fd, " reals");
293  break;
295  fprintf (fd, " lei");
296  break;
297  case DB_CURRENCY_EURO:
298  fprintf (fd, " euros");
299  break;
301  fprintf (fd, " Swiss francs");
302  break;
304  fprintf (fd, " Danish crowns");
305  break;
307  fprintf (fd, " Norwegian crowns");
308  break;
310  fprintf (fd, " levs");
311  break;
313  fprintf (fd, " Vietnamese dongs");
314  break;
316  fprintf (fd, " Czech crowns");
317  break;
319  fprintf (fd, " zloty");
320  break;
322  fprintf (fd, " Swedish crowns");
323  break;
325  fprintf (fd, " kunas");
326  break;
328  fprintf (fd, " dinars");
329  break;
330  default:
331  break;
332  }
333  break;
334 
335  default:
336  fprintf (fd, "Undefined");
337  break;
338  }
339 }
340 
341 int
343 {
344  char *data;
345 
346  data = (char *) db_private_alloc (NULL, size);
347  if (data == NULL)
348  {
349  return ER_FAILED;
350  }
351 
352  rec->data = data;
353  rec->area_size = size;
354 
355  return NO_ERROR;
356 }
357 
358 void
360 {
362 }
363 
364 void
365 recdes_set_data_area (RECDES * rec, char *data, int size)
366 {
367  rec->data = data;
368  rec->area_size = size;
369 }
370 
371 char *
372 oid_to_string (char *buf, int buf_size, OID * oid)
373 {
374  snprintf (buf, buf_size, "(%d|%d|%d)", oid->volid, oid->pageid, oid->slotid);
375  buf[buf_size - 1] = 0;
376  return buf;
377 }
378 
379 char *
380 vpid_to_string (char *buf, int buf_size, VPID * vpid)
381 {
382  snprintf (buf, buf_size, "(%d|%d)", vpid->volid, vpid->pageid);
383  buf[buf_size - 1] = 0;
384  return buf;
385 }
386 
387 char *
388 vfid_to_string (char *buf, int buf_size, VFID * vfid)
389 {
390  snprintf (buf, buf_size, "(%d|%d)", vfid->volid, vfid->fileid);
391  buf[buf_size - 1] = 0;
392  return buf;
393 }
394 
395 char *
396 hfid_to_string (char *buf, int buf_size, HFID * hfid)
397 {
398  snprintf (buf, buf_size, "(%d|%d|%d)", hfid->vfid.volid, hfid->vfid.fileid, hfid->hpgid);
399  buf[buf_size - 1] = 0;
400  return buf;
401 }
402 
403 char *
404 btid_to_string (char *buf, int buf_size, BTID * btid)
405 {
406  snprintf (buf, buf_size, "(%d|%d|%d)", btid->vfid.volid, btid->vfid.fileid, btid->root_pageid);
407  buf[buf_size - 1] = 0;
408  return buf;
409 }
410 
411 const char *
413 {
414  switch (ftype)
415  {
416  case PT_MIN:
417  return "MIN";
418  case PT_MAX:
419  return "MAX";
420  case PT_SUM:
421  return "SUM";
422  case PT_AVG:
423  return "AVG";
424  case PT_STDDEV:
425  return "STDDEV";
426  case PT_STDDEV_POP:
427  return "STDDEV_POP";
428  case PT_STDDEV_SAMP:
429  return "STDDEV_SAMP";
430  case PT_VARIANCE:
431  return "VARIANCE";
432  case PT_VAR_POP:
433  return "VAR_POP";
434  case PT_VAR_SAMP:
435  return "VAR_SAMP";
436  case PT_COUNT:
437  return "COUNT";
438  case PT_COUNT_STAR:
439  return "COUNT_STAR";
440  case PT_CUME_DIST:
441  return "CUME_DIST";
442  case PT_PERCENT_RANK:
443  return "PERCENT_RANK";
444  case PT_LEAD:
445  return "LEAD";
446  case PT_LAG:
447  return "LAG";
448  case PT_GROUPBY_NUM:
449  return "GROUPBY_NUM";
450  case PT_AGG_BIT_AND:
451  return "BIT_AND";
452  case PT_AGG_BIT_OR:
453  return "BIT_OR";
454  case PT_AGG_BIT_XOR:
455  return "BIT_XOR";
456  case PT_TOP_AGG_FUNC:
457  return "TOP_AGG_FUNC";
458  case PT_GROUP_CONCAT:
459  return "GROUP_CONCAT";
460  case PT_GENERIC:
461  return "GENERIC";
462  case PT_ROW_NUMBER:
463  return "ROW_NUMBER";
464  case PT_RANK:
465  return "RANK";
466  case PT_DENSE_RANK:
467  return "DENSE_RANK";
468  case PT_NTILE:
469  return "NTILE";
470  case PT_FIRST_VALUE:
471  return "FIRST_VALUE";
472  case PT_LAST_VALUE:
473  return "LAST_VALUE";
474  case PT_NTH_VALUE:
475  return "NTH_VALUE";
476  case PT_MEDIAN:
477  return "MEDIAN";
478  case PT_PERCENTILE_CONT:
479  return "PERCENTILE_CONT";
480  case PT_PERCENTILE_DISC:
481  return "PERCENTILE_DISC";
482  case PT_JSON_ARRAYAGG:
483  return "JSON_ARRAYAGG";
484  case PT_JSON_OBJECTAGG:
485  return "JSON_OBJECTAGG";
486 
487  case F_TABLE_SET:
488  return "F_TABLE_SET";
489  case F_TABLE_MULTISET:
490  return "F_TABLE_MULTISET";
491  case F_TABLE_SEQUENCE:
492  return "F_TABLE_SEQUENCE";
493  case F_TOP_TABLE_FUNC:
494  return "F_TOP_TABLE_FUNC";
495  case F_MIDXKEY:
496  return "F_MIDXKEY";
497  case F_SET:
498  return "F_SET";
499  case F_MULTISET:
500  return "F_MULTISET";
501  case F_SEQUENCE:
502  return "F_SEQUENCE";
503  case F_VID:
504  return "F_VID";
505  case F_GENERIC:
506  return "F_GENERIC";
507  case F_CLASS_OF:
508  return "F_CLASS_OF";
509  case F_INSERT_SUBSTRING:
510  return "INSERT_SUBSTRING";
511  case F_ELT:
512  return "ELT";
513  case F_BENCHMARK:
514  return "BENCHMARK";
515  case F_JSON_ARRAY:
516  return "JSON_ARRAY";
517  case F_JSON_ARRAY_APPEND:
518  return "JSON_ARRAY_APPEND";
519  case F_JSON_ARRAY_INSERT:
520  return "JSON_ARRAY_INSERT";
521  case F_JSON_CONTAINS:
522  return "JSON_CONTAINS";
524  return "JSON_CONTAINS_PATH";
525  case F_JSON_DEPTH:
526  return "JSON_DEPTH";
527  case F_JSON_EXTRACT:
528  return "JSON_EXTRACT";
530  return "JSON_GET_ALL_PATHS";
531  case F_JSON_INSERT:
532  return "JSON_INSERT";
533  case F_JSON_KEYS:
534  return "JSON_KEYS";
535  case F_JSON_LENGTH:
536  return "JSON_LENGTH";
537  case F_JSON_MERGE:
538  return "JSON_MERGE";
539  case F_JSON_MERGE_PATCH:
540  return "JSON_MERGE_PATCH";
541  case F_JSON_OBJECT:
542  return "JSON_OBJECT";
543  case F_JSON_PRETTY:
544  return "JSON_PRETTY";
545  case F_JSON_QUOTE:
546  return "JSON_QUOTE";
547  case F_JSON_REMOVE:
548  return "JSON_REMOVE";
549  case F_JSON_REPLACE:
550  return "JSON_REPLACE";
551  case F_JSON_SEARCH:
552  return "JSON_SEARCH";
553  case F_JSON_SET:
554  return "JSON_SET";
555  case F_JSON_TYPE:
556  return "JSON_TYPE";
557  case F_JSON_UNQUOTE:
558  return "JSON_UNQUOTE";
559  case F_JSON_VALID:
560  return "JSON_VALID";
561  case F_REGEXP_COUNT:
562  return "REGEXP_COUNT";
563  case F_REGEXP_INSTR:
564  return "REGEXP_INSTR";
565  case F_REGEXP_LIKE:
566  return "REGEXP_LIKE";
567  case F_REGEXP_REPLACE:
568  return "REGEXP_REPLACE";
569  case F_REGEXP_SUBSTR:
570  return "REGEXP_SUBSTR";
571  default:
572  return "***UNKNOWN***";
573  }
574 }
575 
576 const char *
578 {
579  switch (ftype)
580  {
581  case PT_MIN:
582  return "min";
583  case PT_MAX:
584  return "max";
585  case PT_SUM:
586  return "sum";
587  case PT_AVG:
588  return "avg";
589  case PT_STDDEV:
590  return "stddev";
591  case PT_STDDEV_POP:
592  return "stddev_pop";
593  case PT_STDDEV_SAMP:
594  return "stddev_samp";
595  case PT_VARIANCE:
596  return "variance";
597  case PT_VAR_POP:
598  return "var_pop";
599  case PT_VAR_SAMP:
600  return "var_samp";
601  case PT_COUNT:
602  return "count";
603  case PT_COUNT_STAR:
604  return "count";
605  case PT_CUME_DIST:
606  return "cume_dist";
607  case PT_PERCENT_RANK:
608  return "percent_rank";
609  case PT_GROUPBY_NUM:
610  return "groupby_num";
611  case PT_AGG_BIT_AND:
612  return "bit_and";
613  case PT_AGG_BIT_OR:
614  return "bit_or";
615  case PT_AGG_BIT_XOR:
616  return "bit_xor";
617  case PT_GROUP_CONCAT:
618  return "group_concat";
619  case PT_ROW_NUMBER:
620  return "row_number";
621  case PT_RANK:
622  return "rank";
623  case PT_DENSE_RANK:
624  return "dense_rank";
625  case PT_LEAD:
626  return "lead";
627  case PT_LAG:
628  return "lag";
629  case PT_NTILE:
630  return "ntile";
631  case PT_FIRST_VALUE:
632  return "first_value";
633  case PT_LAST_VALUE:
634  return "last_value";
635  case PT_NTH_VALUE:
636  return "nth_value";
637  case PT_MEDIAN:
638  return "median";
639  case PT_PERCENTILE_CONT:
640  return "percentile_cont";
641  case PT_PERCENTILE_DISC:
642  return "percentile_disc";
643  case PT_JSON_ARRAYAGG:
644  return "json_arrayagg";
645  case PT_JSON_OBJECTAGG:
646  return "json_objectagg";
647 
648  case F_SEQUENCE:
649  return "sequence";
650  case F_SET:
651  return "set";
652  case F_MULTISET:
653  return "multiset";
654 
655  case F_TABLE_SEQUENCE:
656  return "sequence";
657  case F_TABLE_SET:
658  return "set";
659  case F_TABLE_MULTISET:
660  return "multiset";
661  case F_VID:
662  return "vid"; /* internally generated only, vid doesn't parse */
663  case F_CLASS_OF:
664  return "class";
665  case F_INSERT_SUBSTRING:
666  return "insert";
667  case F_ELT:
668  return "elt";
669  case F_BENCHMARK:
670  return "benchmark";
671  case F_JSON_ARRAY:
672  return "json_array";
673  case F_JSON_ARRAY_APPEND:
674  return "json_array_append";
675  case F_JSON_ARRAY_INSERT:
676  return "json_array_insert";
677  case F_JSON_CONTAINS:
678  return "json_contains";
680  return "json_contains_path";
681  case F_JSON_DEPTH:
682  return "json_depth";
683  case F_JSON_EXTRACT:
684  return "json_extract";
686  return "json_get_all_paths";
687  case F_JSON_INSERT:
688  return "json_insert";
689  case F_JSON_KEYS:
690  return "json_keys";
691  case F_JSON_LENGTH:
692  return "json_length";
693  case F_JSON_MERGE:
694  return "json_merge";
695  case F_JSON_MERGE_PATCH:
696  return "json_merge_patch";
697  case F_JSON_OBJECT:
698  return "json_object";
699  case F_JSON_PRETTY:
700  return "json_pretty";
701  case F_JSON_QUOTE:
702  return "json_quote";
703  case F_JSON_REMOVE:
704  return "json_remove";
705  case F_JSON_REPLACE:
706  return "json_replace";
707  case F_JSON_SEARCH:
708  return "json_search";
709  case F_JSON_SET:
710  return "json_set";
711  case F_JSON_TYPE:
712  return "json_type";
713  case F_JSON_UNQUOTE:
714  return "json_unquote";
715  case F_JSON_VALID:
716  return "json_valid";
717  case F_REGEXP_COUNT:
718  return "regexp_count";
719  case F_REGEXP_INSTR:
720  return "regexp_instr";
721  case F_REGEXP_LIKE:
722  return "regexp_like";
723  case F_REGEXP_REPLACE:
724  return "regexp_replace";
725  case F_REGEXP_SUBSTR:
726  return "regexp_substr";
727  default:
728  return "unknown function";
729  }
730 }
DB_TIME time
Definition: dbtype_def.h:1056
int page_size
Definition: unloaddb.c:52
#define NO_ERROR
Definition: error_code.h:46
int area_size
short sh
Definition: dbtype_def.h:1050
void recdes_set_data_area(RECDES *rec, char *data, int size)
DB_TIMESTAMP timestamp
Definition: dbtype_def.h:766
DB_TYPE
Definition: dbtype_def.h:670
#define ER_FAILED
Definition: error_code.h:47
int db_datetime_decode(const DB_DATETIME *datetime, int *month, int *day, int *year, int *hour, int *minute, int *second, int *millisecond)
Definition: db_date.c:4574
DB_DATETIME datetime
Definition: dbtype_def.h:1060
FUNC_TYPE
char * data
int32_t pageid
Definition: dbtype_def.h:879
INT32 root_pageid
INT32 hpgid
#define IS_POWER_OF_2(x)
PGLENGTH db_io_page_size(void)
#define ER_DTSR_BAD_PAGESIZE
Definition: error_code.h:758
char * vpid_to_string(char *buf, int buf_size, VPID *vpid)
DB_BIGINT bigint
Definition: dbtype_def.h:1051
void er_set(int severity, const char *file_name, const int line_no, int err_id, int num_args,...)
DB_TIMESTAMP utime
Definition: dbtype_def.h:1058
#define assert(x)
int32_t fileid
Definition: dbtype_def.h:886
char * btid_to_string(char *buf, int buf_size, BTID *btid)
static PGLENGTH db_Log_page_size
DB_DATETIME datetime
Definition: dbtype_def.h:783
PGLENGTH db_page_size(void)
#define IO_MIN_PAGE_SIZE
short volid
Definition: dbtype_def.h:880
VFID vfid
#define NULL
Definition: freelistheap.h:34
DB_CURRENCY type
Definition: dbtype_def.h:832
PGLENGTH db_network_page_size(void)
DB_DATE date
Definition: dbtype_def.h:1057
VFID vfid
PGLENGTH db_log_page_size(void)
DB_TIMESTAMPTZ timestamptz
Definition: dbtype_def.h:1059
char * hfid_to_string(char *buf, int buf_size, HFID *hfid)
#define db_private_free_and_init(thrd, ptr)
Definition: memory_alloc.h:141
#define db_private_alloc(thrd, size)
Definition: memory_alloc.h:227
#define IO_DEFAULT_PAGE_SIZE
#define ARG_FILE_LINE
Definition: error_manager.h:44
INT16 PGLENGTH
const char * fcode_get_lowercase_name(FUNC_TYPE ftype)
static PGLENGTH find_valid_page_size(PGLENGTH page_size)
static PGLENGTH db_Io_page_size
void recdes_free_data_area(RECDES *rec)
#define RESERVED_SIZE_IN_PAGE
void db_date_decode(const DB_DATE *date, int *monthp, int *dayp, int *yearp)
Definition: db_date.c:338
#define IO_MAX_PAGE_SIZE
short volid
Definition: dbtype_def.h:887
int recdes_allocate_data_area(RECDES *rec, int size)
char * oid_to_string(char *buf, int buf_size, OID *oid)
void db_time_decode(DB_TIME *timeval, int *hourp, int *minutep, int *secondp)
Definition: db_date.c:432
char * vfid_to_string(char *buf, int buf_size, VFID *vfid)
double amount
Definition: dbtype_def.h:831
void db_print_data(DB_TYPE type, DB_DATA *data, FILE *fd)
float f
Definition: dbtype_def.h:1052
double d
Definition: dbtype_def.h:1053
static PGLENGTH db_User_page_size
int db_set_page_size(PGLENGTH io_page_size, PGLENGTH log_page_size)
const char * fcode_get_uppercase_name(FUNC_TYPE ftype)
DB_MONETARY money
Definition: dbtype_def.h:1062
DB_DATETIMETZ datetimetz
Definition: dbtype_def.h:1061