File transform.c¶
File List > cubrid > src > object > transform.c
Go to the documentation of this file
/*
* Copyright 2008 Search Solution Corporation
* Copyright 2016 CUBRID Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/*
* transform.c: Definition of the meta-class information for class storage
* and catalog entries.
*/
#ident "$Id$"
#include "config.h"
#include <stdlib.h>
#include "error_manager.h"
#include "object_representation.h"
#include "object_domain.h"
#include "object_primitive.h"
#include "transform.h"
/* server side only */
#if !defined(CS_MODE)
#include "intl_support.h"
#include "language_support.h"
#include "system_catalog.h"
#endif /* !CS_MODE */
// XXX: SHOULD BE THE LAST INCLUDE HEADER
#include "memory_wrapper.hpp"
/*
* These define the structure of the meta class objects
*
* IMPORTANT
* If you modify either the META_ATTRIBUTE or META_CLASS definitions
* here, make sure you adjust the associated ORC_ constants in or.h.
* Of particular importance are ORC_CLASS_VAR_ATT_COUNT and
* ORC_ATT_VAR_ATT_COUNT.
* If you don't know what these are, you shouldn't be making this change.
*
*/
/* DOMAIN */
static META_ATTRIBUTE domain_atts[] = {
{"type", DB_TYPE_INTEGER, 1, NULL, 0, 0, NULL},
{"precision", DB_TYPE_INTEGER, 1, NULL, 0, 0, NULL},
{"scale", DB_TYPE_INTEGER, 1, NULL, 0, 0, NULL},
{"codeset", DB_TYPE_INTEGER, 1, NULL, 0, 0, NULL},
{"collation_id", DB_TYPE_INTEGER, 1, NULL, 0, 0, NULL},
{"class", DB_TYPE_OBJECT, 1, META_CLASS_NAME, 0, 0, NULL},
{"enumeration", DB_TYPE_SET, 1, NULL, 0, 0, NULL},
{"set_domain", DB_TYPE_SET, 1, META_DOMAIN_NAME, 1, 0, NULL},
{"json_schema", DB_TYPE_STRING, 1, NULL, 0, 0, NULL},
{NULL, (DB_TYPE) 0, 0, NULL, 0, 0, NULL}
};
META_CLASS tf_Metaclass_domain = { META_DOMAIN_NAME, {META_PAGE_DOMAIN, 0, META_VOLUME}, 0, 0, 0,
&domain_atts[0]
};
/* ATTRIBUTE */
static META_ATTRIBUTE att_atts[] = {
{"id", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"type", DB_TYPE_INTEGER, 1, NULL, 0, 0, NULL},
{"offset", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"order", DB_TYPE_INTEGER, 1, NULL, 0, 0, NULL},
{"class", DB_TYPE_OBJECT, 1, META_CLASS_NAME, 0, 0, NULL},
{"flags", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"index_fileid", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"index_root_pageid", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"index_volid_key", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"name", DB_TYPE_STRING, 1, NULL, 0, 0, NULL},
{"value", DB_TYPE_VARIABLE, 1, NULL, 0, 0, NULL},
{"original_value", DB_TYPE_VARIABLE, 0, NULL, 0, 0, NULL},
{"domain", DB_TYPE_SET, 1, META_DOMAIN_NAME, 0, 0, NULL},
{"triggers", DB_TYPE_SET, 1, "object", 0, 0, NULL},
{"properties", DB_TYPE_SET, 0, NULL, 0, 0, NULL},
{"comment", DB_TYPE_STRING, 1, NULL, 0, 0, NULL},
{NULL, (DB_TYPE) 0, 0, NULL, 0, 0, NULL}
};
META_CLASS tf_Metaclass_attribute = { META_ATTRIBUTE_NAME, {META_PAGE_ATTRIBUTE, 0, META_VOLUME}, 0, 0, 0,
&att_atts[0]
};
/* METHOD ARGUMENT */
static META_ATTRIBUTE metharg_atts[] = {
{"type", DB_TYPE_INTEGER, 1, NULL, 0, 0, NULL},
{"index", DB_TYPE_INTEGER, 1, NULL, 0, 0, NULL},
{"domain", DB_TYPE_SET, 1, META_DOMAIN_NAME, 1, 0, NULL},
{NULL, (DB_TYPE) 0, 0, NULL, 0, 0, NULL}
};
META_CLASS tf_Metaclass_metharg = { META_METHARG_NAME, {META_PAGE_METHARG, 0, META_VOLUME}, 0, 0, 0,
&metharg_atts[0]
};
/* METHOD SIGNATURE */
static META_ATTRIBUTE methsig_atts[] = {
{"arg_count", DB_TYPE_INTEGER, 1, NULL, 0, 0, NULL},
{"function_name", DB_TYPE_STRING, 1, NULL, 0, 0, NULL},
{"string_def", DB_TYPE_STRING, 0, NULL, 0, 0, NULL},
{"return_value", DB_TYPE_SET, 1, META_METHARG_NAME, 1, 0, NULL},
{"arguments", DB_TYPE_SET, 1, META_METHARG_NAME, 1, 0, NULL},
{NULL, (DB_TYPE) 0, 0, NULL, 0, 0, NULL}
};
META_CLASS tf_Metaclass_methsig = { META_METHSIG_NAME, {META_PAGE_METHSIG, 0, META_VOLUME}, 0, 0, 0,
&methsig_atts[0]
};
/* METHOD */
static META_ATTRIBUTE meth_atts[] = {
{"class", DB_TYPE_OBJECT, 1, META_CLASS_NAME, 0, 0, NULL},
{"id", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"name", DB_TYPE_STRING, 1, NULL, 0, 0, NULL},
{"signatures", DB_TYPE_SET, 1, META_METHSIG_NAME, 1, 0, NULL},
{"properties", DB_TYPE_SET, 0, NULL, 0, 0, NULL},
{NULL, (DB_TYPE) 0, 0, NULL, 0, 0, NULL}
};
META_CLASS tf_Metaclass_method = { META_METHOD_NAME, {META_PAGE_METHOD, 0, META_VOLUME}, 0, 0, 0,
&meth_atts[0]
};
/* METHOD FILE */
static META_ATTRIBUTE methfile_atts[] = {
{"class", DB_TYPE_OBJECT, 1, META_CLASS_NAME, 0, 0, NULL},
{"name", DB_TYPE_STRING, 1, NULL, 0, 0, NULL},
{"properties", DB_TYPE_SET, 0, NULL, 0, 0, NULL},
{NULL, (DB_TYPE) 0, 0, NULL, 0, 0, NULL}
};
META_CLASS tf_Metaclass_methfile = { META_METHFILE_NAME, {META_PAGE_METHFILE, 0, META_VOLUME}, 0, 0, 0,
&methfile_atts[0]
};
/* RESOLUTION */
static META_ATTRIBUTE res_atts[] = {
{"class", DB_TYPE_OBJECT, 1, META_CLASS_NAME, 0, 0, NULL},
{"type", DB_TYPE_INTEGER, 1, NULL, 0, 0, NULL},
{"name", DB_TYPE_STRING, 1, NULL, 0, 0, NULL},
{"alias", DB_TYPE_STRING, 1, NULL, 0, 0, NULL},
{NULL, (DB_TYPE) 0, 0, NULL, 0, 0, NULL}
};
META_CLASS tf_Metaclass_resolution = { META_RESOLUTION_NAME, {META_PAGE_RESOLUTION, 0, META_VOLUME}, 0, 0, 0,
&res_atts[0]
};
/* REPATTRIBUTE */
static META_ATTRIBUTE repatt_atts[] = {
{"id", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"type", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"domain", DB_TYPE_SET, 1, META_DOMAIN_NAME, 0, 0, NULL},
{NULL, (DB_TYPE) 0, 0, NULL, 0, 0, NULL}
};
META_CLASS tf_Metaclass_repattribute = { META_REPATTRIBUTE_NAME, {META_PAGE_REPATTRIBUTE, 0, META_VOLUME}, 0, 0, 0,
&repatt_atts[0]
};
/* REPRESENTATION */
static META_ATTRIBUTE rep_atts[] = {
{"id", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"fixed_count", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"variable_count", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"fixed_size", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"attributes", DB_TYPE_SET, 0, META_REPATTRIBUTE_NAME, 1, 0, NULL},
{"properties", DB_TYPE_SET, 0, NULL, 0, 0, NULL},
{NULL, (DB_TYPE) 0, 0, NULL, 0, 0, NULL}
};
META_CLASS tf_Metaclass_representation = { META_REPRESENTATION_NAME, {META_PAGE_REPRESENTATION, 0, META_VOLUME}, 0,
0, 0, &rep_atts[0]
};
/* CLASS */
static META_ATTRIBUTE class_atts[] = {
{"attid_counter", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"methid_counter", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"representation_directory", DB_TYPE_OBJECT, 0, "object", 0, 0, NULL},
{"heap_fileid", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"heap_volid", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"heap_pageid", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"fixed_count", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"variable_count", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"fixed_size", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"attribute_count", DB_TYPE_INTEGER, 1, NULL, 0, 0, NULL},
{"object_size", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"shared_count", DB_TYPE_INTEGER, 1, NULL, 0, 0, NULL},
{"method_count", DB_TYPE_INTEGER, 1, NULL, 0, 0, NULL},
{"class_method_count", DB_TYPE_INTEGER, 1, NULL, 0, 0, NULL},
{"class_att_count", DB_TYPE_INTEGER, 1, NULL, 0, 0, NULL},
{"flags", DB_TYPE_INTEGER, 1, NULL, 0, 0, NULL},
{"class_type", DB_TYPE_INTEGER, 1, NULL, 0, 0, NULL},
{"owner", DB_TYPE_OBJECT, 1, "object", 0, 0, NULL},
{"collation_id", DB_TYPE_INTEGER, 1, NULL, 0, 0, NULL},
{"tde_encryption_algorithm", DB_TYPE_INTEGER, 1, NULL, 0, 0, NULL},
{"name", DB_TYPE_STRING, 1, NULL, 0, 0, NULL},
{"loader_commands", DB_TYPE_STRING, 1, NULL, 0, 0, NULL},
{"representations", DB_TYPE_SET, 0, META_REPRESENTATION_NAME, 1, 0, NULL},
{"sub_classes", DB_TYPE_SET, 1, META_CLASS_NAME, 0, 0, NULL},
{"super_classes", DB_TYPE_SET, 1, META_CLASS_NAME, 0, 0, NULL},
{"attributes", DB_TYPE_SET, 1, META_ATTRIBUTE_NAME, 1, 0, NULL},
{"shared_attributes", DB_TYPE_SET, 1, META_ATTRIBUTE_NAME, 1, 0, NULL},
{"class_attributes", DB_TYPE_SET, 1, META_ATTRIBUTE_NAME, 1, 0, NULL},
{"methods", DB_TYPE_SET, 1, META_METHOD_NAME, 1, 0, NULL},
{"class_methods", DB_TYPE_SET, 1, META_METHOD_NAME, 1, 0, NULL},
{"method_files", DB_TYPE_SET, 1, META_METHFILE_NAME, 1, 0, NULL},
{"resolutions", DB_TYPE_SET, 1, META_RESOLUTION_NAME, 1, 0, NULL},
{"query_spec", DB_TYPE_SET, 1, META_QUERY_SPEC_NAME, 1, 0, NULL},
{"triggers", DB_TYPE_SET, 1, "object", 0, 0, NULL},
{"properties", DB_TYPE_SET, 0, NULL, 0, 0, NULL},
{"comment", DB_TYPE_STRING, 1, NULL, 0, 0, NULL},
{"partition", DB_TYPE_SET, 1, META_PARTITION_NAME, 1, 0, NULL},
{NULL, (DB_TYPE) 0, 0, NULL, 0, 0, NULL}
};
META_CLASS tf_Metaclass_class = { META_CLASS_NAME, {META_PAGE_CLASS, 0, META_VOLUME}, 0, 0, 0,
&class_atts[0]
};
/* QUERY_SPEC */
static META_ATTRIBUTE query_spec_atts[] = {
{"specification", DB_TYPE_STRING, 1, NULL, 0, 0, NULL},
{NULL, (DB_TYPE) 0, 0, NULL, 0, 0, NULL}
};
META_CLASS tf_Metaclass_query_spec = { META_QUERY_SPEC_NAME, {META_PAGE_QUERY_SPEC, 0, META_VOLUME}, 0, 0, 0,
&query_spec_atts[0]
};
/* PARTITION */
static META_ATTRIBUTE partition_atts[] = {
{"ptype", DB_TYPE_INTEGER, 1, NULL, 0, 0, NULL},
{"class_partition_type", DB_TYPE_INTEGER, 1, NULL, 0, 0, NULL},
{"pname", DB_TYPE_STRING, 1, NULL, 0, 0, NULL},
{"pexpr", DB_TYPE_STRING, 1, NULL, 0, 0, NULL},
{"pvalues", DB_TYPE_SEQUENCE, 0, NULL, 0, 0, NULL},
{"comment", DB_TYPE_STRING, 1, NULL, 0, 0, NULL},
{NULL, (DB_TYPE) 0, 0, NULL, 0, 0, NULL}
};
META_CLASS tf_Metaclass_partition = { META_PARTITION_NAME, {META_PAGE_PARTITION, 0, META_VOLUME}, 0, 0, 0,
&partition_atts[0]
};
/* ROOT */
static META_ATTRIBUTE root_atts[] = {
{"heap_fileid", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"heap_volid", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"heap_pageid", DB_TYPE_INTEGER, 0, NULL, 0, 0, NULL},
{"name", DB_TYPE_STRING, 0, NULL, 0, 0, NULL},
{NULL, (DB_TYPE) 0, 0, NULL, 0, 0, NULL}
};
META_CLASS tf_Metaclass_root = { "rootclass", {META_PAGE_ROOT, 0, META_VOLUME}, 0, 0, 0, &root_atts[0] };
/*
* Meta_classes
* An array of pointers to each meta class. This is used to reference
* the class structures after they have been compiled.
*/
static META_CLASS *Meta_classes[] = {
&tf_Metaclass_root,
&tf_Metaclass_class,
&tf_Metaclass_representation,
&tf_Metaclass_resolution,
&tf_Metaclass_methfile,
&tf_Metaclass_method,
&tf_Metaclass_methsig,
&tf_Metaclass_metharg,
&tf_Metaclass_attribute,
&tf_Metaclass_domain,
&tf_Metaclass_repattribute,
&tf_Metaclass_query_spec,
&tf_Metaclass_partition,
NULL
};
#if !defined(CS_MODE)
static CT_ATTR ct_class_atts[] = {
{"class_of", NULL_ATTRID, DB_TYPE_OBJECT},
{"inst_attr_count", NULL_ATTRID, DB_TYPE_INTEGER},
{"shared_attr_count", NULL_ATTRID, DB_TYPE_INTEGER},
{"inst_meth_count", NULL_ATTRID, DB_TYPE_INTEGER},
{"class_meth_count", NULL_ATTRID, DB_TYPE_INTEGER},
{"class_attr_count", NULL_ATTRID, DB_TYPE_INTEGER},
{"is_system_class", NULL_ATTRID, DB_TYPE_INTEGER},
{"class_type", NULL_ATTRID, DB_TYPE_INTEGER},
{"owner", NULL_ATTRID, DB_TYPE_OBJECT},
{"collation_id", NULL_ATTRID, DB_TYPE_INTEGER},
{"tde_algorithm", NULL_ATTRID, DB_TYPE_INTEGER},
{"statistics_strategy", NULL_ATTRID, DB_TYPE_INTEGER},
{"flags", NULL_ATTRID, DB_TYPE_INTEGER},
{"created_time", NULL_ATTRID, DB_TYPE_DATETIME},
{"updated_time", NULL_ATTRID, DB_TYPE_DATETIME},
{"checked_time", NULL_ATTRID, DB_TYPE_DATETIME},
{"unique_name", NULL_ATTRID, DB_TYPE_VARCHAR},
{"class_name", NULL_ATTRID, DB_TYPE_VARCHAR},
{"sub_classes", NULL_ATTRID, DB_TYPE_SEQUENCE},
{"super_classes", NULL_ATTRID, DB_TYPE_SEQUENCE},
{"inst_attrs", NULL_ATTRID, DB_TYPE_SEQUENCE},
{"shared_attrs", NULL_ATTRID, DB_TYPE_SEQUENCE},
{"class_attrs", NULL_ATTRID, DB_TYPE_SEQUENCE},
{"inst_meths", NULL_ATTRID, DB_TYPE_SEQUENCE},
{"class_meths", NULL_ATTRID, DB_TYPE_SEQUENCE},
{"meth_files", NULL_ATTRID, DB_TYPE_SEQUENCE},
{"query_specs", NULL_ATTRID, DB_TYPE_SEQUENCE},
{"indexes", NULL_ATTRID, DB_TYPE_SEQUENCE},
{"comment", NULL_ATTRID, DB_TYPE_VARCHAR},
{"partition", NULL_ATTRID, DB_TYPE_SEQUENCE}
};
static CT_ATTR ct_attribute_atts[] = {
{"class_of", NULL_ATTRID, DB_TYPE_OBJECT},
{"attr_name", NULL_ATTRID, DB_TYPE_VARCHAR},
{"attr_type", NULL_ATTRID, DB_TYPE_INTEGER},
{"from_attr_name", NULL_ATTRID, DB_TYPE_VARCHAR},
{"data_type", NULL_ATTRID, DB_TYPE_INTEGER},
{"def_order", NULL_ATTRID, DB_TYPE_INTEGER},
{"from_class_of", NULL_ATTRID, DB_TYPE_OBJECT},
{"is_nullable", NULL_ATTRID, DB_TYPE_INTEGER},
{"default_value", NULL_ATTRID, DB_TYPE_VARCHAR},
{"domains", NULL_ATTRID, DB_TYPE_SEQUENCE},
{"comment", NULL_ATTRID, DB_TYPE_VARCHAR}
};
static CT_ATTR ct_attrid_atts[] = {
{"id", NULL_ATTRID, DB_TYPE_INTEGER},
{"name", NULL_ATTRID, DB_TYPE_VARCHAR}
};
static CT_ATTR ct_domain_atts[] = {
{"object_of", NULL_ATTRID, DB_TYPE_OBJECT},
{"data_type", NULL_ATTRID, DB_TYPE_INTEGER},
{"prec", NULL_ATTRID, DB_TYPE_INTEGER},
{"scale", NULL_ATTRID, DB_TYPE_INTEGER},
{"code_set", NULL_ATTRID, DB_TYPE_INTEGER},
{"collation_id", NULL_ATTRID, DB_TYPE_INTEGER},
{"class_of", NULL_ATTRID, DB_TYPE_OBJECT},
{"enumeration", NULL_ATTRID, DB_TYPE_SEQUENCE},
{"set_domains", NULL_ATTRID, DB_TYPE_SEQUENCE},
{"json_schema", NULL_ATTRID, DB_TYPE_STRING}
};
static CT_ATTR ct_method_atts[] = {
{"class_of", NULL_ATTRID, DB_TYPE_OBJECT},
{"meth_name", NULL_ATTRID, DB_TYPE_VARCHAR},
{"meth_type", NULL_ATTRID, DB_TYPE_INTEGER},
{"from_meth_name", NULL_ATTRID, DB_TYPE_VARCHAR},
{"from_class_of", NULL_ATTRID, DB_TYPE_OBJECT},
{"signatures", NULL_ATTRID, DB_TYPE_SEQUENCE}
};
static CT_ATTR ct_methsig_atts[] = {
{"meth_of", NULL_ATTRID, DB_TYPE_OBJECT},
{"arg_count", NULL_ATTRID, DB_TYPE_INTEGER},
{"func_name", NULL_ATTRID, DB_TYPE_VARCHAR},
{"return_value", NULL_ATTRID, DB_TYPE_SEQUENCE},
{"arguments", NULL_ATTRID, DB_TYPE_SEQUENCE}
};
static CT_ATTR ct_metharg_atts[] = {
{"meth_sig_of", NULL_ATTRID, DB_TYPE_OBJECT},
{"data_type", NULL_ATTRID, DB_TYPE_INTEGER},
{"index_of", NULL_ATTRID, DB_TYPE_INTEGER},
{"domains", NULL_ATTRID, DB_TYPE_SEQUENCE}
};
static CT_ATTR ct_methfile_atts[] = {
{"class_of", NULL_ATTRID, DB_TYPE_OBJECT},
{"from_class_of", NULL_ATTRID, DB_TYPE_OBJECT},
{"path_name", NULL_ATTRID, DB_TYPE_VARCHAR}
};
static CT_ATTR ct_queryspec_atts[] = {
{"class_of", NULL_ATTRID, DB_TYPE_OBJECT},
{"spec", NULL_ATTRID, DB_TYPE_VARCHAR}
};
static CT_ATTR ct_resolution_atts[] = {
{"class_of", NULL_ATTRID, DB_TYPE_OBJECT},
{"alias", NULL_ATTRID, DB_TYPE_VARCHAR},
{"namespace", NULL_ATTRID, DB_TYPE_INTEGER},
{"res_name", NULL_ATTRID, DB_TYPE_VARCHAR}
};
static CT_ATTR ct_index_atts[] = {
{"class_of", NULL_ATTRID, DB_TYPE_OBJECT},
{"index_name", NULL_ATTRID, DB_TYPE_VARCHAR},
{"is_unique", NULL_ATTRID, DB_TYPE_INTEGER},
{"key_count", NULL_ATTRID, DB_TYPE_INTEGER},
{"key_attrs", NULL_ATTRID, DB_TYPE_SEQUENCE},
{"is_reverse", NULL_ATTRID, DB_TYPE_INTEGER},
{"is_primary_key", NULL_ATTRID, DB_TYPE_INTEGER},
{"is_foreign_key", NULL_ATTRID, DB_TYPE_INTEGER},
{"filter_expression", NULL_ATTRID, DB_TYPE_VARCHAR},
{"have_function", NULL_ATTRID, DB_TYPE_INTEGER},
{"status", NULL_ATTRID, DB_TYPE_INTEGER},
{"referential_index", NULL_ATTRID, DB_TYPE_OBJECT},
{"delete_rule", NULL_ATTRID, DB_TYPE_INTEGER},
{"update_rule", NULL_ATTRID, DB_TYPE_INTEGER},
{"referential_match_option", NULL_ATTRID, DB_TYPE_INTEGER},
{"index_type", NULL_ATTRID, DB_TYPE_INTEGER},
{"options", NULL_ATTRID, DB_TYPE_INTEGER},
{"comment", NULL_ATTRID, DB_TYPE_VARCHAR},
{"created_time", NULL_ATTRID, DB_TYPE_DATETIME},
{"updated_time", NULL_ATTRID, DB_TYPE_DATETIME},
};
static CT_ATTR ct_indexkey_atts[] = {
{"index_of", NULL_ATTRID, DB_TYPE_OBJECT},
{"key_attr_name", NULL_ATTRID, DB_TYPE_VARCHAR},
{"key_order", NULL_ATTRID, DB_TYPE_INTEGER},
{"asc_desc", NULL_ATTRID, DB_TYPE_INTEGER},
{"key_prefix_length", NULL_ATTRID, DB_TYPE_INTEGER},
{"func", NULL_ATTRID, DB_TYPE_VARCHAR}
};
static CT_ATTR ct_partition_atts[] = {
{"class_of", NULL_ATTRID, DB_TYPE_OBJECT},
{"ptype", NULL_ATTRID, DB_TYPE_INTEGER},
{"class_partition_type", NULL_ATTRID, DB_TYPE_INTEGER},
{"pname", NULL_ATTRID, DB_TYPE_VARCHAR},
{"pexpr", NULL_ATTRID, DB_TYPE_VARCHAR},
{"pvalues", NULL_ATTRID, DB_TYPE_SEQUENCE},
{"comment", NULL_ATTRID, DB_TYPE_VARCHAR}
};
CT_CLASS ct_Class = {
CT_CLASS_NAME,
OID_INITIALIZER,
(sizeof (ct_class_atts) / sizeof (ct_class_atts[0])),
ct_class_atts
};
CT_CLASS ct_Attribute = {
CT_ATTRIBUTE_NAME,
OID_INITIALIZER,
(sizeof (ct_attribute_atts) / sizeof (ct_attribute_atts[0])),
ct_attribute_atts
};
CT_CLASS ct_Attrid = {
NULL,
OID_INITIALIZER,
(sizeof (ct_attrid_atts) / sizeof (ct_attrid_atts[0])),
ct_attrid_atts
};
CT_CLASS ct_Domain = {
CT_DOMAIN_NAME,
OID_INITIALIZER,
(sizeof (ct_domain_atts) / sizeof (ct_domain_atts[0])),
ct_domain_atts
};
CT_CLASS ct_Method = {
CT_METHOD_NAME,
OID_INITIALIZER,
(sizeof (ct_method_atts) / sizeof (ct_method_atts[0])),
ct_method_atts
};
CT_CLASS ct_Methsig = {
CT_METHSIG_NAME,
OID_INITIALIZER,
(sizeof (ct_methsig_atts) / sizeof (ct_methsig_atts[0])),
ct_methsig_atts
};
CT_CLASS ct_Metharg = {
CT_METHARG_NAME,
OID_INITIALIZER,
(sizeof (ct_metharg_atts) / sizeof (ct_metharg_atts[0])),
ct_metharg_atts
};
CT_CLASS ct_Methfile = {
CT_METHFILE_NAME,
OID_INITIALIZER,
(sizeof (ct_methfile_atts) / sizeof (ct_methfile_atts[0])),
ct_methfile_atts
};
CT_CLASS ct_Queryspec = {
CT_QUERYSPEC_NAME,
OID_INITIALIZER,
(sizeof (ct_queryspec_atts) / sizeof (ct_queryspec_atts[0])),
ct_queryspec_atts
};
CT_CLASS ct_Partition = {
CT_PARTITION_NAME,
OID_INITIALIZER,
(sizeof (ct_partition_atts) / sizeof (ct_partition_atts[0])),
ct_partition_atts
};
CT_CLASS ct_Resolution = {
NULL,
OID_INITIALIZER,
(sizeof (ct_resolution_atts) / sizeof (ct_resolution_atts[0])),
ct_resolution_atts
};
CT_CLASS ct_Index = {
CT_INDEX_NAME,
OID_INITIALIZER,
(sizeof (ct_index_atts) / sizeof (ct_index_atts[0])),
ct_index_atts
};
CT_CLASS ct_Indexkey = {
CT_INDEXKEY_NAME,
OID_INITIALIZER,
(sizeof (ct_indexkey_atts) / sizeof (ct_indexkey_atts[0])),
ct_indexkey_atts
};
CT_CLASS *ct_Classes[] = {
&ct_Class,
&ct_Attribute,
&ct_Domain,
&ct_Method,
&ct_Methsig,
&ct_Metharg,
&ct_Methfile,
&ct_Queryspec,
&ct_Index,
&ct_Indexkey,
&ct_Partition,
NULL
};
bool
tf_is_catalog_class (OID * class_oid)
{
int c;
for (c = 0; ct_Classes[c] != NULL; c++)
{
if (OID_EQ (&ct_Classes[c]->cc_classoid, class_oid))
{
return true;
}
}
return false;
}
#endif /* !CS_MODE */
/*
* tf_compile_meta_classes - passes over the static meta class definitions
* and fills in the missing fields that are too error prone to keep
* calculating by hand.
* return: void
* Note:
* Once this becomes reasonably static, this could be statically coded again.
* This is only used on the client but it won't hurt anything to have it on
* the server as well.
*/
void
tf_compile_meta_classes ()
{
META_CLASS *class_;
META_ATTRIBUTE *att;
TP_DOMAIN *domain;
int c, i;
for (c = 0; Meta_classes[c] != NULL; c++)
{
class_ = Meta_classes[c];
class_->mc_n_variable = class_->mc_fixed_size = 0;
for (i = 0; class_->mc_atts[i].ma_name != NULL; i++)
{
att = &class_->mc_atts[i];
att->ma_id = i;
if (pr_is_variable_type (att->ma_type))
{
class_->mc_n_variable++;
}
else if (class_->mc_n_variable)
{
/*
* can't have fixed width attributes AFTER variable width
* attributes
*/
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_TF_INVALID_METACLASS, 0);
}
else
{
/*
* need a domain for size calculations, since we don't use
* any parameterized types this isn't necessary but we still must
* have it to call tp_domain_isk_size().
*/
domain = tp_domain_resolve_default (att->ma_type);
class_->mc_fixed_size += tp_domain_disk_size (domain);
}
}
}
}
#if !defined(CS_MODE)
/*
* tf_install_meta_classes - dummy function
* return: NO_ERROR
* Note:
* This is called during database formatting and generates the catalog
* entries for all the meta classes.
*/
int
tf_install_meta_classes ()
{
/*
* no longer making catalog entries, eventually build the meta-class object
* here
*/
return NO_ERROR;
}
#endif /* CS_MODE */