Initial add of defaria.com
[clearscm.git] / defaria.com / blogs / Status / 2012 / 02 / using-pdsql-to.html
1 <!DOCTYPE html>
2 <html lang="en-us" itemscope itemtype="http://schema.org/Article">
3   <head>
4     <meta charset="utf-8">
5     <meta name="description" content="Using PDSQL to update Clearquest databases Often when you add a new field to a Clearquest database you need to tackle the problem of how to update or set the value on all of your old records. Often specialized scripts...">
6     <meta name="generator" content="Movable Type 5.2.3">
7     <title>Using PDSQL to update Clearquest databases - Status</title>
8     <link rel="alternate" type="application/atom+xml" title="Recent Entries" href="http://defaria.com/blogs/Status/atom.xml">
9     <link rel="canonical" href="http://defaria.com/blogs/Status/2012/02/using-pdsql-to.html">
10     <meta name="viewport" content="width=device-width,initial-scale=1">
11     <link rel="stylesheet" href="http://defaria.com/blogs/Status/styles.css">
12     <!--[if lt IE 9]>
13     <link rel="stylesheet" href="http://defaria.com/blogs/Status/styles_ie.css">
14     <script src="/mt/mt-static/support/theme_static/rainier/js/html5shiv.js"></script>
15     <![endif]-->
16     
17     <link rel="start" href="http://defaria.com/blogs/Status/">
18
19     <link rel="prev" href="http://defaria.com/blogs/Status/2012/01/outlook-top-pos.html" title="Outlook Top Posting">
20     <link rel="next" href="http://defaria.com/blogs/Status/2012/04/perlcritic-1.html" title="Perl::Critic">
21     <!-- Open Graph Protocol -->
22     <meta property="og:type" content="article">
23     <meta property="og:locale" content="en-us">
24     <meta property="og:title" content="Using PDSQL to update Clearquest databases">
25     <meta property="og:url" content="http://defaria.com/blogs/Status/2012/02/using-pdsql-to.html">
26     <meta property="og:description" content="Using PDSQL to update Clearquest databases Often when you add a new field to a Clearquest database you need to tackle the problem of how to update or set the value on all of your old records. Often specialized scripts...">
27     <meta property="og:site_name" content="Status">
28     <meta property="og:image" content="/mt/mt-static/support/theme_static/rainier/img/siteicon-sample.png">
29     <!-- Metadata -->
30     <meta itemprop="description" content="Using PDSQL to update Clearquest databases Often when you add a new field to a Clearquest database you need to tackle the problem of how to update or set the value on all of your old records. Often specialized scripts...">
31     <link itemprop="url" href="http://defaria.com/blogs/Status/2012/02/using-pdsql-to.html">
32     <link itemprop="image" href="/mt/mt-static/support/theme_static/rainier/img/siteicon-sample.png">
33     
34   </head>
35   <body>
36     <div id="container">
37       <div id="container-inner">
38         <header id="header" role="banner">
39           <div id="header-inner">
40             <div id="header-content">
41               <h1>
42                 <a href="http://defaria.com/blogs/Status/">
43
44                   Status
45
46                 </a>
47               </h1>
48               
49             </div>
50
51             <nav role="navigation">
52           <ul>
53             <li><a href="http://defaria.com/blogs/Status/">Home</a></li>
54
55
56           </ul>
57         </nav>
58
59           </div>
60         </header>
61         <div id="content">
62           <div id="content-inner">
63             <ul class="breadcrumb breadcrumb-list">
64               <li class="breadcrumb-list-item"><a href="http://defaria.com/blogs/Status/">Home</a></li>
65               <li class="breadcrumb-list-item">Using PDSQL to update Clearquest databases</li>
66             </ul>
67             <div id="individual-main" class="main" role="main">
68               <article id="entry-1971" class="entry entry-asset asset hentry">
69                 <div class="asset-header">
70                   <h2 itemprop="name" class="asset-name entry-title">Using PDSQL to update Clearquest databases</h2>
71                   <footer class="asset-meta">
72                     <ul class="asset-meta-list">
73                       <li class="asset-meta-list-item">Posted on <time datetime="2012-02-13T15:10:03-08:00" itemprop="datePublished">February 13, 2012</time></li>
74                       <li class="asset-meta-list-item">by <span class="author entry-author vcard"></span></li>
75
76   
77                       <li class="asset-meta-list-item">in <a itemprop="articleSection" rel="tag" href="http://defaria.com/blogs/Status/broadcom/">Broadcom</a></li>
78   
79
80                    </ul>
81                 </footer>
82                 </div>
83                 <div class="entry-content asset-content" itemprop="articleBody">
84                   <h2>Using PDSQL to update Clearquest databases</h2>
85
86 <p>Often when you add a new field to a Clearquest database you need to tackle the problem of how to update or set the value on all of your old records. Often specialized scripts are created to say set the new field to some known value in all of the older records by using the Clearquest API. This takes time to write such scripts and it takes time to run because all of the action hook code needs to be executed to validate the record, etc. Often this is needless rechecking of already correct values of all of the fields in the record. Updates of this kind can take literally hours to process large numbers of records and have all of that action hook code run for no particular reason.</p>
87
88 <p>There is a utility in C:\Program Files\IBM\RationalSDLC\ClearQuest named pdsql. It provides a command line interface to the database directly which you can use to perform updates of fields in a lightning fast manner. The updating of all defect records setting a new field to say "foo" would take literally hours using the Clearquest API but less than a second or two in pdsql.</p>
89                   <h3>Running PDSQL</h3>
90
91 <p>You should have C:\Program Files\IBM\RationalSDLC\ClearQuest in your PATH. When you start up pdsql you need to specify a lot of parameters to connect to the database. Remember you are talking to the database so you must use the true database name, not the Clearquest database name. You can use pdsql -help to see the help usage but usually you'll specify the following parameters:</p>
92
93 <div class=code><pre>
94 $ pdsql -u &lt;username&gt; -p &lt;password&gt; -v ss -s &lt;server&gt; -db &lt;database&gt;
95 </pre></div>
96
97 <p>Note that the username (-u) is the database username. Also the -db is the database name not the Clearquest database name. The -v ss stands for SQLServer and -s is the server name. for ease I have a simply Bash script to get into pdsql that I've named cqsql.sh:</p>
98
99 <div class=code><pre>
100 Ltsdo-adefaria:cat /mcsi/scm_tools/cq/cqsql.sh
101 #!/bin/bash
102 if [ $# -ne 1 ]; then
103   echo "Usage: cqsql <db>"
104   exit 1
105 fi
106  
107 if [ -n "$(type -p rlwrap)" ]; then
108   rlwrap=rlwrap
109 fi
110  
111 $rlwrap pdsql -u &lt;username&gt; -p &lt;password&gt; -v ss -s &lt;server&gt; -db $1
112 </pre></div>
113
114 <p>Once in pdsql you can issue SQL statements. Note that ';' is required to terminate all commands - even quit! Also note there is no command line history and very poor editing. If, for example, you forget and do say an up arrow you have put unprintable characters in your command line and your command will fail. If you use Cygwin and have installed the wonderful utility rlwrap (readline wrap) then you will have a full, bash like command history which is extremely useful!</p>
115
116 <h3>Issuing SQL commands</h3>
117
118 <p>Remember, you are talking to the back end database directly so all field names will be the database field names shown in Clearquest Designer - not the field names that Clearquest users use. Some useful, non SQL commands are tables; and columns <tablename>;. These commands show the table names in the database and the columns in the a particular table.</p>
119
120 <p>Most standard SQL commands work as expected. Here is an example session where I used pdsql to set Reproducible to the string "NO" if it was previously NULL (New short strings are set to NULL when a field is added to a record).</p>
121
122 <div class=code><pre>
123 >select count(*) from defect where reproducible is not null;
124  
125    <EXPR-1>
126          11
127  
128 >select reproducible from defect where reproducible is not null;
129  
130                            reproducible
131                                                 NO
132                                                 NO
133                                                 NO
134                                                 NO
135                                                 NO
136                                                 NO
137                                                 NO
138                                                 NO
139                                                 NO
140                                                 NO
141                                                 NO
142                                                YES
143  
144 >update defect set reproducible = 'NO' where reproducible  is null;
145 93326 rows affected.
146 >
147 </pre></div>
148
149 <p>I used to the count(*) syntax to determine how many of the defect records had reproducible not set to NULL. These would be from any new records created since the action hook code makes sure to set this field to either "YES" or "NO". It's the old records we need to set to "NO" if they were NULL. Since there were only 11 records that were not null I decided to see what they contained. Good, they contain what I expect - "NO"'s and "YES"'s only. Then the simple update command to set reproducible = 'NO' if it was null. This command took a second or two to update 93326 defects!</p>
150
151 <h3>Setting a reference field</h3>
152
153 <p>When you look into the database directly you start learning how Clearquest does some of its magic. For a reference field one does not see the key to the reference field in textual form rather one sees an integer field, a dbid. Records have a dbid which allows direct access to the particular record. This way if the textual representation of the key (i.e. Name in the Certification stateless record as shown here) you only need update one record instead of potentially thousands of referenced records.</p>
154
155 <p>So then how do you change a reference field? The trick is to find the dbid for that stateless record and plop it into the record that references it. Unfortunately, when the stateless record Certification was created its internal table name was never changed from the default "new1" so we need to use the database name for this table - new1. We select the fields for new1 to reveal that 35541127 is the dbid for the "N/A" record in Certification. We then do a small test changing only one record - DB00031023 - carriercertification reference from 0 -> 35541127. Next I checked that this defect (DB00031023) had a Certification of "N/A" in the Clearquest client. It did. So I know this method works.</p>
156
157 <div class=code><pre>
158 >select * from new1;
159  
160        dbid   is_active     version lock_version   locked_by ratl_mastership ratl_keysite          name
161           0        NULL           1            0           0               0            0          NULL
162    35541119           1           1            0           0        16777313     16777313          Grade A
163    35541121           1           1            0           0        16777313     16777313          Grade B
164    35541123           1           1            0           0        16777313     16777313          Grade C
165    35541125           1           1            0           0        16777313     16777313          Grade D
166    35541127           1           1            0           0        16777313     16777313          N/A
167  
168 >select certification from defect where id='DB00031023';
169  
170 certification
171                    0
172  
173 >update defect set certification=35541127 where id='DB00031023';
174 1 rows affected.
175  
176 >select id from defect where id='DB00031024' and certification = 0;
177  
178            id
179 DB00031024
180  
181  
182 >select id from defect where id='DB00031024' and certification = 1;
183  
184            id
185  
186 >select count(*) from defect;
187    <EXPR-1>
188       93407
189  
190 >select count(*) from defect where certification = 0;
191    <EXPR-1>
192       93026
193  
194 >update defect set certification = 35541127 where certification= 0;
195 93025 rows affected.
196 </pre></div>
197                 </div>
198                 <nav class="page-navigation entry-navigation pagination content-nav">
199                   <ul class="page-navigation-list">
200
201                     <li class="page-navigation-list-item page-navigation-prev"><a rel="prev" href="http://defaria.com/blogs/Status/2012/01/outlook-top-pos.html" title="Outlook Top Posting">Previous entry</a></li>
202
203
204                     <li class="page-navigation-list-item page-navigation-next"><a rel="next" href="http://defaria.com/blogs/Status/2012/04/perlcritic-1.html" title="Perl::Critic">Next entry</a></li>
205
206                   </ul>
207                 </nav>
208                 <!--
209 <aside id="zenback" class="zenback feedback">
210   Please paste Zenback script code here.
211 </aside>
212 -->
213                 
214                 
215               </article>
216             </div>
217             <aside class="widgets related" role="complementary">
218               <nav class="widget-search widget">
219   <div class="widget-content">
220     <form method="get" id="search" action="http://defaria.com/mt/mt-search.cgi">
221       <div>
222         <input type="text" name="search" value="" placeholder="Search...">
223
224         <input type="hidden" name="IncludeBlogs" value="8">
225
226         <input type="hidden" name="limit" value="20">
227         <button type="submit" name="button">
228           <img alt="Search" src="/mt/mt-static/support/theme_static/rainier/img/search-icon.png">
229         </button>
230       </div>
231     </form>
232   </div>
233 </nav>
234 <nav class="widget-archive-category widget">
235   <h3 class="widget-header">Categories</h3>
236   <div class="widget-content">
237     
238       
239     <ul class="widget-list">
240       
241       
242       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/ameriquest/">Ameriquest (99)</a>
243       
244       
245       </li>
246       
247     
248       
249       
250       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/audience/">Audience (3)</a>
251       
252       
253       </li>
254       
255     
256       
257       
258       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/broadcom/">Broadcom (76)</a>
259       
260       
261       </li>
262       
263     
264       
265       
266       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/gpdb/">GPDB (35)</a>
267       
268       
269       </li>
270       
271     
272       
273       
274       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/general-dynamics/">General Dynamics (61)</a>
275       
276       
277       </li>
278       
279     
280       
281       
282       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/general-electric/">General Electric (13)</a>
283       
284       
285       </li>
286       
287     
288       
289       
290       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/hewlett-packard/">Hewlett Packard (13)</a>
291       
292       
293       </li>
294       
295     
296       
297       
298       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/lynuxworks/">LynuxWorks (162)</a>
299       
300       
301       </li>
302       
303     
304       
305       
306       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/pqa/">PQA (35)</a>
307       
308       
309       </li>
310       
311     
312       
313       
314       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/salira/">Salira (79)</a>
315       
316       
317       </li>
318       
319     
320       
321       
322       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/tellabs/">Tellabs (2)</a>
323       
324       
325       </li>
326       
327     
328       
329       
330       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/texas-instruments/">Texas Instruments (31)</a>
331       
332       
333       </li>
334       
335     </ul>
336       
337     
338   </div>
339 </nav>
340   
341
342 <nav class="widget-archive-dropdown widget">
343   <h3 class="widget-header">Archives</h3>
344   <div class="widget-content">
345     <select>
346       <option>Select a Month...</option>
347     
348       <option value="http://defaria.com/blogs/Status/2016/02/">February 2016</option>
349     
350   
351     
352       <option value="http://defaria.com/blogs/Status/2014/09/">September 2014</option>
353     
354   
355     
356       <option value="http://defaria.com/blogs/Status/2014/04/">April 2014</option>
357     
358   
359     
360       <option value="http://defaria.com/blogs/Status/2014/03/">March 2014</option>
361     
362   
363     
364       <option value="http://defaria.com/blogs/Status/2013/02/">February 2013</option>
365     
366   
367     
368       <option value="http://defaria.com/blogs/Status/2012/09/">September 2012</option>
369     
370   
371     
372       <option value="http://defaria.com/blogs/Status/2012/08/">August 2012</option>
373     
374   
375     
376       <option value="http://defaria.com/blogs/Status/2012/05/">May 2012</option>
377     
378   
379     
380       <option value="http://defaria.com/blogs/Status/2012/04/">April 2012</option>
381     
382   
383     
384       <option value="http://defaria.com/blogs/Status/2012/02/">February 2012</option>
385     
386   
387     
388       <option value="http://defaria.com/blogs/Status/2012/01/">January 2012</option>
389     
390   
391     
392       <option value="http://defaria.com/blogs/Status/2011/10/">October 2011</option>
393     
394   
395     
396       <option value="http://defaria.com/blogs/Status/2011/07/">July 2011</option>
397     
398   
399     
400       <option value="http://defaria.com/blogs/Status/2010/09/">September 2010</option>
401     
402   
403     
404       <option value="http://defaria.com/blogs/Status/2010/08/">August 2010</option>
405     
406   
407     
408       <option value="http://defaria.com/blogs/Status/2010/04/">April 2010</option>
409     
410   
411     
412       <option value="http://defaria.com/blogs/Status/2010/03/">March 2010</option>
413     
414   
415     
416       <option value="http://defaria.com/blogs/Status/2010/02/">February 2010</option>
417     
418   
419     
420       <option value="http://defaria.com/blogs/Status/2009/05/">May 2009</option>
421     
422   
423     
424       <option value="http://defaria.com/blogs/Status/2009/04/">April 2009</option>
425     
426   
427     
428       <option value="http://defaria.com/blogs/Status/2008/07/">July 2008</option>
429     
430   
431     
432       <option value="http://defaria.com/blogs/Status/2008/05/">May 2008</option>
433     
434   
435     
436       <option value="http://defaria.com/blogs/Status/2008/04/">April 2008</option>
437     
438   
439     
440       <option value="http://defaria.com/blogs/Status/2008/03/">March 2008</option>
441     
442   
443     
444       <option value="http://defaria.com/blogs/Status/2008/02/">February 2008</option>
445     
446   
447     
448       <option value="http://defaria.com/blogs/Status/2008/01/">January 2008</option>
449     
450   
451     
452       <option value="http://defaria.com/blogs/Status/2007/12/">December 2007</option>
453     
454   
455     
456       <option value="http://defaria.com/blogs/Status/2007/11/">November 2007</option>
457     
458   
459     
460       <option value="http://defaria.com/blogs/Status/2007/10/">October 2007</option>
461     
462   
463     
464       <option value="http://defaria.com/blogs/Status/2007/09/">September 2007</option>
465     
466   
467     
468       <option value="http://defaria.com/blogs/Status/2007/08/">August 2007</option>
469     
470   
471     
472       <option value="http://defaria.com/blogs/Status/2007/07/">July 2007</option>
473     
474   
475     
476       <option value="http://defaria.com/blogs/Status/2007/06/">June 2007</option>
477     
478   
479     
480       <option value="http://defaria.com/blogs/Status/2007/05/">May 2007</option>
481     
482   
483     
484       <option value="http://defaria.com/blogs/Status/2007/04/">April 2007</option>
485     
486   
487     
488       <option value="http://defaria.com/blogs/Status/2007/03/">March 2007</option>
489     
490   
491     
492       <option value="http://defaria.com/blogs/Status/2007/01/">January 2007</option>
493     
494   
495     
496       <option value="http://defaria.com/blogs/Status/2006/12/">December 2006</option>
497     
498   
499     
500       <option value="http://defaria.com/blogs/Status/2006/11/">November 2006</option>
501     
502   
503     
504       <option value="http://defaria.com/blogs/Status/2006/10/">October 2006</option>
505     
506   
507     
508       <option value="http://defaria.com/blogs/Status/2006/09/">September 2006</option>
509     
510   
511     
512       <option value="http://defaria.com/blogs/Status/2006/07/">July 2006</option>
513     
514   
515     
516       <option value="http://defaria.com/blogs/Status/2006/06/">June 2006</option>
517     
518   
519     
520       <option value="http://defaria.com/blogs/Status/2006/05/">May 2006</option>
521     
522   
523     
524       <option value="http://defaria.com/blogs/Status/2006/04/">April 2006</option>
525     
526   
527     
528       <option value="http://defaria.com/blogs/Status/2006/03/">March 2006</option>
529     
530   
531     
532       <option value="http://defaria.com/blogs/Status/2006/02/">February 2006</option>
533     
534   
535     
536       <option value="http://defaria.com/blogs/Status/2006/01/">January 2006</option>
537     
538   
539     
540       <option value="http://defaria.com/blogs/Status/2005/12/">December 2005</option>
541     
542   
543     
544       <option value="http://defaria.com/blogs/Status/2005/11/">November 2005</option>
545     
546   
547     
548       <option value="http://defaria.com/blogs/Status/2005/10/">October 2005</option>
549     
550   
551     
552       <option value="http://defaria.com/blogs/Status/2005/09/">September 2005</option>
553     
554   
555     
556       <option value="http://defaria.com/blogs/Status/2005/08/">August 2005</option>
557     
558   
559     
560       <option value="http://defaria.com/blogs/Status/2005/07/">July 2005</option>
561     
562   
563     
564       <option value="http://defaria.com/blogs/Status/2005/06/">June 2005</option>
565     
566   
567     
568       <option value="http://defaria.com/blogs/Status/2005/05/">May 2005</option>
569     
570   
571     
572       <option value="http://defaria.com/blogs/Status/2005/04/">April 2005</option>
573     
574   
575     
576       <option value="http://defaria.com/blogs/Status/2005/03/">March 2005</option>
577     
578   
579     
580       <option value="http://defaria.com/blogs/Status/2005/02/">February 2005</option>
581     
582   
583     
584       <option value="http://defaria.com/blogs/Status/2005/01/">January 2005</option>
585     
586   
587     
588       <option value="http://defaria.com/blogs/Status/2004/12/">December 2004</option>
589     
590   
591     
592       <option value="http://defaria.com/blogs/Status/2004/09/">September 2004</option>
593     
594   
595     
596       <option value="http://defaria.com/blogs/Status/2004/08/">August 2004</option>
597     
598   
599     
600       <option value="http://defaria.com/blogs/Status/2004/07/">July 2004</option>
601     
602   
603     
604       <option value="http://defaria.com/blogs/Status/2004/06/">June 2004</option>
605     
606   
607     
608       <option value="http://defaria.com/blogs/Status/2004/05/">May 2004</option>
609     
610   
611     
612       <option value="http://defaria.com/blogs/Status/2004/04/">April 2004</option>
613     
614   
615     
616       <option value="http://defaria.com/blogs/Status/2004/03/">March 2004</option>
617     
618   
619     
620       <option value="http://defaria.com/blogs/Status/2004/02/">February 2004</option>
621     
622   
623     
624       <option value="http://defaria.com/blogs/Status/2004/01/">January 2004</option>
625     
626   
627     
628       <option value="http://defaria.com/blogs/Status/2003/12/">December 2003</option>
629     
630   
631     
632       <option value="http://defaria.com/blogs/Status/2003/11/">November 2003</option>
633     
634     </select>
635   </div>
636 </nav>
637     
638   
639
640 <div class="widget-syndication widget section">
641   <div class="widget-content">
642     <p><img src="http://defaria.com/mt/mt-static/images/status_icons/feed.gif" alt="Subscribe to feed" width="9" height="9" /> <a href="http://defaria.com/blogs/Status/atom.xml">Subscribe to this blog's feed</a></p>
643
644   </div>
645 </div>
646
647             </aside>
648           </div>
649         </div>
650         <footer id="footer" role="contentinfo">
651           <div id="footer-inner">
652             <div id="footer-content">
653   <nav role="navigation">
654           <ul>
655             <li><a href="http://defaria.com/blogs/Status/">Home</a></li>
656
657
658           </ul>
659         </nav>
660
661   <p class="license">&copy; Copyright 2016.</p>
662   <p class="poweredby">Powered by <a href="http://www.movabletype.org/">Movable Type</a></p>
663 </div>
664           </div>
665         </footer>
666       </div>
667     </div>
668     <script src="http://defaria.com/mt/mt-static/jquery/jquery.min.js"></script>
669     <script src="http://defaria.com/blogs/Status/mt-theme-scale2.js"></script>
670   </body>
671 </html>