1    | /***************************************
2    |   $Revision: 1.13 $
3    | 
4    |   Status: NOT REVUED, NOT TESTED
5    | 
6    |  Author(s):       Andrei Robachevsky
7    | 
8    |   ******************/ /******************
9    |   Modification History:
10   |         andrei (17/01/2000) Created.
11   |   ******************/ /******************
12   |   Copyright (c) 2000,2001,2002                    RIPE NCC
13   |  
14   |   All Rights Reserved
15   |   
16   |   Permission to use, copy, modify, and distribute this software and its
17   |   documentation for any purpose and without fee is hereby granted,
18   |   provided that the above copyright notice appear in all copies and that
19   |   both that copyright notice and this permission notice appear in
20   |   supporting documentation, and that the name of the author not be
21   |   used in advertising or publicity pertaining to distribution of the
22   |   software without specific, written prior permission.
23   |   
24   |   THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
25   |   ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL
26   |   AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
27   |   DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
28   |   AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
29   |   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
30   |  ***************************************/
31   | 
32   | /* XXX                  IMPORTANT                        XXX  */
33   | /* XXX Many of the definitions are hardcoded here        XXX */
34   | /* XXX Incase of adding or reordering classes/attributes XXX */
35   | /* XXX Check this file, please                           XXX */
36   | 
37   | /*********************************************************************
38   | 
39   | 
40   | This is needed for commit or rollback of the transaction (v3 software
41   | doesn't rely on transaction support from the underlying RDBMS; MySQL
42   | doesn't have it at all). The transaction in progress can be identified
43   | by thread_id field not being equal 0 in corresponding tables. According
44   | to the value of this field (insert or  update) the commit/rollback
45   | routine either deletes or updates the record.
46   | 
47   | The arrays have the following format: first come tables that may be
48   | affected when dummy object is created to resolve references. For
49   | example, if one creates a inetnum object that has no corresponding
50   | admin-c, tech-c, mnt-by, etc., dummy records will be created in
51   | person_role table and mntner table. We need to clean up them.
52   | 
53   | Secondly (starting with TAB_START) come tables that may be affected by
54   | the object itself. Basically it is a list of all possible attributes of
55   | the object of the type that are stored in the db. I guess this may be
56   | also derived from xml in the future.
57   | 
58   | And NULL is a delimiter; it is also used for padding.
59   | 
60   | **********************************************************************/
61   | 
62   | #define TAB_START	6
63   | char *t_ak[]={  "mntner","person_role","names",NULL,NULL,NULL,
64   |                 "admin_c","tech_c","notify","mnt_by","mnt_lower",NULL };
65   |                 
66   | char *t_an[]={	"mntner","person_role","as_set","names","mbrs_by_ref",NULL,
67   | 		"cross_nfy","cross_mnt","member_of","admin_c","tech_c","notify","mnt_by","mnt_lower","mnt_routes",NULL };
68   | 		
69   | char *t_dn[]={	"mntner","person_role","names",NULL,NULL,NULL,
70   | 		"admin_c","tech_c","zone_c","nserver","sub_dom","notify","mnt_by","mnt_lower","refer","inaddr_arpa", "ip6int", NULL }; /*C_DN, */
71   | 		
72   | char *t_i6[]={	"mntner","person_role","names","irt",NULL,NULL,
73   | 		"admin_c","tech_c","rev_srv","notify","mnt_by","mnt_lower","mnt_routes","mnt_irt",NULL}; /*C_I6,*/
74   | 
75   | char *t_in[]={	"mntner","person_role","names","irt",NULL,NULL,
76   | 		"admin_c","tech_c","rev_srv","notify","mnt_by","mnt_lower","mnt_routes","mnt_irt",NULL}; /*C_IN,*/
77   | 		
78   | char *t_ir[]={	"mntner","person_role","names",NULL,NULL,NULL,
79   | 		"ifaddr","admin_c","tech_c","notify","mnt_by",NULL}; /*C_IR,*/
80   | 		
81   | char *t_kc[]={	"mntner",NULL,NULL,NULL,NULL,NULL,
82   | 		"notify","mnt_by",NULL}; /*C_KC,*/
83   | 		
84   | char *t_li[]={	"mntner","person_role","names",NULL,NULL,NULL,
85   | 		"admin_c","author","notify","mnt_by",NULL}; /*C_LI,*/
86   | 		
87   | char *t_mt[]={	"mntner","person_role","names",NULL,NULL,NULL,
88   | 		"admin_c","tech_c","upd_to","mnt_nfy","auth","notify","mnt_by","auth_override","referral_by",NULL}; /*C_MT,*/
89   | 		
90   | char *t_pn[]={	"mntner",NULL,NULL,NULL,NULL,NULL,
91   | 		"names","e_mail","notify","mnt_by",NULL}; /*C_PN,*/
92   | 		
93   | char *t_ro[]={	"mntner","person_role","names",NULL,NULL,NULL,
94   | 		"names","e_mail","admin_c","tech_c","notify","mnt_by",NULL}; /**C_RO,*/
95   | 		
96   | char *t_rt[]={	"route_set","mntner","person_role",NULL,NULL,NULL, /* admin-c, tech-c may appear in RADB */
97   | 		"cross_nfy","cross_mnt","member_of","notify","mnt_by","mnt_lower", "mnt_routes", NULL}; /*C_RT,*/
98   | 		
99   | char *t_as[]={	"mntner","person_role","names",NULL,NULL,NULL,
100  | 		"mbrs_by_ref","admin_c","tech_c","notify","mnt_by",NULL}; /*C_AS,*/
101  | 		
102  | char *t_rs[]={	"mntner","person_role","names",NULL,NULL,NULL,
103  | 		"mbrs_by_ref","admin_c","tech_c","notify","mnt_by",NULL}; /*C_RS,*/
104  | 		
105  | char *t_fs[]={  "mntner","person_role","names",NULL,NULL,NULL,
106  |                 "admin_c","tech_c","notify","mnt_by",NULL,NULL}; /*C_FS,*/
107  |                 
108  | char *t_ps[]={  "mntner","person_role","names",NULL,NULL,NULL,
109  |                 "admin_c","tech_c","notify","mnt_by",NULL,NULL}; /*C_PS,*/
110  |                 
111  | char *t_is[]={  "mntner","person_role","names",NULL,NULL,NULL,
112  |                 "mbrs_by_ref","admin_c","tech_c","notify","mnt_by",NULL}; /*C_IS,*/
113  |                 
114  | char *t_it[]={  "mntner","person_role","names",NULL,NULL,NULL,
115  |                 "admin_c","tech_c","notify","mnt_by","auth","irt_nfy",NULL}; /*C_IS,*/
116  |  
117  | /* IMPORTANT !!! */
118  | /* This stuff should be consistent with DF_classnames.def */
119  | 
120  | char **tables[]={
121  | t_ak,
122  | t_as,
123  | t_an,
124  | t_dn,
125  | t_ir,
126  | t_i6,
127  | t_in,
128  | t_kc,
129  | t_li,
130  | t_mt,
131  | t_pn,
132  | t_ro,
133  | t_rt,
134  | t_rs,
135  | t_fs,
136  | t_ps,
137  | t_is,
138  | t_it,
139  | NULL
140  | };
141  | 
142  | /* This tables are used for inverse querying when deleting an object */
143  | 
144  | char *t_ipn[]={  "admin_c","tech_c","zone_c","cross_nfy","author",NULL}; /*C_PN, C_RO*/
145  | char *t_imt[]={  "mnt_by","mnt_lower","mnt_routes","cross_mnt","mbrs_by_ref","referral_by",NULL}; /* C_MT */
146  | char *t_iit[]={  "mnt_irt", NULL}; /* C_IT */