DatabaseProcApplicationCreatedLinks
sybsystemprocssp_ldapadmin  14 déc. 14Defects Propagation Dependencies

1     
2     
3     /* 
4     ** file: ldapadmin 
5     ** Administer LDAP User Authentication
6     **
7     ** Note: sp_ldapadmin uses the ssl_admin() built-in function to
8     ** transition into ASE executable from this stored procedure. 
9     **
10    ** amadsen January 2003
11    **
12    */
13    
14    /*
15    ** Messages for "sp_ldapadmin"
16    **
17    ** 17260, "Can't run %1! from within a transaction."
18    ** 
19    */
20    create or replace procedure sp_ldapadmin
21        @cmd varchar(4096) = null,
22        @opt1 varchar(4096) = null,
23        @opt2 varchar(4096) = null
24    as
25    
26        /*
27        ** Parameters are nominally allowed very large lengths here.
28        ** However, lengths are checked in the builtin function to detect and
29        ** report appropriate errors.  Otherwise parameters would be silently
30        ** truncated by this stored procedure.
31        */
32    
33        /* return value from ssl_admin() built-in function */
34        declare @retval int
35    
36        /* local variables for URL values and access account DN */
37        declare @primaryURL varchar(255)
38        declare @secondaryURL varchar(255)
39        declare @dnlookupURL varchar(255)
40        declare @secdnlookupURL varchar(255)
41        declare @accessacctDN varchar(255)
42        declare @secaccessacctDN varchar(255)
43    
44        declare @isLDAPSSupported int
45        declare @primaryTLS int
46        declare @secondaryTLS int
47        declare @primarystate int
48        declare @secondarystate int
49        declare @primarystatus varchar(10)
50        declare @secondarystatus varchar(10)
51    
52        declare @timeoutvalue int
53        declare @maxldapuantvthrds int
54        declare @maxntvthrds int
55        declare @dumpthrds int
56        declare @true varchar(10)
57        declare @false varchar(10)
58        declare @abandon int
59        /* Maximum LDAPUA descriptors per engine */
60        declare @maxldapuadesc int
61        /*
62        ** Log interval that determines frequency of sending messages to error log.
63        ** Expressed in minutes.
64        */
65        declare @log_interval int
66        /* Number of times to retry LDAPUA */
67        declare @numretries int
68        declare @failback_interval int
69    
70        declare @valid_opt1 varchar(4096)
71        declare @nullarg char(1)
72        declare @dummy int
73        declare @status int
74        declare @gp_enabled int
75    
76    
77    
78    
79        /*
80        ** Establish a version to pass to built-in function.
81        */
82        declare @vers int
83        select @vers = 0
84        select @timeoutvalue = NULL
85        select @maxldapuantvthrds = NULL
86        select @abandon = NULL
87        select @primarystate = NULL
88        select @secondarystate = NULL
89        select @maxldapuadesc = NULL
90        select @log_interval = NULL
91        select @numretries = NULL
92    
93        select @valid_opt1 = @opt1
94    
95    
96        /*
97        **  If we're in a transaction, disallow this since it might make recovery
98        **  impossible.
99        */
100       if @@trancount > 0
101       begin
102           /*
103           ** 17260, "Can't run %1! from within a transaction."
104           */
105           raiserror 17260, "sp_ldapadmin"
106           return (1)
107       end
108       else
109       begin
110           set chained off
111       end
112       set transaction isolation level 1
113   
114       /* 
115       ** If granular permissions is not enabled then sso_role is required.
116       ** If granular permissions is enabled then the permission 
117       ** 'manage security configuration' is required.  proc_role and proc_auditperm 
118       ** will also do auditing if required. Both will also print error message if 
119       ** required.
120       */
121   
122       select @nullarg = NULL
123       execute @status = sp_aux_checkroleperm "sso_role",
124           "manage security configuration", @nullarg, @gp_enabled output
125   
126       /* For Auditing */
127       if (@gp_enabled = 0)
128       begin
129           if (proc_role("sso_role") = 0)
130               return (1)
131       end
132       else
133       begin
134           select @dummy = proc_auditperm("manage security configuration", @status)
135       end
136   
137       if (@status != 0)
138           return (1)
139   
140       select @isLDAPSSupported = ssl_admin("is_ldaps_supported", "", "", @vers)
141   
142       /*
143       **  Begin command processing.
144       */
145   
146       if (@cmd = "set_primary_url") or (@cmd = "set_secondary_url") or
147           (@cmd = "set_dn_lookup_url") or (@cmd = "set_access_acct") or
148           (@cmd = "set_secondary_dn_lookup_url") or
149           (@cmd = "suspend") or (@cmd = "activate") or
150           (@cmd = "set_secondary_access_acct") or
151           (@cmd = "list_access_acct") or
152           (@cmd = "list_urls") or (@cmd = "check_url") or
153           (@cmd = "check_login") or (@cmd is NULL) or
154           (@cmd = "list") or
155           (@cmd = "set_timeout") or
156           (@cmd = "set_max_ldapua_native_threads") or
157           (@cmd = "set_abandon_ldapua_when_full") or
158           (@cmd = "set_max_ldapua_desc") or
159           (@cmd = "set_log_interval") or
160           (@cmd = "set_num_retries") or
161           (@cmd = "starttls_on_primary") or
162           (@cmd = "starttls_on_secondary") or
163           (@cmd = "set_failback_interval") or
164           (@cmd = "reinit_descriptors")
165       begin
166   
167           /* Process list, NULL, and list_urls command in sproc instead of builtin */
168           if (@cmd = "list_urls") or (@cmd = "list") or (@cmd is NULL)
169           begin
170               select @primaryURL = comments, @primarystate = int_value
171               from master.dbo.sysattributes
172               where class = 17 and attribute = 0
173   
174               select @secondaryURL = comments, @secondarystate = int_value
175               from master.dbo.sysattributes
176               where class = 17 and attribute = 1
177   
178               select @dnlookupURL = comments from master.dbo.sysattributes
179               where class = 17 and attribute = 2
180   
181               select @secdnlookupURL = comments from master.dbo.sysattributes
182               where class = 17 and attribute = 7
183   
184               select @primaryTLS = int_value from master.dbo.sysattributes
185               where class = 17 and attribute = 12
186   
187               select @secondaryTLS = int_value from master.dbo.sysattributes
188               where class = 17 and attribute = 13
189   
190               if (@cmd = "list_urls")
191               begin
192                   print "Primary URL:                   '%1!'", @primaryURL
193                   print "Secondary URL:                 '%1!'", @secondaryURL
194                   print "Distinguished Name Lookup URL: '%1!'", @dnlookupURL
195                   print "Secondary Distinguished Name Lookup URL: '%1!'", @secdnlookupURL
196                   return (0)
197               end
198               /* End Processing of list_urls , quit */
199   
200               /* Process 'list' and 'NULL' commands. Both commands produce 
201               ** the same output .
202               */
203               select @accessacctDN = comments
204               from master.dbo.sysattributes
205               where class = 17 and attribute = 3
206   
207               select @timeoutvalue = int_value from
208                   master.dbo.sysattributes
209               where class = 17 and attribute = 4
210   
211               select @maxldapuantvthrds = int_value from
212                   master.dbo.sysattributes
213               where class = 17 and attribute = 5
214   
215               select @abandon = int_value from
216                   master.dbo.sysattributes
217               where class = 17 and attribute = 6
218   
219               select @secaccessacctDN = comments
220               from master.dbo.sysattributes
221               where class = 17 and attribute = 8
222   
223               select @maxldapuadesc = int_value from
224                   master.dbo.sysattributes
225               where class = 17 and attribute = 9
226   
227               select @log_interval = int_value from
228                   master.dbo.sysattributes
229               where class = 17 and attribute = 10
230   
231               select @numretries = int_value from
232                   master.dbo.sysattributes
233               where class = 17 and attribute = 11
234   
235               select @failback_interval = int_value from
236                   master.dbo.sysattributes
237               where class = 17 and attribute = 14
238   
239   
240               /******* Start LDAP URL and state information *********/
241   
242               select @primarystatus =
243                   case @primarystate
244                       when 1 then "RESET"
245                       when 2 then "READY"
246                       when 3 then "ACTIVE"
247                       when 4 then "FAILED"
248                       when 5 then "SUSPENDED"
249                       else "NOT SET"
250                   end
251   
252               if (@primaryURL != NULL and @primarystate is NULL)
253                   select @primarystatus = "READY"
254   
255               select @secondarystatus =
256                   case @secondarystate
257                       when 1 then "RESET"
258                       when 2 then "READY"
259                       when 3 then "ACTIVE"
260                       when 4 then "FAILED"
261                       when 5 then "SUSPENDED"
262                       else "NOT SET"
263                   end
264   
265               if (@secondaryURL != NULL and @secondarystate is NULL)
266                   select @secondarystatus = "READY"
267   
268   
269               print "Primary:"
270               print "    URL:                 '%1!'", @primaryURL
271               print "    DN Lookup URL:       '%1!'", @dnlookupURL
272               print "    Access Account:      '%1!'", @accessacctDN
273               if (@primarystate = 2 or @primarystate = 3)
274                   print "    Active:              'TRUE'"
275               else
276                   print "    Active:              'FALSE'"
277               print "    Status:              '%1!'", @primarystatus
278               if (@isLDAPSSupported = 1)
279               begin
280                   if (@primaryTLS = 1)
281                       print "    StartTLS on Primary LDAP URL: 'TRUE'"
282                   else
283                       print "    StartTLS on Primary LDAP URL: 'FALSE'"
284               end
285               print "Secondary:"
286               print "    URL:                 '%1!'", @secondaryURL
287               print "    DN Lookup URL:       '%1!'", @secdnlookupURL
288               print "    Access Account:      '%1!'", @secaccessacctDN
289               if (@secondarystate = 2 or @secondarystate = 3)
290                   print "    Active:              'TRUE'"
291               else
292                   print "    Active:              'FALSE'"
293               print "    Status:              '%1!'", @secondarystatus
294               if (@isLDAPSSupported = 1)
295               begin
296                   if (@secondaryTLS = 1)
297                       print "    StartTLS on Secondary LDAP URL: 'TRUE'"
298                   else
299                       print "    StartTLS on Secondary LDAP URL: 'FALSE'"
300               end
301   
302               /******* End LDAP URL state information *********/
303   
304   
305   
306               /* Now print timeout and LDAPUA native thread information */
307   
308               select @retval = @@error
309   
310   
311               if (@timeoutvalue = NULL)
312               begin
313                   /* Default value */
314                   select @timeoutvalue = - 1
315               end
316   
317               if (@failback_interval = NULL)
318               begin
319                   /* Use default failback time if nothing is set */
320                   select @failback_interval = - 1
321               end
322   
323   
324               /* 
325               ** If there is no row for timeout in sysattributes then
326               ** the default -1(10000) milliseconds value is listed.
327               ** When the default timeout value is changed, this
328               ** listing also needs to be changed.
329               */
330               if (@timeoutvalue = - 1)
331                   print "Timeout value:           '%1!'(10000) milliseconds",
332                       @timeoutvalue
333               else
334                   print "Timeout value:           '%1!' milliseconds",
335                       @timeoutvalue
336   
337               if (@log_interval = NULL)
338               begin
339                   select @log_interval = 3
340               end
341               print "Log interval:		 '%1!' minutes",
342                   @log_interval
343   
344               if (@numretries = NULL)
345               begin
346                   select @numretries = 3
347               end
348               print "Number of retries:	 '%1!'",
349                   @numretries
350   
351               /* display default value when row not found.*/
352               if (@maxldapuantvthrds = NULL)
353               begin
354                   /* 
355                   ** Default value: Maximum ldapua native threads per engine
356                   ** is sum of max native threads per engine and the number
357                   ** of dump threads.
358                   */
359                   select @maxntvthrds = value from
360                       master.dbo.sysconfigures where
361                       name = 'max native threads per engine'
362                   select @dumpthrds = value from
363                       master.dbo.sysconfigures where
364                       name = 'number of dump threads'
365                   select @maxldapuantvthrds = @maxntvthrds -
366                       @dumpthrds
367               end
368               print "Maximum LDAPUA native threads per Engine: '%1!'",
369                   @maxldapuantvthrds
370   
371               if (@maxldapuadesc = NULL)
372               begin
373                   select @maxldapuadesc = 20
374               end
375               print "Maximum LDAPUA descriptors per Engine: '%1!'",
376                   @maxldapuadesc
377   
378               /* display default value when row not found.*/
379               if (@abandon = NULL)
380               begin
381                   select @abandon = 0
382               end
383               if (@abandon = 1)
384               begin
385                   /* 17431, "true" */
386                   exec sp_getmessage 17431, @true out
387               end
388               else
389               begin
390                   /* 17432, "false" */
391                   exec sp_getmessage 17432, @true out
392               end
393               print "Abandon LDAP user authentication when full: '%1!'", @true
394   
395               if (@failback_interval = - 1)
396                   print "Failback interval:	 '%1!'(15) minutes", @failback_interval
397               else
398               begin
399                   if (@failback_interval = 0)
400                       print "Failback interval:	 '%1!'(infinite) minutes", @failback_interval
401                   else
402                       print "Failback interval:	 '%1!' minutes", @failback_interval
403               end
404           end
405           else
406           begin
407               if (@cmd = "list_access_acct")
408               begin
409                   select @accessacctDN = comments
410                   from master.dbo.sysattributes
411                   where class = 17 and attribute = 3
412   
413                   select @secaccessacctDN = comments
414                   from master.dbo.sysattributes
415                   where class = 17 and attribute = 8
416   
417                   select @retval = @@error
418   
419                   print "Access Account DN:     '%1!'", @accessacctDN
420                   print "Secondary Access Account DN:     '%1!'", @secaccessacctDN
421   
422               end
423               else
424               begin
425                   if (@cmd = "suspend") or (@cmd = "activate") or
426                       (@cmd = "set_timeout") or
427                       (@cmd = "set_max_ldapua_native_threads") or
428                       (@cmd = "set_abandon_ldapua_when_full") or
429                       (@cmd = "set_max_ldapua_desc") or
430                       (@cmd = "set_log_interval") or
431                       (@cmd = "set_num_retries") or
432                       (@cmd = "starttls_on_primary") or
433                       (@cmd = "starttls_on_secondary") or
434                       (@cmd = "set_failback_interval")
435                   begin
436                       select @valid_opt1 = rtrim(ltrim(@opt1))
437                   end
438                   /* validate {true|false} valid_opt1  */
439                   if (@cmd = "set_abandon_ldapua_when_full") or
440                       (@cmd = "starttls_on_primary") or
441                       (@cmd = "starttls_on_secondary")
442                   begin
443                       /* 17431, "true" */
444                       exec sp_getmessage 17431, @true out
445   
446                       /* 17432, "false" */
447                       exec sp_getmessage 17432, @false out
448                       if ((@valid_opt1 != NULL)
449                               and ((lower(@valid_opt1) not in ("true", @true))
450                                   and (lower(@valid_opt1) not in ("false", @false))))
451                       begin
452                           /*
453                           ** 19022, 
454                           **"The '%1!' parameter must be 'true' or 'false'."
455                           */
456                           raiserror 19022, @valid_opt1
457                           return 1
458                       end
459                   end
460                   /* command actions handled in builtin */
461                   select @retval = ssl_admin(@cmd, @valid_opt1, @opt2, @vers)
462               end
463           end
464   
465           if (@retval != 0)
466           begin
467               return (1)
468           end
469       end
470       else
471       begin
472   
473           print "sp_ldapadmin Usage: sp_ldapadmin command [, option1 [, option2]]"
474           print "sp_ldapadmin commands:"
475           print "sp_ldapadmin 'set_primary_url', 'url'"
476           print "sp_ldapadmin 'set_secondary_url', 'url'"
477           print "sp_ldapadmin 'set_dn_lookup_url', 'url'"
478           print "sp_ldapadmin 'set_secondary_dn_lookup_url', 'url'"
479           print "sp_ldapadmin 'set_access_acct', 'distinguished name', 'password'"
480           print "sp_ldapadmin 'set_secondary_access_acct', 'distinguished name', 'password'"
481           print "sp_ldapadmin 'suspend', {'primary' | 'secondary'}"
482           print "sp_ldapadmin 'activate', {'primary' | 'secondary'}"
483           print "sp_ldapadmin 'list'"
484           print "sp_ldapadmin 'list_urls'"
485           print "sp_ldapadmin 'list_access_acct'"
486           print "sp_ldapadmin 'check_url', 'url'"
487           print "sp_ldapadmin 'check_login', 'name'"
488           print "sp_ldapadmin 'set_timeout', timeout_in_milli_seconds"
489           print "sp_ldapadmin 'set_log_interval', log_interval in minutes"
490           print "sp_ldapadmin 'set_num_retries', num_retries"
491           print "sp_ldapadmin 'set_max_ldapua_native_threads', max_ldapua_native_threads"
492           print "sp_ldapadmin 'set_max_ldapua_desc', max_ldapua_desc"
493           print "sp_ldapadmin 'set_abandon_ldapua_when_full', {true|false}"
494           if (@isLDAPSSupported = 1)
495           begin
496               print "sp_ldapadmin 'starttls_on_primary', {true|false}"
497               print "sp_ldapadmin 'starttls_on_secondary', {true|false}"
498           end
499           print "sp_ldapadmin 'set_failback_interval', time_in_minutes"
500           print "sp_ldapadmin 'reinit_descriptors'"
501           print "sp_ldapadmin 'help'"
502   
503       end
504   
505   
506   
507       return (0)
508   


