DatabaseProcApplicationCreatedLinks
sybsystemprocssp_helpjava  31 Aug 14Defects Dependencies

1     
2     /* Sccsid = "%Z% generic/sproc/%M% %I% %G%" */
3     
4     /*
5     ** Messages for "sp_helpjava"
6     **
7     ** 18697, "Usage: sp_helpjava ['class' [, name [, 'detail' |, 'depends']]
8     **                            | 'jar' [, name [, 'depends']]]"
9     ** 18698, "Class '%1!' is not a system class and is not installed in the
10    **	   current database."
11    ** 18699, "Jar '%1!' does not exist in this database."
12    ** 18817, "Cannot run this command because Java services are not enabled.
13    **	   A user with System Administrator (SA) role must reconfigure the
14    **	   system to enable Java."
15    ** 18901, "Objects that depend on this class: " 
16    ** 18902, "Class name: '%1!'"
17    */
18    
19    create procedure sp_helpjava
20        @help_option varchar(8) = NULL, /* The option can be 'class' or 'jar' */
21        @object_name varchar(767) = NULL, /* jar name or class name */
22        @detail_option varchar(8) = NULL /* Show detailed information of a class */
23    as
24    
25        declare @sptlang int
26        declare @method_variable varchar(92)
27        declare @val char(10)
28        declare @maxlen int
29        declare @msg varchar(1024)
30        declare @class_name varchar(255)
31        declare @sqlj_proc int /* indicates a sqlj proc */
32    
33        if exists (select s.value from master..sysconfigures s
34                where s.name = "enable java"
35                    and s.value = 0)
36        begin
37            /* 
38            ** 18817, "Cannot run this command because Java services are not 
39            ** enabled. A user with System Administrator (SA) role must 
40            ** reconfigure the system to enable Java."
41            */
42            raiserror 18817
43            return (1)
44        end
45    
46        if @@trancount = 0
47        begin
48            set chained off
49        end
50    
51        set transaction isolation level 1
52    
53        select @sptlang = @@langid
54    
55        if @@langid != 0
56        begin
57            if not exists (
58                    select * from master.dbo.sysmessages where error
59                        between 17100 and 17109
60                        and langid = @@langid)
61                select @sptlang = 0
62        end
63    
64        select @sqlj_proc = hextoint("0x2000000") /* value of O2_JPROC */
65    
66        set nocount on
67    
68        /*
69        **  If no @help_option given AND no @object_name given, give a little 
70        **  info about all classes and jars.
71        */
72        if @help_option is NULL and @object_name is NULL and @detail_option is NULL
73        begin
74    
75            print ""
76    
77            /* Display a list of all Java classes installed in this database */
78            /* and the jars they belong to.					 */
79            select classes = x.xtname,
80                j = isnull(j.jname, '')
81            into #sphelpjava1rs
82            from sysxtypes x, sysjars j
83            where x.xtcontainer *= j.jid
84    
85            exec sp_autoformat @fulltabname = #sphelpjava1rs,
86                @selectlist = "'Classes installed' = classes,'Jar' = j",
87                @orderby = "order by 1"
88            drop table #sphelpjava1rs
89    
90            print ""
91    
92            /* Display a list of all jars installed in this database */
93            exec sp_autoformat @fulltabname = sysjars,
94                @selectlist = "'Jars installed' = jname",
95                @orderby = "order by jname"
96    
97            print ""
98            return (0)
99        end
100   
101       else
102       /*
103       ** If @help_option is "jar" and @object_name is NULL, list all of the 
104       ** jars in the database.
105       */
106       if @help_option = "jar" and @object_name is NULL and @detail_option is NULL
107       begin
108           /* Display a list of all jars installed in this database. */
109   
110           exec sp_autoformat @fulltabname = sysjars,
111               @selectlist = "'Jars installed' = jname",
112               @orderby = "order by jname"
113   
114           return (0)
115       end
116   
117       else
118       /*
119       ** If @help_option is "class" and @object_name is NULL, list all of 
120       ** the classes in the database.
121       */
122       if @help_option = "class" and @object_name is NULL and @detail_option is NULL
123       begin
124           /* Display list of all Java classes installed in this database. */
125   
126           exec sp_autoformat @fulltabname = sysxtypes,
127               @selectlist = "'Classes installed' = xtname",
128               @orderby = "order by xtname"
129   
130           return (0)
131       end
132       else
133       /* 
134       ** If @help_option is "jar" and an @object_name is specified, list all of
135       ** the classes belonging to that jar.
136       */
137       if @help_option = "jar" and @object_name is not NULL and @detail_option is NULL
138       begin
139           if exists (select *
140                   from sysjars j
141                   where j.jname = @object_name)
142           begin
143   
144               select jname
145               into #sphelpjava2rs
146               from sysjars
147               where jname = @object_name
148               exec sp_autoformat @fulltabname = #sphelpjava2rs,
149                   @selectlist = "'Jars' = jname"
150               drop table #sphelpjava2rs
151   
152               select x.xtname
153               into #sphelpjava3rs
154               from sysxtypes x, sysjars j
155               where x.xtcontainer = j.jid
156                   and j.jname = @object_name
157               exec sp_autoformat @fulltabname = #sphelpjava3rs,
158                   @selectlist = "'Classes' = xtname",
159                   @orderby = "order by xtname"
160               drop table #sphelpjava3rs
161               return (0)
162           end
163           else
164           begin
165               /* 18699, "Jar '%1!' does not exist in this database." */
166               raiserror 18699, @object_name
167               return (1)
168           end
169       end
170       /*
171       ** If @help_option is "jar", an @object_name is specified, and the detail
172       ** option is "depends" then list the classes that belong to that jar
173       ** and those classes dependencies.
174       */
175   
176       if @help_option = "jar" and @object_name is not NULL
177           and @detail_option = "depends"
178       begin
179           if exists (select *
180                   from sysjars j
181                   where j.jname = @object_name)
182           begin
183               declare help_cur cursor
184               for select x.xtname
185               from sysxtypes x, sysjars j
186               where x.xtcontainer = j.jid
187                   and j.jname = @object_name
188               order by x.xtname
189               for read only
190               open help_cur
191               fetch help_cur into @class_name
192               while (@@sqlstatus = 0)
193               begin
194                   if exists (select * from sysdepends d, sysxtypes x,
195                               syscolumns c
196                           where x.xtname = @class_name and
197                               (d.depid = x.xtid or
198                                   c.xtype = x.xtid))
199                   begin
200                       /* 
201                       ** 18902, "Class name: '%1!'"
202                       */
203                       exec sp_getmessage 18902, @msg output
204                       print @msg, @class_name
205                       select distinct id = d.id,
206                           name = o.name,
207                           type = m.description,
208                           owner = user_name(o.uid)
209                       into #sphelpjava4rs
210                       from sysobjects o, sysxtypes x, sysdepends d,
211                           sysusers u, master.dbo.spt_values v,
212                           master.dbo.sysmessages m
213                       where @class_name = x.xtname and
214                           x.xtid = d.depid and
215                           d.id = o.id and
216                           o.sysstat & 2063 = v.number and
217                           ((v.type = "O" and
218                                   (o.sysstat2 & @sqlj_proc) = 0) or
219                               (v.type = "O2" and
220                                   (o.sysstat2 & @sqlj_proc) != 0)) and
221                           v.msgnum = m.error
222                       union
223                       select distinct id = c.id,
224                           name = o.name,
225                           type = convert(char(15), m.description),
226                           owner = user_name(o.uid)
227                       from sysobjects o, sysxtypes x,
228                           syscolumns c, sysusers u,
229                           master.dbo.spt_values v,
230                           master.dbo.sysmessages m
231                       where @class_name = x.xtname and
232                           x.xtid = c.xtype and
233                           c.id = o.id and
234                           o.sysstat & 2063 = v.number and
235                           ((v.type = "O" and
236                                   (o.sysstat2 & @sqlj_proc) = 0) or
237                               (v.type = "O2" and
238                                   (o.sysstat2 & @sqlj_proc) != 0)) and
239                           v.msgnum = m.error
240                       exec sp_autoformat @fulltabname = #sphelpjava4rs,
241                           @orderby = "order by 3 desc, 2 asc"
242                       drop table #sphelpjava4rs
243                   end
244                   fetch help_cur into @class_name
245               end
246               close help_cur
247               deallocate cursor help_cur
248               return (0)
249           end
250           else
251           begin
252               /* 18699, "Jar '%1!' does not exist in this database." */
253               raiserror 18699, @object_name
254               return (1)
255           end
256       end
257   
258       else
259       /* If @help_option is "class", an @object_name is specified, and 
260       ** the @detail_option is "depends" then list the java objects that 
261       ** depend on this class.
262       */
263       if (@help_option = "class" and @object_name is not NULL
264               and @detail_option = "depends")
265       begin
266           /*
267           ** 18901, "Objects that depends on this class: "
268           */
269           exec sp_getmessage 18901, @msg output
270           print @msg
271   
272           select distinct id = d.id,
273               name = o.name,
274               type = m.description,
275               owner = user_name(o.uid)
276           into #sphelpjava5rs
277           from sysobjects o, sysxtypes x, sysdepends d, sysusers u,
278               master.dbo.spt_values v, master.dbo.sysmessages m
279           where @object_name = x.xtname and
280               x.xtid = d.depid and
281               d.id = o.id and
282               o.sysstat & 2063 = v.number and
283               ((v.type = "O" and
284                       (o.sysstat2 & @sqlj_proc) = 0) or
285                   (v.type = "O2" and
286                       (o.sysstat2 & @sqlj_proc) != 0)) and
287               v.msgnum = m.error
288           union
289           select distinct id = c.id,
290               name = o.name,
291               type = m.description,
292               owner = user_name(o.uid)
293           from sysobjects o, sysxtypes x, syscolumns c, sysusers u,
294               master.dbo.spt_values v, master.dbo.sysmessages m
295           where @object_name = x.xtname and
296               x.xtid = c.xtype and
297               c.id = o.id and
298               o.sysstat & 2063 = v.number and
299               ((v.type = "O" and
300                       (o.sysstat2 & @sqlj_proc) = 0) or
301                   (v.type = "O2" and
302                       (o.sysstat2 & @sqlj_proc) != 0)) and
303               v.msgnum = m.error
304           exec sp_autoformat @fulltabname = #sphelpjava5rs,
305               @orderby = "order by 3 desc, 2 asc"
306           drop table #sphelpjava5rs
307           return (0)
308       end
309       else
310       /* 
311       ** If @help_option is "class" and an @object_name is specified, there
312       ** exist two cases. 1) If the option 'detail' is specified, detailed 
313       ** information of the class will be printed. 2) If the option 
314       ** 'detail' is not specified, except for the class name, interfaces, 
315       ** class constructors etc, only declared methods and declared fields
316       ** in the class will be printed.
317       */
318       if ((@help_option = "class" and @object_name is not NULL
319                   and @detail_option is NULL) or
320               (@help_option = "class" and @object_name is not NULL
321                   and @detail_option = "detail"))
322       begin
323           declare @show_detail varchar(8)
324           declare @vstr varchar(80)
325           if @detail_option = "detail"
326               select @show_detail = "detail"
327           else
328               select @show_detail = "null"
329   
330           create table #InterfaceTable(interface varchar(255))
331           create table #ConstructorTable(constructor varchar(255))
332           create table #MethodTable(method varchar(255))
333           create table #FieldTable(field varchar(255))
334   
335           /*
336           ** The following statements that reference java class
337           ** sybase.aseutils.ClassInformation are contained in 
338           ** a string. The statements are executed at run time
339           ** only. They are not compiled when system procedure 
340           ** sp_helpjava is installed by the tool installmaster.
341           ** The purpose is to avoid errors of installmaster when 
342           ** "enable java" is 0 in master..sysconfigures.  
343           ** Use double quotes to delimit the concatenated execute immediate
344           ** string and single quotes around the arguments to the ClassInformation
345           ** method.  In this way, if the set quoted_identifier option is on
346           ** when the user invokes sp_helpjava, the arguments to ClassInformation
347           ** are treated as strings and not as identifiers, which is syntactically
348           ** what the parser requires.
349           ** Note that the double quoted concatenated string argument to execute
350           ** immediate will not itself be treated as an delimited identifier when
351           ** the procedure sp_helpjava is created because (it is assumed) set
352           ** quoted_identifier is NEVER on when installmaster is run.
353           **
354           ** Note that there is now special handling for a new method added to
355           ** the ClassInformation class to extract the version number of a class
356           ** to enable admins to determine which classes would need to be removed
357           ** or recompiled in the event that the PCA/JVM is downgraded to a prior JVM.
358           */
359   
360           /*
361           ** if this is the PCA/JVM the getClassVersion method exists in the 
362           ** ClassInformation class, construct the call accordingly (for Kona
363           ** we just make @vstr an empty string)
364           */
365           if (select value from master..sysconfigures where name = 'enable pci') = 1
366           begin
367               set @vstr = "select 'Class Version' = @class_details>>getClassVersion()  print '' "
368           end
369           else
370           begin
371               set @vstr = " "
372           end
373   
374           exec (
375           "declare @class_details sybase.aseutils.ClassInformation " +
376           "select @class_details = " +
377           "new sybase.aseutils.ClassInformation('" + @object_name + "', '" + @show_detail + "') " +
378   
379           "if (select @class_details>>getClassName()) is NULL " +
380           "begin " +
381           "/* 18698, 'Class %1! is not a system class and is not " +
382           "installed in the current database.' */ " +
383           "raiserror 18698,'" + @object_name + "' " +
384           "end " +
385   
386           "else " +
387           "begin " +
388           "/* Print out the name of the class */ " +
389           "select 'Class Name' = @class_details>>getClassName() " +
390   
391           "print '' " +
392   
393           @vstr +
394   
395           "/* Print out the class modifiers */ " +
396           "select 'Class Modifiers' = @class_details>>getClassModifiers() " +
397   
398           "print '' " +
399   
400           "/* Print out the SerialVersionUID of the class */ " +
401           "if (select @class_details>>getSerialVersionUid()) is not NULL " +
402           "begin " +
403           "select 'Class SerialVersionUID' = @class_details>>getSerialVersionUid() " +
404           "print '' " +
405           "end " +
406   
407           "/* Print out the interfaces that this class implements */ " +
408           "if (select @class_details>>getFirstInterface()) is not NULL " +
409           "begin " +
410           "insert into #InterfaceTable(interface) " +
411           "select interface = convert(varchar(255), " +
412           "@class_details>>getFirstInterface()) " +
413           "while (select @class_details>>hasMoreInterfaces()) = 1" +
414           "begin " +
415           "insert into #InterfaceTable (interface) " +
416           "(select interface = " +
417           "@class_details>>getNextInterface()) " +
418           "end " +
419           "end " +
420   
421           "/* Print out any superclasses this class extends */ " +
422           "select 'Extended Superclass' = " +
423           "@class_details>>getSuperclass() " +
424   
425           "print '' " +
426   
427           "/* Print out the class constructors */ " +
428           "if (select @class_details>>getFirstConstructor()) is not NULL " +
429           "begin " +
430           "insert into #ConstructorTable(constructor) " +
431           "select constructor = convert(varchar(255), " +
432           "@class_details>>getFirstConstructor()) " +
433           "while (select @class_details>>hasMoreConstructors()) = 1 " +
434           "begin " +
435           "insert into #ConstructorTable (constructor) " +
436           "(select constructor = " +
437           "@class_details>>getNextConstructor()) " +
438           "end " +
439           "end " +
440   
441           "/* Print out the method signatures */ " +
442           "if (select @class_details>>getFirstMethodSignature()) is not NULL " +
443           "begin " +
444           "insert into #MethodTable (method) " +
445           "select method = convert(varchar(255), " +
446           "@class_details>>getFirstMethodSignature()) " +
447           "while (select @class_details>>hasMoreMethodSignatures()) = 1 " +
448           "begin " +
449           "insert into #MethodTable (method) " +
450           "(select method = convert(varchar(255), " +
451           "@class_details>>getNextMethodSignature())) " +
452           "end " +
453           "end " +
454   
455           "/* Print out the fields */ " +
456           "if (select @class_details>>getFirstField()) is not NULL " +
457           "begin " +
458           "insert into #FieldTable (field) " +
459           "select field = convert(varchar(255), " +
460           "@class_details>>getFirstField()) " +
461           "while (select @class_details>>hasMoreFields()) = 1 " +
462           "begin " +
463           "insert into #FieldTable (field) " +
464           "(select field = convert(varchar(255), " +
465           "@class_details>>getNextField())) " +
466           "end " +
467           "end " +
468           "end"
469           )
470   
471           select @maxlen = max(char_length(interface)) from #InterfaceTable
472           if @maxlen is not NULL
473           begin
474               select @val = convert(char(10), @maxlen)
475               exec ('select "Implemented Interfaces" = convert(varchar('
476               + @val + '), interface) from #InterfaceTable')
477               print ""
478           end
479   
480           select @maxlen = max(char_length(constructor)) from #ConstructorTable
481           if @maxlen is not NULL
482           begin
483               select @val = convert(char(10), @maxlen)
484               exec ('select "Constructors" = convert(varchar(' + @val + '), 
485   		constructor) from #ConstructorTable')
486               print ""
487           end
488   
489           select @maxlen = max(char_length(method)) from #MethodTable
490           if @maxlen is not NULL
491           begin
492               select @val = convert(char(10), @maxlen)
493               exec ('select "Methods" = convert(varchar(' + @val + '), 
494   		method) from #MethodTable')
495               print ""
496           end
497   
498           select @maxlen = max(char_length(field)) from #FieldTable
499           if @maxlen is not NULL
500           begin
501               select @val = convert(char(10), @maxlen)
502               exec ('select "Fields" = convert(varchar(' + @val + '), 
503   		field) from #FieldTable')
504               print ""
505           end
506   
507           return (0)
508   
509       end
510       else
511       begin
512           /* 
513           **18697, "Usage: sp_helpjava ['class' [, name [, 'detail' |, 'depends']]
514           **                            | 'jar' [, name [, 'depends']]]"
515           */
516           raiserror 18697
517           return (1)
518       end
519   
520   


