CUBRID Engine  latest
db_old.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  * db_old.c - Obsolete API functions. New code should not use these functions.
21  */
22 
23 #ident "$Id$"
24 
25 #include "config.h"
26 
27 #include <stdio.h>
28 #include <stdlib.h>
29 #include <stdarg.h>
30 #include <ctype.h>
31 #include <assert.h>
32 
33 #include "authenticate.h"
34 #include "system_parameter.h"
35 #include "storage_common.h"
36 #include "db.h"
37 #include "class_object.h"
38 #include "object_print.h"
39 #include "server_interface.h"
40 #include "boot_cl.h"
41 #include "locator_cl.h"
42 #include "schema_manager.h"
43 #include "schema_template.h"
44 #include "object_accessor.h"
45 #include "set_object.h"
46 #include "virtual_object.h"
47 #include "parser.h"
48 
49 /*
50  * GENERIC LIST SUPPORT
51  */
52 
53 /*
54  * db_list_length() - Generic list length function. This can be used on
55  * several types of objects returned by the db_ layer.
56  * Specifically, the following types of objects are maintained in lists
57  * compatible with the generic list utilities:
58  * DB_OBJLIST
59  * DB_NAMELIST
60  * DB_ATTRIBUTE
61  * DB_METHOD
62  * DB_RESOLUTION
63  * DB_DOMAIN
64  * DB_METHFILE
65  * return : length of the list, zero if empty
66  * list(in): a list of some variety
67  */
68 int
70 {
71  /* handles NULL */
72  int retval;
73 
74  retval = (ws_list_length ((DB_LIST *) list));
75 
76  return (retval);
77 }
78 
79 /*
80  * OBJECT LIST SUPPORT
81  */
82 
83 /*
84  * db_objlist_get() - This is a simple method for accessing the nth element of
85  * an object list. Since these are stored as linked lists, this does a
86  * linear search to get to the requested element.
87  * return : an object pointer
88  * list(in): an object list
89  * index(in): the object to get
90  *
91  * note : This isn't a good function to call if you just want to iterate over
92  * the elements. You should instead write a loop using the ->next field
93  * in the DB_OBJLIST structure.
94  */
95 DB_OBJECT *
97 {
98  DB_OBJLIST *el;
99  MOP op;
100  int i;
101 
102  op = NULL;
103  for (el = list, i = 0; el != NULL && i < index; i++, el = el->next);
104  if (el != NULL)
105  {
106  op = el->op;
107  }
108 
109  return (op);
110 }
111 
112 /*
113  * db_objlist_print() - Debug function to display the contents of an object
114  * list.Prints out the internal OID's of the elements. This should ONLY be
115  * used for debugging purposes, high level users should never see the OIDs
116  * of objects.
117  * return : void
118  * list(in): an object list
119  */
120 void
122 {
123  DB_OBJLIST *l;
124  OID *oid;
125 
126  for (l = list; l != NULL; l = l->next)
127  {
128  oid = WS_OID (l->op);
129  fprintf (stdout, "%d.%d.%d ", oid->volid, oid->pageid, oid->slotid);
130  }
131  fprintf (stdout, "\n");
132 
133 }
134 
135 /*
136  * NAMELIST SUPPORT
137  */
138 
139 /*
140  * db_namelist_copy() - This function copies a namelist, the names in the list
141  * are copied as well as the list links.
142  * return : a new list of names
143  * list(in): a list of names
144  *
145  * note : The returned name list must be freed with db_namelist_free() function
146  */
147 DB_NAMELIST *
149 {
150  DB_NAMELIST *retval;
151 
153 
154  /* handles NULL */
155  retval = (nlist_copy (list));
156 
157 
158  return (retval);
159 }
160 
161 
162 /*
163  * db_namelist_sort() - This function is used to sort a namelist in
164  * alphabetical order. The list is destructively sorted NOT copied
165  * so you should get rid of any pointers to the original list.
166  * return : a namelist
167  * names(in): an unsorted namelist
168  */
169 DB_NAMELIST *
171 {
172  DB_NAMELIST *sorted, *name, *next, *sort, *found, *prev;
173 
174  sorted = NULL;
175 
176  for (name = names, next = NULL; name != NULL; name = next)
177  {
178  next = name->next;
179  for (sort = sorted, prev = NULL, found = NULL; sort != NULL && found == NULL; sort = sort->next)
180  {
181  if (strcmp (name->name, sort->name) < 0)
182  {
183  found = sort;
184  }
185  else
186  {
187  prev = sort;
188  }
189  }
190  name->next = found;
191  if (prev == NULL)
192  {
193  sorted = name;
194  }
195  else
196  {
197  prev->next = name;
198  }
199  }
200 
201  return (sorted);
202 }
203 
204 /*
205  * db_namelist_remove() - This function removes an element from a namelist if
206  * it matches the given name. A pointer to the head of the list must be
207  * passed in case the element to remove is at the head.
208  * return: void
209  * list(in): a pointer to a pointer to a namelist
210  * name(in): the name to remove
211  */
212 void
213 db_namelist_remove (DB_NAMELIST ** list, const char *name)
214 {
215  DB_NAMELIST *el;
216 
217  el = (DB_NAMELIST *) nlist_remove (list, name, NULL);
218  if (el != NULL)
219  {
220  el->next = NULL;
221  nlist_free (el);
222  }
223 
224 }
225 
226 /*
227  * db_namelist_print() - Debug function to display the names in a namelist.
228  * The list is printed to stdout.
229  * return : void
230  * list(in) : a namelist
231  */
232 void
234 {
235  DB_NAMELIST *l;
236 
237  for (l = list; l != NULL; l = l->next)
238  fprintf (stdout, "%s ", l->name);
239  fprintf (stdout, "\n");
240 
241 }
242 
243 /*
244  * OBSOLETE BROWSING FUNCTIONS
245  */
246 
247 /*
248  * db_get_attribute_names() - This can be used to get the list of attribute
249  * names for a class.
250  * return : a namelist containing attribute names
251  * obj(in): a class or instance
252  *
253  * note : There are more general class information functions but this
254  * is a common operation so it has an optomized interface.
255  */
256 DB_NAMELIST *
258 {
259  DB_NAMELIST *names = NULL;
260  SM_ATTRIBUTE *att;
261  SM_CLASS *class_;
262 
264 
265  if (au_fetch_class (obj, &class_, AU_FETCH_READ, AU_SELECT) == NO_ERROR)
266  {
267  for (att = class_->attributes; att != NULL; att = (SM_ATTRIBUTE *) att->header.next)
268  if (nlist_append (&names, att->header.name, NULL, NULL))
269  {
270  goto memory_error;
271  }
272  }
273  names = db_namelist_sort (names);
274 
275 
276  return (names);
277 
278 memory_error:
279  nlist_free (names);
280  return NULL;
281 }
282 
283 /*
284  * db_get_shared_attribute_names() - This can be used to get the names of the
285  * shared attributes of a class.
286  * return : a namelist of shared attribute names
287  * obj(in): a class or instance
288  *
289  * note: There are more general information fucntion but this
290  * is a common operation so it has an optomized interface.
291  *
292  */
293 
294 DB_NAMELIST *
296 {
297  DB_NAMELIST *names = NULL;
298  SM_ATTRIBUTE *att;
299  SM_CLASS *class_;
300 
302 
303  if (au_fetch_class (obj, &class_, AU_FETCH_READ, AU_SELECT) == NO_ERROR)
304  {
305  for (att = class_->shared; att != NULL; att = (SM_ATTRIBUTE *) att->header.next)
306  if (nlist_append (&names, att->header.name, NULL, NULL))
307  {
308  goto memory_error;
309  }
310  }
311  names = db_namelist_sort (names);
312 
313 
314  return (names);
315 
316 memory_error:
317  nlist_free (names);
318  return NULL;
319 }
320 
321 /*
322  * db_get_class_attribute_names() - This can be used to get the list of
323  * attribute names for a class.
324  * return : a namelist containing class attribute names
325  * obj(in): a class or instance
326  *
327  * note : There are more general class information functions but this
328  * is a common operation so it has an optomized interface.
329  */
330 DB_NAMELIST *
332 {
333  DB_NAMELIST *names = NULL;
334  SM_ATTRIBUTE *att;
335  SM_CLASS *class_;
336 
338 
339  if (au_fetch_class (obj, &class_, AU_FETCH_READ, AU_SELECT) == NO_ERROR)
340  {
341  for (att = class_->class_attributes; att != NULL; att = (SM_ATTRIBUTE *) att->header.next)
342  if (nlist_append (&names, att->header.name, NULL, NULL))
343  {
344  goto memory_error;
345  }
346  }
347  names = db_namelist_sort (names);
348 
349 
350  return (names);
351 
352 memory_error:
353  nlist_free (names);
354  return NULL;
355 }
356 
357 /*
358  * db_get_ordered_attribute_names() - This is used to get a list of the
359  * instance and shared attributes in definition order. This is useful
360  * for displaying attributes because the order makes more sense to the
361  * user than the internal storage order.
362  * return : a namelist containing attribute names
363  * obj(in): a class or instance
364  */
365 DB_NAMELIST *
367 {
368  DB_NAMELIST *names = NULL;
369  SM_ATTRIBUTE *att;
370  SM_CLASS *class_;
371 
373 
374  if (au_fetch_class (obj, &class_, AU_FETCH_READ, AU_SELECT) == NO_ERROR)
375  {
376  for (att = class_->ordered_attributes; att != NULL; att = att->order_link)
377  if (nlist_append (&names, att->header.name, NULL, NULL))
378  {
379  goto memory_error;
380  }
381  }
382 
383 
384  return (names);
385 
386 memory_error:
387  nlist_free (names);
388  return NULL;
389 }
390 
391 /*
392  * db_get_method_names() - Returns a list of the names of the methods
393  * (not class methods) for a class.
394  * return : a namelist of method names
395  * obj(in): a class or instance
396  */
397 DB_NAMELIST *
399 {
400  DB_NAMELIST *names = NULL;
401  SM_METHOD *meth;
402  SM_CLASS *class_;
403 
405 
406  if (au_fetch_class (obj, &class_, AU_FETCH_READ, AU_SELECT) == NO_ERROR)
407  {
408  for (meth = class_->methods; meth != NULL; meth = (SM_METHOD *) meth->header.next)
409  if (nlist_append (&names, meth->header.name, NULL, NULL))
410  {
411  goto memory_error;
412  }
413  }
414  names = db_namelist_sort (names);
415 
416 
417  return (names);
418 
419 memory_error:
420  nlist_free (names);
421  return NULL;
422 }
423 
424 /*
425  * db_get_class_method_names() - Returns a list of the names of the class
426  * methods (not instance methods) defined for a class.
427  * return : a namelist of method names
428  * obj(in): a class or instance
429  */
430 DB_NAMELIST *
432 {
433  DB_NAMELIST *names = NULL;
434  SM_METHOD *meth;
435  SM_CLASS *class_;
436 
438 
439  if (au_fetch_class (obj, &class_, AU_FETCH_READ, AU_SELECT) == NO_ERROR)
440  {
441  for (meth = class_->class_methods; meth != NULL; meth = (SM_METHOD *) meth->header.next)
442  if (nlist_append (&names, meth->header.name, NULL, NULL))
443  {
444  goto memory_error;
445  }
446  }
447  names = db_namelist_sort (names);
448 
449 
450  return (names);
451 
452 memory_error:
453  nlist_free (names);
454  return NULL;
455 }
456 
457 /*
458  * db_get_superclass_names() - Returns a list of the names of the immediate
459  * super classes of a class.
460  * return : a namelist
461  * obj(in): a class or instance
462  */
463 DB_NAMELIST *
465 {
466  DB_NAMELIST *names = NULL;
467  DB_OBJLIST *el;
468  SM_CLASS *class_;
469  const char *class_name = NULL;
470 
472 
473  if (au_fetch_class (obj, &class_, AU_FETCH_READ, AU_SELECT) == NO_ERROR)
474  {
475  for (el = class_->inheritance; el != NULL; el = el->next)
476  {
477  class_name = sm_get_ch_name (el->op);
478  if (class_name == NULL)
479  {
480  assert (er_errid () != NO_ERROR);
481  goto memory_error;
482  }
483  if (nlist_append (&names, class_name, NULL, NULL))
484  {
485  goto memory_error;
486  }
487  }
488  }
489  names = db_namelist_sort (names);
490 
491 
492  return (names);
493 
494 memory_error:
495  nlist_free (names);
496  return NULL;
497 }
498 
499 /*
500  * db_get_subclass_names() - Returns a list of the names of the immediate
501  * sub classes of a class.
502  * return : a namelist
503  * obj(in): a class or instance
504  */
505 DB_NAMELIST *
507 {
508  DB_NAMELIST *names = NULL;
509  DB_OBJLIST *el;
510  SM_CLASS *class_;
511  const char *class_name = NULL;
512 
514 
515  if (au_fetch_class (obj, &class_, AU_FETCH_READ, AU_SELECT) == NO_ERROR)
516  {
517  for (el = class_->users; el != NULL; el = el->next)
518  {
519  class_name = sm_get_ch_name (el->op);
520  if (class_name == NULL)
521  {
522  assert (er_errid () != NO_ERROR);
523  goto memory_error;
524  }
525  if (nlist_append (&names, class_name, NULL, NULL))
526  {
527  goto memory_error;
528  }
529  }
530  }
531  names = db_namelist_sort (names);
532 
533 
534  return (names);
535 
536 memory_error:
537  nlist_free (names);
538  return NULL;
539 }
540 
541 /*
542  * db_get_method_file_names() - Returns the list of method files defined
543  * for a class.
544  * return : a namelist
545  * obj(in): a class or instance
546  */
547 DB_NAMELIST *
549 {
550  DB_NAMELIST *names = NULL;
551  SM_METHOD_FILE *file;
552  SM_CLASS *class_;
553 
555 
556  if (au_fetch_class (obj, &class_, AU_FETCH_READ, AU_SELECT) == NO_ERROR)
557  {
558  for (file = class_->method_files; file != NULL; file = file->next)
559  if (nlist_append (&names, file->name, NULL, NULL))
560  {
561  goto memory_error;
562  }
563  }
564  names = db_namelist_sort (names);
565 
566  return (names);
567 
568 memory_error:
569  nlist_free (names);
570  return NULL;
571 }
572 
573 
574 /*
575  * db_get_method_function() - Returns the name of the C function that was
576  * defined to implement a method.
577  * return : a C function name
578  * obj(in): a class or instance
579  * name(in): the name of a method
580  */
581 const char *
582 db_get_method_function (MOP obj, const char *name)
583 {
584  SM_CLASS *class_;
585  SM_METHOD *method;
586  const char *function = NULL;
587 
589 
590  if (au_fetch_class (obj, &class_, AU_FETCH_READ, AU_SELECT) == NO_ERROR)
591  {
592  method = classobj_find_method (class_, name, 0);
593  if ((method != NULL) && (method->signatures != NULL))
594  {
595  if (method->signatures->function_name != NULL)
596  {
597  function = method->signatures->function_name;
598  }
599 
600  }
601  }
602 
603  return (function);
604 }
605 
606 /*
607  * db_get_attribute_domain() - This is used to get a full domain descriptor
608  * for an attribute. The domain descriptor can be examined using the
609  * db_domain_ accessor functions.
610  * return : the domain descriptor for an attribute
611  * obj(in): a class or instance
612  * name(in): attribute name
613  */
614 DB_DOMAIN *
615 db_get_attribute_domain (MOP obj, const char *name)
616 {
617  SM_CLASS *class_;
618  SM_ATTRIBUTE *att;
619  SM_DOMAIN *domain;
620 
622 
623  domain = NULL;
624  att = NULL;
625  if (au_fetch_class (obj, &class_, AU_FETCH_READ, AU_SELECT) == NO_ERROR)
626  {
627  att = classobj_find_attribute (class_, name, 0);
628  if (att != NULL)
629  {
630  domain = att->domain;
631  sm_filter_domain (domain, NULL);
632  }
633  }
634 
635 
636  return ((DB_DOMAIN *) domain);
637 }
638 
639 /*
640  * db_get_attribute_type() - Returns the internal basic type identifier for
641  * an attribute.
642  * return : type identifier constant
643  * obj(in): class or instance
644  * name(in): attribute name
645  */
646 DB_TYPE
647 db_get_attribute_type (MOP obj, const char *name)
648 {
649  DB_TYPE type = DB_TYPE_NULL;
650 
652 
653  if (obj != NULL && name != NULL)
654  {
655  type = sm_att_type_id (obj, name);
656  }
657  else
658  {
660  }
661 
662  return (type);
663 }
664 
665 /*
666  * db_get_attribute_class() - This returns the MOP of the class that was
667  * defined as the domain of this attribute. The basic type of the
668  * attribute must be DB_TYPE_OBJECT, if not, this function will return
669  * NULL.
670  * return : a class pointer
671  * obj(in): class or instance
672  * name(in): attribute name
673  */
674 DB_OBJECT *
675 db_get_attribute_class (MOP obj, const char *name)
676 {
677  MOP class_ = NULL;
678 
680 
681  if (obj != NULL && name != NULL)
682  {
683  class_ = sm_att_class (obj, name);
684  }
685  else
686  {
688  }
689 
690  return (class_);
691 }
692 
693 /*
694  * db_is_indexed() - This function is used to see if an attribute has an index
695  * or not.
696  * return : non-zero if attribute is indexed
697  * classmp(in): class pointer
698  * attname(in): attribute name
699  *
700  * note : Because this returns a true or false, it masks any errors that may
701  * have been encountered aint the way so callers should first make sure that
702  * the class is accessible, the attribute exists, etc.
703  */
704 int
705 db_is_indexed (MOP classmop, const char *attname)
706 {
707  int retval;
708  BTID btid;
709 
711  CHECK_2ARGS_ZERO (classmop, attname);
712 
713  retval = ((sm_get_index (classmop, attname, &btid) == NO_ERROR) ? true : false);
714 
715  return (retval);
716 }
717 
718 /*
719  * db_print_mop() - This can be used to get a printable representation of
720  * an object pointer. This should be used only for debugging purposes
721  * or other special system utilities.
722  * return : number of chars used in the printed representation
723  * obj(in): class or instance pointer
724  * buffer(out): buffer to contain the printed representation
725  * maxlen(in): the maximum number of characters in the buffer
726  *
727  * note : Since this prints the internal object identifier numbers, great
728  * care must be taken that these numbers don't surface to "users" because
729  * there should be no assumed knowledge of these numbers. They may
730  * change at any time due to database re-configuration.
731  */
732 int
733 db_print_mop (DB_OBJECT * obj, char *buffer, int maxlen)
734 {
735  int retval;
736 
738  CHECK_2ARGS_ZERO (obj, buffer);
739 
740  /* handles NULL */
741  retval = (help_describe_mop (obj, buffer, maxlen));
742 
743  return (retval);
744 }
745 
746 /*
747  * db_get_method_source_file() - This is an experimental function for the
748  * initial browser. It isn't guaranteed to work in all cases. It will
749  * attempt to locate the .c file that contains the source for a method
750  * implementation.
751  * return : C string
752  * class(in): class or instance
753  * method(in): method name
754  *
755  * note : There isn't any way that this can be determined for certain, what it
756  * does now is find the .o file that contains the implementation function
757  * and assume that a .c file exists in the same directory that contains
758  * the source.
759  */
760 char *
761 db_get_method_source_file (MOP obj, const char *name)
762 {
763  char *retval;
764 
766  CHECK_2ARGS_NULL (obj, name);
767 
768  retval = (sm_get_method_source_file (obj, name));
769 
770  return (retval);
771 }
SM_ATTRIBUTE * shared
Definition: class_object.h:722
DB_NAMELIST * db_get_shared_attribute_names(MOP obj)
Definition: db_old.c:295
DB_NAMELIST * db_namelist_copy(DB_NAMELIST *list)
Definition: db_old.c:148
#define NO_ERROR
Definition: error_code.h:46
void db_namelist_remove(DB_NAMELIST **list, const char *name)
Definition: db_old.c:213
#define CHECK_CONNECT_FALSE()
Definition: db.h:103
DB_OBJLIST * inheritance
Definition: class_object.h:718
SM_COMPONENT header
Definition: class_object.h:591
const char * name
Definition: class_object.h:616
DB_TYPE
Definition: dbtype_def.h:670
int db_is_indexed(MOP classmop, const char *attname)
Definition: db_old.c:705
DB_DOMAIN * db_get_attribute_domain(MOP obj, const char *name)
Definition: db_old.c:615
TP_DOMAIN * domain
Definition: class_object.h:444
SM_ATTRIBUTE * attributes
Definition: class_object.h:721
void nlist_free(DB_NAMELIST *list)
Definition: work_space.c:4344
#define CHECK_2ARGS_NULL(obj1, obj2)
Definition: db.h:174
struct sm_component * next
Definition: class_object.h:384
DB_OBJECT * db_objlist_get(DB_OBJLIST *list, int index)
Definition: db_old.c:96
char * db_get_method_source_file(MOP obj, const char *name)
Definition: db_old.c:761
char * sm_get_method_source_file(MOP obj, const char *name)
SM_ATTRIBUTE * classobj_find_attribute(SM_CLASS *class_, const char *name, int class_attribute)
int er_errid(void)
int db_print_mop(DB_OBJECT *obj, char *buffer, int maxlen)
Definition: db_old.c:733
#define CHECK_2ARGS_ZERO(obj1, obj2)
Definition: db.h:207
const char * name
Definition: dbtype_def.h:431
void er_set(int severity, const char *file_name, const int line_no, int err_id, int num_args,...)
DB_NAMELIST * nlist_copy(DB_NAMELIST *list)
Definition: work_space.c:4362
#define assert(x)
int help_describe_mop(DB_OBJECT *obj, char *buffer, int maxlen)
Definition: object_print.c:498
DB_OBJECT * db_get_attribute_class(MOP obj, const char *name)
Definition: db_old.c:675
int au_fetch_class(MOP op, SM_CLASS **class_ptr, AU_FETCHMODE fetchmode, DB_AUTH type)
SM_ATTRIBUTE * class_attributes
Definition: class_object.h:725
DB_NAMELIST * nlist_remove(DB_NAMELIST **root, const char *name, NLSEARCHER fcn)
Definition: work_space.c:4100
SM_METHOD_FILE * method_files
Definition: class_object.h:727
int sm_filter_domain(TP_DOMAIN *domain, int *changes)
const char * sm_get_ch_name(MOP op)
DB_TYPE db_get_attribute_type(MOP obj, const char *name)
Definition: db_old.c:647
const char * function_name
Definition: class_object.h:570
struct db_namelist * next
Definition: dbtype_def.h:430
#define NULL
Definition: freelistheap.h:34
SM_METHOD_SIGNATURE * signatures
Definition: class_object.h:593
DB_NAMELIST * db_get_subclass_names(MOP obj)
Definition: db_old.c:506
struct db_objlist * next
Definition: dbtype_def.h:442
int nlist_append(DB_NAMELIST **list, const char *name, NLSEARCHER fcn, int *added_ptr)
Definition: work_space.c:4198
SM_METHOD * class_methods
Definition: class_object.h:733
#define CHECK_CONNECT_ZERO_TYPE(TYPE)
Definition: db.h:97
DB_NAMELIST * db_get_class_method_names(MOP obj)
Definition: db_old.c:431
struct db_object * op
Definition: dbtype_def.h:443
DB_TYPE sm_att_type_id(MOP classop, const char *name)
#define AU_SELECT
Definition: authenticate.h:69
#define CHECK_CONNECT_NULL()
Definition: db.h:91
#define ARG_FILE_LINE
Definition: error_manager.h:44
int sm_get_index(MOP classop, const char *attname, BTID *index)
DB_NAMELIST * db_get_method_file_names(MOP obj)
Definition: db_old.c:548
#define WS_OID(mop)
Definition: work_space.h:293
DB_NAMELIST * db_get_class_attribute_names(MOP obj)
Definition: db_old.c:331
SM_COMPONENT header
Definition: class_object.h:441
#define ER_OBJ_INVALID_ARGUMENTS
Definition: error_code.h:275
DB_NAMELIST * db_get_method_names(MOP obj)
Definition: db_old.c:398
DB_NAMELIST * db_namelist_sort(DB_NAMELIST *names)
Definition: db_old.c:170
#define CHECK_CONNECT_ZERO()
Definition: db.h:94
DB_OBJLIST * users
Definition: class_object.h:712
int i
Definition: dynamic_load.c:954
const char * name
Definition: class_object.h:385
struct sm_attribute * order_link
Definition: class_object.h:461
int ws_list_length(DB_LIST *list)
Definition: work_space.c:3925
DB_NAMELIST * db_get_ordered_attribute_names(MOP obj)
Definition: db_old.c:366
MOP sm_att_class(MOP classop, const char *name)
SM_ATTRIBUTE * ordered_attributes
Definition: class_object.h:753
void db_namelist_print(DB_NAMELIST *list)
Definition: db_old.c:233
int db_list_length(DB_LIST *list)
Definition: db_old.c:69
SM_METHOD * methods
Definition: class_object.h:730
void db_objlist_print(DB_OBJLIST *list)
Definition: db_old.c:121
const char * db_get_method_function(MOP obj, const char *name)
Definition: db_old.c:582
struct sm_method_file * next
Definition: class_object.h:615
DB_NAMELIST * db_get_superclass_names(MOP obj)
Definition: db_old.c:464
DB_NAMELIST * db_get_attribute_names(MOP obj)
Definition: db_old.c:257
SM_METHOD * classobj_find_method(SM_CLASS *class_, const char *name, int class_method)