exec sp_procxmode 'sp_ldapadmin', 'AnyMode'
go

Grant Execute on sp_ldapadmin to public
go
DEFECTS
 MEST 4 Empty String will be replaced by Single Space 140
 MINU 4 Unique Index with nullable columns master..sysattributes master..sysattributes
 MINU 4 Unique Index with nullable columns master..sysconfigures master..sysconfigures
 QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int 172
 QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int 176
 QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int 179
 QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int 182
 QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int 185
 QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int 188
 QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int 205
 QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int 209
 QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int 213
 QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int 217
 QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int 221
 QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int 225
 QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int 229
 QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int 233
 QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int 237
 QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int 411
 QTYP 4 Comparison type mismatch Comparison type mismatch: smallint vs int 415
 MGTP 3 Grant to public master..sysattributes  
 MGTP 3 Grant to public master..sysconfigures  
 MGTP 3 Grant to public sybsystemprocs..sp_ldapadmin  
 MNAC 3 Not using ANSI 'is null' 252
 MNAC 3 Not using ANSI 'is null' 265
 MNAC 3 Not using ANSI 'is null' 311
 MNAC 3 Not using ANSI 'is null' 317
 MNAC 3 Not using ANSI 'is null' 337
 MNAC 3 Not using ANSI 'is null' 344
 MNAC 3 Not using ANSI 'is null' 352
 MNAC 3 Not using ANSI 'is null' 371
 MNAC 3 Not using ANSI 'is null' 379
 MNAC 3 Not using ANSI 'is null' 448
 MNER 3 No Error Check should check return value of exec 386
 MNER 3 No Error Check should check return value of exec 391
 MNER 3 No Error Check should check return value of exec 444
 MNER 3 No Error Check should check return value of exec 447
 MUCO 3 Useless Code Useless Brackets 106
 MUCO 3 Useless Code Useless Brackets 127
 MUCO 3 Useless Code Useless Brackets 129
 MUCO 3 Useless Code Useless Brackets 130
 MUCO 3 Useless Code Useless Brackets 137
 MUCO 3 Useless Code Useless Brackets 138
 MUCO 3 Useless Code Useless Brackets 190
 MUCO 3 Useless Code Useless Brackets 196
 MUCO 3 Useless Code Useless Brackets 252
 MUCO 3 Useless Code Useless Brackets 265
 MUCO 3 Useless Code Useless Brackets 273
 MUCO 3 Useless Code Useless Brackets 278
 MUCO 3 Useless Code Useless Brackets 280
 MUCO 3 Useless Code Useless Brackets 289
 MUCO 3 Useless Code Useless Brackets 294
 MUCO 3 Useless Code Useless Brackets 296
 MUCO 3 Useless Code Useless Brackets 311
 MUCO 3 Useless Code Useless Brackets 317
 MUCO 3 Useless Code Useless Brackets 330
 MUCO 3 Useless Code Useless Brackets 337
 MUCO 3 Useless Code Useless Brackets 344
 MUCO 3 Useless Code Useless Brackets 352
 MUCO 3 Useless Code Useless Brackets 371
 MUCO 3 Useless Code Useless Brackets 379
 MUCO 3 Useless Code Useless Brackets 383
 MUCO 3 Useless Code Useless Brackets 395
 MUCO 3 Useless Code Useless Brackets 399
 MUCO 3 Useless Code Useless Brackets 407
 MUCO 3 Useless Code Useless Brackets 448
 MUCO 3 Useless Code Useless Brackets 465
 MUCO 3 Useless Code Useless Brackets 467
 MUCO 3 Useless Code Useless Brackets 494
 MUCO 3 Useless Code Useless Brackets 507
 QAFM 3 Var Assignment from potentially many rows 170
 QAFM 3 Var Assignment from potentially many rows 174
 QAFM 3 Var Assignment from potentially many rows 178
 QAFM 3 Var Assignment from potentially many rows 181
 QAFM 3 Var Assignment from potentially many rows 184
 QAFM 3 Var Assignment from potentially many rows 187
 QAFM 3 Var Assignment from potentially many rows 203
 QAFM 3 Var Assignment from potentially many rows 207
 QAFM 3 Var Assignment from potentially many rows 211
 QAFM 3 Var Assignment from potentially many rows 215
 QAFM 3 Var Assignment from potentially many rows 219
 QAFM 3 Var Assignment from potentially many rows 223
 QAFM 3 Var Assignment from potentially many rows 227
 QAFM 3 Var Assignment from potentially many rows 231
 QAFM 3 Var Assignment from potentially many rows 235
 QAFM 3 Var Assignment from potentially many rows 359
 QAFM 3 Var Assignment from potentially many rows 362
 QAFM 3 Var Assignment from potentially many rows 409
 QAFM 3 Var Assignment from potentially many rows 413
 QISO 3 Set isolation level 112
 QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: sysattributes.csysattributes unique clustered