exec sp_procxmode 'sp_helpjava', 'AnyMode'
go

Grant Execute on sp_helpjava to public
go
DEFECTS
 QCAR 6 Cartesian product between tables sybsystemprocs..sysobjects o and [sybsystemprocs..sysusers u] 210
 QCAR 6 Cartesian product between tables sybsystemprocs..sysobjects o and [sybsystemprocs..sysusers u] 227
 QCAR 6 Cartesian product between tables sybsystemprocs..sysobjects o and [sybsystemprocs..sysusers u] 277
 QCAR 6 Cartesian product between tables sybsystemprocs..sysobjects o and [sybsystemprocs..sysusers u] 293
 QJWI 5 Join or Sarg Without Index 83
 MEST 4 Empty String will be replaced by Single Space 75
 MEST 4 Empty String will be replaced by Single Space 80
 MEST 4 Empty String will be replaced by Single Space 90
 MEST 4 Empty String will be replaced by Single Space 97
 MEST 4 Empty String will be replaced by Single Space 477
 MEST 4 Empty String will be replaced by Single Space 486
 MEST 4 Empty String will be replaced by Single Space 495
 MEST 4 Empty String will be replaced by Single Space 504
 MINU 4 Unique Index with nullable columns master..sysconfigures master..sysconfigures
 MINU 4 Unique Index with nullable columns master..sysmessages master..sysmessages
 MINU 4 Unique Index with nullable columns sybsystemprocs..sysjars sybsystemprocs..sysjars
 MINU 4 Unique Index with nullable columns sybsystemprocs..sysxtypes sybsystemprocs..sysxtypes
 MPSI 4 Possible SQL Injection @object_name 374
 MUSP 4 Unquoted String Parameter sybsystemprocs..sp_autoformat: @fulltabname 85
 MUSP 4 Unquoted String Parameter sybsystemprocs..sp_autoformat: @fulltabname 93
 MUSP 4 Unquoted String Parameter sybsystemprocs..sp_autoformat: @fulltabname 110
 MUSP 4 Unquoted String Parameter sybsystemprocs..sp_autoformat: @fulltabname 126
 MUSP 4 Unquoted String Parameter sybsystemprocs..sp_autoformat: @fulltabname 148
 MUSP 4 Unquoted String Parameter sybsystemprocs..sp_autoformat: @fulltabname 157
 MUSP 4 Unquoted String Parameter sybsystemprocs..sp_autoformat: @fulltabname 240
 MUSP 4 Unquoted String Parameter sybsystemprocs..sp_autoformat: @fulltabname 304
 QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int 60
 QTYP 4 Comparison type mismatch smallint = int 60
 TNOU 4 Table with no unique index master..spt_values master..spt_values
 MDYN 3 Proc uses Dynamic SQL but is not flagged with Dynamic Ownership Chain 19
 MGTP 3 Grant to public master..spt_values  
 MGTP 3 Grant to public master..sysconfigures  
 MGTP 3 Grant to public master..sysmessages  
 MGTP 3 Grant to public sybsystemprocs..sp_helpjava  
 MGTP 3 Grant to public sybsystemprocs..syscolumns  
 MGTP 3 Grant to public sybsystemprocs..sysdepends  
 MGTP 3 Grant to public sybsystemprocs..sysjars  
 MGTP 3 Grant to public sybsystemprocs..sysobjects  
 MGTP 3 Grant to public sybsystemprocs..sysusers  
 MGTP 3 Grant to public sybsystemprocs..sysxtypes  
 MNER 3 No Error Check should check @@error after select into 79
 MNER 3 No Error Check should check return value of exec 85
 MNER 3 No Error Check should check return value of exec 93
 MNER 3 No Error Check should check return value of exec 110
 MNER 3 No Error Check should check return value of exec 126
 MNER 3 No Error Check should check @@error after select into 144
 MNER 3 No Error Check should check return value of exec 148
 MNER 3 No Error Check should check @@error after select into 152
 MNER 3 No Error Check should check return value of exec 157
 MNER 3 No Error Check should check return value of exec 203
 MNER 3 No Error Check should check @@error after select into 205
 MNER 3 No Error Check should check return value of exec 240
 MNER 3 No Error Check should check return value of exec 269
 MNER 3 No Error Check should check @@error after select into 272
 MNER 3 No Error Check should check return value of exec 304
 MUCO 3 Useless Code Useless Brackets 43
 MUCO 3 Useless Code Useless Brackets 98
 MUCO 3 Useless Code Useless Brackets 114
 MUCO 3 Useless Code Useless Brackets 130
 MUCO 3 Useless Code Useless Brackets 161
 MUCO 3 Useless Code Useless Brackets 167
 MUCO 3 Useless Code Useless Brackets 192
 MUCO 3 Useless Code Useless Brackets 248
 MUCO 3 Useless Code Useless Brackets 254
 MUCO 3 Useless Code Useless Brackets 263
 MUCO 3 Useless Code Useless Brackets 307
 MUCO 3 Useless Code Useless Brackets 318
 MUCO 3 Useless Code Useless Brackets 507
 MUCO 3 Useless Code Useless Brackets 517
 MUIN 3 Column created using implicit nullability 330
 MUIN 3 Column created using implicit nullability 331
 MUIN 3 Column created using implicit nullability 332
 MUIN 3 Column created using implicit nullability 333
 QCTC 3 Conditional Table Creation 79
 QCTC 3 Conditional Table Creation 144
 QCTC 3 Conditional Table Creation 152
 QCTC 3 Conditional Table Creation 205
 QCTC 3 Conditional Table Creation 272
 QCTC 3 Conditional Table Creation 330
 QCTC 3 Conditional Table Creation 331
 QCTC 3 Conditional Table Creation 332
 QCTC 3 Conditional Table Creation 333
 QDIS 3 Check correct use of 'select distinct' 205
 QDIS 3 Check correct use of 'select distinct' 223
 QDIS 3 Check correct use of 'select distinct' 272
 QDIS 3 Check correct use of 'select distinct' 289
 QGWO 3 Group by/Distinct/Union without order by 205
 QGWO 3 Group by/Distinct/Union without order by 223
 QGWO 3 Group by/Distinct/Union without order by 272
 QGWO 3 Group by/Distinct/Union without order by 289
 QISO 3 Set isolation level 51
 QNAJ 3 Not using ANSI Inner Join 154
 QNAJ 3 Not using ANSI Inner Join 185
 QNAJ 3 Not using ANSI Inner Join 194
 QNAJ 3 Not using ANSI Inner Join 210
 QNAJ 3 Not using ANSI Inner Join 227
 QNAJ 3 Not using ANSI Inner Join 277
 QNAJ 3 Not using ANSI Inner Join 293
 QNAO 3 Not using ANSI Outer Join 82
 QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: sysconfigures.csysconfigures unique clustered
