1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
|
/*
* $Id$
*
* This file is part of the OpenLink Software Virtuoso Open-Source (VOS)
* project.
*
* Copyright (C) 1998-2012 OpenLink Software
*
* This project is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; only version 2 of the License, dated June 1991.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
#define UST struct udt_parse_tree_s
typedef struct udt_parse_tree_s
{
ptrlong type;
union
{
struct
{
caddr_t name;
caddr_t parent;
UST *ext_def;
UST *representation;
UST *options;
UST **methods;
}
type;
struct
{
ptrlong language;
caddr_t name;
caddr_t type;
}
ext_def;
struct
{
caddr_t name;
ST *data_type;
ST *ref_scope_check;
caddr_t deflt;
ST *collate;
UST *ext_def;
UST *soap_def;
}
member;
struct
{
ptrlong final;
}
final;
struct
{
ST *type;
}
ref;
struct
{
ptrlong to_src;
caddr_t function;
}
refcast;
struct
{
ptrlong type;
caddr_t name;
ST **parms;
ST *ret_type;
caddr_t specific_name;
}
method;
struct
{
ptrlong override;
UST *method;
ptrlong self_mask;
UST **props;
}
method_def;
struct
{
ptrlong specific;
ptrlong type;
caddr_t name;
ST **parms;
ST *ret_type;
caddr_t type_name;
ST *code;
}
method_decl;
struct
{
caddr_t name;
ptrlong drop_behaviour;
}
drop_udt;
struct
{
caddr_t type;
caddr_t name;
}
soap_def;
struct
{
caddr_t type;
UST* action;
}
alter;
struct
{
UST *def;
}
member_add;
struct
{
caddr_t name;
ptrlong behaviour;
}
member_drop;
struct
{
UST *spec;
}
method_add;
struct
{
UST *spec;
ptrlong behaviour;
}
method_drop;
}
_;
}
udt_parse_tree_t;
#define IS_DISTINCT_TYPE(tree) \
((tree)->_.type.representation && BOX_ELEMENTS ((tree)->_.type.representation) == 1 && \
!ST_P (((UST **)(tree)->_.type.representation)[0], UDT_MEMBER))
void udt_exec_class_def (query_instance_t * qi, ST * tree);
void udt_drop_class_def (query_instance_t * qi, ST * tree);
void udt_alter_class_def (query_instance_t * qi, ST * tree);
int sqlc_udt_is_udt_call (sql_comp_t * sc, char *name, dk_set_t * code,
state_slot_t * ret, state_slot_t ** params, caddr_t ret_param, caddr_t fun_udt_name);
int sqlc_udt_method_call (sql_comp_t * sc, char *name, dk_set_t * code,
state_slot_t * ret, state_slot_t ** params, caddr_t ret_param,
caddr_t type_name);
int udt_is_udt_bif (bif_t bif);
#define UDT_METHOD_CALL_BIF "__udt_method_call"
#define UDT_MEMBER_HANDLER_BIF "__udt_member_handler"
#define UDT_INSTANTIATE_CLASS_BIF "__udt_instantiate_class"
|