(class, attribute, object_type, object, object_info1, object_info2, object_info3, object_cinfo)
Intersection: {class, attribute}
172
 QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: sysattributes.csysattributes unique clustered
(class, attribute, object_type, object, object_info1, object_info2, object_info3, object_cinfo)
Intersection: {class, attribute}
176
 QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: sysattributes.csysattributes unique clustered
(class, attribute, object_type, object, object_info1, object_info2, object_info3, object_cinfo)
Intersection: {class, attribute}
179
 QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: sysattributes.csysattributes unique clustered
(class, attribute, object_type, object, object_info1, object_info2, object_info3, object_cinfo)
Intersection: {class, attribute}
182
 QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: sysattributes.csysattributes unique clustered
(class, attribute, object_type, object, object_info1, object_info2, object_info3, object_cinfo)
Intersection: {class, attribute}
185
 QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: sysattributes.csysattributes unique clustered
(class, attribute, object_type, object, object_info1, object_info2, object_info3, object_cinfo)
Intersection: {class, attribute}
188
 QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: sysattributes.csysattributes unique clustered
(class, attribute, object_type, object, object_info1, object_info2, object_info3, object_cinfo)
Intersection: {class, attribute}
205
 QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: sysattributes.csysattributes unique clustered
(class, attribute, object_type, object, object_info1, object_info2, object_info3, object_cinfo)
Intersection: {class, attribute}
209
 QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: sysattributes.csysattributes unique clustered