(name, parent, config)
Intersection: {name}
34
 QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: sysmessages.ncsysmessages unique
(error, dlevel, langid)
Intersection: {error, langid}
58
 QPRI 3 Join or Sarg with Rooted Partial Index Use JOIN Candidate index: sysmessages.ncsysmessages unique
(error, dlevel, langid)
Intersection: {error}
Uncovered: [dlevel, langid]
221
 QPRI 3 Join or Sarg with Rooted Partial Index Use JOIN Candidate index: sysmessages.ncsysmessages unique
(error, dlevel, langid)
Intersection: {error}
Uncovered: [dlevel, langid]
239
 QPRI 3 Join or Sarg with Rooted Partial Index Use JOIN Candidate index: sysmessages.ncsysmessages unique
(error, dlevel, langid)
Intersection: {error}
Uncovered: [dlevel, langid]
287
 QPRI 3 Join or Sarg with Rooted Partial Index Use JOIN Candidate index: sysmessages.ncsysmessages unique
(error, dlevel, langid)
Intersection: {error}
Uncovered: [dlevel, langid]
303
 QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: sysconfigures.csysconfigures unique clustered
(name, parent, config)
Intersection: {name}
365
 QUNI 3 Check Use of 'union' vs 'union all' 205
 QUNI 3 Check Use of 'union' vs 'union all' 272
 VNRD 3 Variable is not read @sptlang 61
 VUNU 3 Variable is not used @method_variable 26
 CRDO 2 Read Only Cursor Marker (has for read only clause) 184
 MDYS 2 Dynamic SQL Marker 374
 MDYS 2 Dynamic SQL Marker 475
 MDYS 2 Dynamic SQL Marker 484
 MDYS 2 Dynamic SQL Marker 493
 MDYS 2 Dynamic SQL Marker 502
 MSUB 2 Subquery Marker 33
 MSUB 2 Subquery Marker 57
 MSUB 2 Subquery Marker 139
 MSUB 2 Subquery Marker 179
 MSUB 2 Subquery Marker 194
 MSUB 2 Subquery Marker 365
 MTR1 2 Metrics: Comments Ratio Comments: 23% 19
 MTR2 2 Metrics: Cyclomatic Complexity Cyclo: 67 = 77dec - 12exi + 2 19
 MTR3 2 Metrics: Query Complexity Complexity: 252 19
 PRED_QUERY_COLLECTION 2 {j=sybsystemprocs..sysjars, x=sybsystemprocs..sysxtypes} 0 152
 PRED_QUERY_COLLECTION 2 {j=sybsystemprocs..sysjars, x=sybsystemprocs..sysxtypes} 0 184
 PRED_QUERY_COLLECTION 2 {c=sybsystemprocs..syscolumns, d=sybsystemprocs..sysdepends, x=sybsystemprocs..sysxtypes} 0 194
 PRED_QUERY_COLLECTION 2 {d=sybsystemprocs..sysdepends, m=master..sysmessages, o=sybsystemprocs..sysobjects, sv=master..spt_values, x=sybsystemprocs..sysxtypes} 0 205
 PRED_QUERY_COLLECTION 2 {c=sybsystemprocs..syscolumns, m=master..sysmessages, o=sybsystemprocs..sysobjects, sv=master..spt_values, x=sybsystemprocs..sysxtypes} 0 223
 PRED_QUERY_COLLECTION 2 {d=sybsystemprocs..sysdepends, m=master..sysmessages, o=sybsystemprocs..sysobjects, sv=master..spt_values, x=sybsystemprocs..sysxtypes} 0 272
 PRED_QUERY_COLLECTION 2 {c=sybsystemprocs..syscolumns, m=master..sysmessages, o=sybsystemprocs..sysobjects, sv=master..spt_values, x=sybsystemprocs..sysxtypes} 0 289