(class, attribute, object_type, object, object_info1, object_info2, object_info3, object_cinfo)
Intersection: {class, attribute}
213
 QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: sysattributes.csysattributes unique clustered
(class, attribute, object_type, object, object_info1, object_info2, object_info3, object_cinfo)
Intersection: {class, attribute}
217
 QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: sysattributes.csysattributes unique clustered
(class, attribute, object_type, object, object_info1, object_info2, object_info3, object_cinfo)
Intersection: {class, attribute}
221
 QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: sysattributes.csysattributes unique clustered
(class, attribute, object_type, object, object_info1, object_info2, object_info3, object_cinfo)
Intersection: {class, attribute}
225
 QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: sysattributes.csysattributes unique clustered
(class, attribute, object_type, object, object_info1, object_info2, object_info3, object_cinfo)
Intersection: {class, attribute}
229
 QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: sysattributes.csysattributes unique clustered
(class, attribute, object_type, object, object_info1, object_info2, object_info3, object_cinfo)
Intersection: {class, attribute}
233
 QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: sysattributes.csysattributes unique clustered
(class, attribute, object_type, object, object_info1, object_info2, object_info3, object_cinfo)
Intersection: {class, attribute}
237
 QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: sysconfigures.csysconfigures unique clustered
(name, parent, config)
Intersection: {name}
361
 QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: sysconfigures.csysconfigures unique clustered
(name, parent, config)
Intersection: {name}
364
 QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: sysattributes.csysattributes unique clustered
(class, attribute, object_type, object, object_info1, object_info2, object_info3, object_cinfo)
Intersection: {class, attribute}
411
 QPRI 3 Join or Sarg with Rooted Partial Index Use SARG Candidate index: sysattributes.csysattributes unique clustered
(class, attribute, object_type, object, object_info1, object_info2, object_info3, object_cinfo)
Intersection: {class, attribute}
415
 VNRD 3 Variable is not read @dummy 134
 MTR1 2 Metrics: Comments Ratio Comments: 17% 20
 MTR2 2 Metrics: Cyclomatic Complexity Cyclo: 89 = 93dec - 6exi + 2 20
 MTR3 2 Metrics: Query Complexity Complexity: 317 20

DEPENDENCIES
PROCS AND TABLES USED
calls proc sybsystemprocs..sp_aux_checkroleperm  
   reads table master..syscurconfigs (1)  
   reads table master..sysconfigures (1)  
reads table master..sysattributes (1)  
reads table master..sysconfigures (1)  
calls proc sybsystemprocs..sp_getmessage  
   reads table sybsystemprocs..sysusermessages  
   reads table master..syslanguages (1)  
   calls proc sybsystemprocs..sp_validlang  
      reads table master..syslanguages (1)  
   reads table master..sysmessages (1)