DEPENDENCIES
PROCS AND TABLES USED
reads table sybsystemprocs..sysobjects  
writes table tempdb..#sphelpjava4rs (1) 
read_writes table tempdb..#FieldTable (1) 
read_writes table tempdb..#ConstructorTable (1) 
writes table tempdb..#sphelpjava2rs (1) 
writes table tempdb..#sphelpjava3rs (1) 
writes table tempdb..#sphelpjava1rs (1) 
calls proc sybsystemprocs..sp_getmessage  
   reads table master..syslanguages (1)  
   reads table sybsystemprocs..sysusermessages  
   reads table master..sysmessages (1)  
   calls proc sybsystemprocs..sp_validlang  
      reads table master..syslanguages (1)  
reads table sybsystemprocs..sysjars  
reads table sybsystemprocs..sysdepends  
reads table sybsystemprocs..sysusers  
calls proc sybsystemprocs..sp_autoformat  
   reads table master..syscolumns (1)  
   read_writes table tempdb..#colinfo_af (1) 
   reads table tempdb..syscolumns (1)  
   reads table master..systypes (1)  
   calls proc sybsystemprocs..sp_autoformat  
   reads table tempdb..systypes (1)  
   calls proc sybsystemprocs..sp_namecrack  
reads table sybsystemprocs..sysxtypes  
reads table master..sysconfigures (1)  
reads table master..spt_values (1)  
reads table master..sysmessages (1)  
read_writes table tempdb..#MethodTable (1) 
read_writes table tempdb..#InterfaceTable (1) 
writes table tempdb..#sphelpjava5rs (1) 
reads table sybsystemprocs..syscolumns