0000: 2f 2a 0a 2a 2a 20 43 6f 70 79 72 69 67 68 74 20 /*.** Copyright
0010: 28 63 29 20 32 30 30 37 20 44 2e 20 52 69 63 68 (c) 2007 D. Rich
0020: 61 72 64 20 48 69 70 70 0a 2a 2a 0a 2a 2a 20 54 ard Hipp.**.** T
0030: 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66 his program is f
0040: 72 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f ree software; yo
0050: 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75 u can redistribu
0060: 74 65 20 69 74 20 61 6e 64 2f 6f 72 0a 2a 2a 20 te it and/or.**
0070: 6d 6f 64 69 66 79 20 69 74 20 75 6e 64 65 72 20 modify it under
0080: 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 the terms of the
0090: 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 GNU General Pub
00a0: 6c 69 63 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 61 lic.** License a
00b0: 73 20 70 75 62 6c 69 73 68 65 64 20 62 79 20 74 s published by t
00c0: 68 65 20 46 72 65 65 20 53 6f 66 74 77 61 72 65 he Free Software
00d0: 20 46 6f 75 6e 64 61 74 69 6f 6e 3b 20 65 69 74 Foundation; eit
00e0: 68 65 72 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 32 her.** version 2
00f0: 20 6f 66 20 74 68 65 20 4c 69 63 65 6e 73 65 2c of the License,
0100: 20 6f 72 20 28 61 74 20 79 6f 75 72 20 6f 70 74 or (at your opt
0110: 69 6f 6e 29 20 61 6e 79 20 6c 61 74 65 72 20 76 ion) any later v
0120: 65 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 ersion..**.** Th
0130: 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 is program is di
0140: 73 74 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 stributed in the
0150: 20 68 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 hope that it wi
0160: 6c 6c 20 62 65 20 75 73 65 66 75 6c 2c 0a 2a 2a ll be useful,.**
0170: 20 62 75 74 20 57 49 54 48 4f 55 54 20 41 4e 59 but WITHOUT ANY
0180: 20 57 41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f WARRANTY; witho
0190: 75 74 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c ut even the impl
01a0: 69 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a ied warranty of.
01b0: 2a 2a 20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 ** MERCHANTABILI
01c0: 54 59 20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f TY or FITNESS FO
01d0: 52 20 41 20 50 41 52 54 49 43 55 4c 41 52 20 50 R A PARTICULAR P
01e0: 55 52 50 4f 53 45 2e 20 20 53 65 65 20 74 68 65 URPOSE. See the
01f0: 20 47 4e 55 0a 2a 2a 20 47 65 6e 65 72 61 6c 20 GNU.** General
0200: 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 66 Public License f
0210: 6f 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e or more details.
0220: 0a 2a 2a 20 0a 2a 2a 20 59 6f 75 20 73 68 6f 75 .** .** You shou
0230: 6c 64 20 68 61 76 65 20 72 65 63 65 69 76 65 64 ld have received
0240: 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 47 a copy of the G
0250: 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 NU General Publi
0260: 63 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 61 6c 6f c.** License alo
0270: 6e 67 20 77 69 74 68 20 74 68 69 73 20 6c 69 62 ng with this lib
0280: 72 61 72 79 3b 20 69 66 20 6e 6f 74 2c 20 77 72 rary; if not, wr
0290: 69 74 65 20 74 6f 20 74 68 65 0a 2a 2a 20 46 72 ite to the.** Fr
02a0: 65 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e ee Software Foun
02b0: 64 61 74 69 6f 6e 2c 20 49 6e 63 2e 2c 20 35 39 dation, Inc., 59
02c0: 20 54 65 6d 70 6c 65 20 50 6c 61 63 65 20 2d 20 Temple Place -
02d0: 53 75 69 74 65 20 33 33 30 2c 0a 2a 2a 20 42 6f Suite 330,.** Bo
02e0: 73 74 6f 6e 2c 20 4d 41 20 20 30 32 31 31 31 2d ston, MA 02111-
02f0: 31 33 30 37 2c 20 55 53 41 2e 0a 2a 2a 0a 2a 2a 1307, USA..**.**
0300: 20 41 75 74 68 6f 72 20 63 6f 6e 74 61 63 74 20 Author contact
0310: 69 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a 20 information:.**
0320: 20 20 64 72 68 40 68 77 61 63 69 2e 63 6f 6d 0a drh@hwaci.com.
0330: 2a 2a 20 20 20 68 74 74 70 3a 2f 2f 77 77 77 2e ** http://www.
0340: 68 77 61 63 69 2e 63 6f 6d 2f 64 72 68 2f 0a 2a hwaci.com/drh/.*
0350: 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a *.**************
0360: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0370: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0380: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0390: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
03a0: 2a 0a 2a 2a 20 20 0a 2a 2a 20 43 6f 64 65 20 74 *.** .** Code t
03b0: 6f 20 67 65 6e 65 72 61 74 65 20 74 68 65 20 62 o generate the b
03c0: 75 67 20 72 65 70 6f 72 74 20 6c 69 73 74 69 6e ug report listin
03d0: 67 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 gs.*/.#include "
03e0: 63 6f 6e 66 69 67 2e 68 22 0a 23 69 6e 63 6c 75 config.h".#inclu
03f0: 64 65 20 22 72 65 70 6f 72 74 2e 68 22 0a 23 69 de "report.h".#i
0400: 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 nclude <assert.h
0410: 3e 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 72 65 >../* Forward re
0420: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 61 74 ferences to stat
0430: 69 63 20 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 73 ic routines */.s
0440: 74 61 74 69 63 20 76 6f 69 64 20 72 65 70 6f 72 tatic void repor
0450: 74 5f 66 6f 72 6d 61 74 5f 68 69 6e 74 73 28 76 t_format_hints(v
0460: 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 oid);../*.** WEB
0470: 50 41 47 45 3a 20 2f 72 65 70 6f 72 74 6c 69 73 PAGE: /reportlis
0480: 74 0a 2a 2f 0a 76 6f 69 64 20 76 69 65 77 5f 6c t.*/.void view_l
0490: 69 73 74 28 76 6f 69 64 29 7b 0a 20 20 53 74 6d ist(void){. Stm
04a0: 74 20 71 3b 0a 0a 20 20 6c 6f 67 69 6e 5f 63 68 t q;.. login_ch
04b0: 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 eck_credentials(
04c0: 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b 52 64 );. if( !g.okRd
04d0: 54 6b 74 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 Tkt ){ login_nee
04e0: 64 65 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d ded(); return; }
04f0: 0a 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 . style_header(
0500: 22 41 76 61 69 6c 61 62 6c 65 20 52 65 70 6f 72 "Available Repor
0510: 74 20 46 6f 72 6d 61 74 73 22 29 3b 0a 20 20 64 t Formats");. d
0520: 62 5f 70 72 65 70 61 72 65 28 26 71 2c 20 22 53 b_prepare(&q, "S
0530: 45 4c 45 43 54 20 72 6e 2c 20 74 69 74 6c 65 2c ELECT rn, title,
0540: 20 6f 77 6e 65 72 20 46 52 4f 4d 20 72 65 70 6f owner FROM repo
0550: 72 74 66 6d 74 20 4f 52 44 45 52 20 42 59 20 74 rtfmt ORDER BY t
0560: 69 74 6c 65 22 29 3b 0a 20 20 40 20 3c 70 3e 43 itle");. @ <p>C
0570: 68 6f 6f 73 65 20 61 20 72 65 70 6f 72 74 20 66 hoose a report f
0580: 6f 72 6d 61 74 20 66 72 6f 6d 20 74 68 65 20 66 ormat from the f
0590: 6f 6c 6c 6f 77 69 6e 67 20 6c 69 73 74 3a 3c 2f ollowing list:</
05a0: 70 3e 0a 20 20 40 20 3c 6f 6c 3e 0a 20 20 77 68 p>. @ <ol>. wh
05b0: 69 6c 65 28 20 64 62 5f 73 74 65 70 28 26 71 29 ile( db_step(&q)
05c0: 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a ==SQLITE_ROW ){.
05d0: 20 20 20 20 69 6e 74 20 72 6e 20 3d 20 64 62 5f int rn = db_
05e0: 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 30 column_int(&q, 0
05f0: 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 );. const cha
0600: 72 20 2a 7a 54 69 74 6c 65 20 3d 20 64 62 5f 63 r *zTitle = db_c
0610: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 olumn_text(&q, 1
0620: 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 );. const cha
0630: 72 20 2a 7a 4f 77 6e 65 72 20 3d 20 64 62 5f 63 r *zOwner = db_c
0640: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 32 olumn_text(&q, 2
0650: 29 3b 0a 20 20 20 20 40 20 3c 6c 69 3e 3c 61 20 );. @ <li><a
0660: 68 72 65 66 3d 22 72 70 74 76 69 65 77 3f 72 6e href="rptview?rn
0670: 3d 25 64 28 72 6e 29 22 0a 20 20 20 20 40 20 20 =%d(rn)". @
0680: 20 20 20 20 20 20 72 65 6c 3d 22 6e 6f 66 6f 6c rel="nofol
0690: 6c 6f 77 22 3e 25 68 28 7a 54 69 74 6c 65 29 3c low">%h(zTitle)<
06a0: 2f 61 3e 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 /a> &
06b0: 6e 62 73 70 3b 0a 20 20 20 20 69 66 28 20 67 2e nbsp;. if( g.
06c0: 6f 6b 57 72 69 74 65 20 26 26 20 7a 4f 77 6e 65 okWrite && zOwne
06d0: 72 20 26 26 20 7a 4f 77 6e 65 72 5b 30 5d 20 29 r && zOwner[0] )
06e0: 7b 0a 20 20 20 20 20 20 40 20 28 62 79 20 3c 69 {. @ (by <i
06f0: 3e 25 68 28 7a 4f 77 6e 65 72 29 3c 2f 69 3e 29 >%h(zOwner)</i>)
0700: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 67 . }. if( g
0710: 2e 6f 6b 57 72 54 6b 74 20 29 7b 0a 20 20 20 20 .okWrTkt ){.
0720: 20 20 40 20 5b 3c 61 20 68 72 65 66 3d 22 72 70 @ [<a href="rp
0730: 74 65 64 69 74 3f 72 6e 3d 25 64 28 72 6e 29 26 tedit?rn=%d(rn)&
0740: 61 6d 70 3b 63 6f 70 79 3d 31 22 20 72 65 6c 3d amp;copy=1" rel=
0750: 22 6e 6f 66 6f 6c 6c 6f 77 22 3e 63 6f 70 79 3c "nofollow">copy<
0760: 2f 61 3e 5d 0a 20 20 20 20 7d 0a 20 20 20 20 69 /a>]. }. i
0770: 66 28 20 67 2e 6f 6b 41 64 6d 69 6e 20 7c 7c 20 f( g.okAdmin ||
0780: 28 67 2e 6f 6b 57 72 54 6b 74 20 26 26 20 7a 4f (g.okWrTkt && zO
0790: 77 6e 65 72 20 26 26 20 73 74 72 63 6d 70 28 67 wner && strcmp(g
07a0: 2e 7a 4c 6f 67 69 6e 2c 7a 4f 77 6e 65 72 29 3d .zLogin,zOwner)=
07b0: 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 40 20 5b =0) ){. @ [
07c0: 3c 61 20 68 72 65 66 3d 22 72 70 74 65 64 69 74 <a href="rptedit
07d0: 3f 72 6e 3d 25 64 28 72 6e 29 22 20 72 65 6c 3d ?rn=%d(rn)" rel=
07e0: 22 6e 6f 66 6f 6c 6c 6f 77 22 3e 65 64 69 74 3c "nofollow">edit<
07f0: 2f 61 3e 5d 0a 20 20 20 20 7d 0a 20 20 20 20 40 /a>]. }. @
0800: 20 5b 3c 61 20 68 72 65 66 3d 22 72 70 74 73 71 [<a href="rptsq
0810: 6c 3f 72 6e 3d 25 64 28 72 6e 29 22 20 72 65 6c l?rn=%d(rn)" rel
0820: 3d 22 6e 6f 66 6f 6c 6c 6f 77 22 3e 73 71 6c 3c ="nofollow">sql<
0830: 2f 61 3e 5d 0a 20 20 20 20 40 20 3c 2f 6c 69 3e /a>]. @ </li>
0840: 0a 20 20 7d 0a 20 20 69 66 28 20 67 2e 6f 6b 57 . }. if( g.okW
0850: 72 54 6b 74 20 29 7b 0a 20 20 20 20 40 20 3c 6c rTkt ){. @ <l
0860: 69 3e 3c 61 20 68 72 65 66 3d 22 72 70 74 6e 65 i><a href="rptne
0870: 77 22 3e 43 72 65 61 74 65 20 61 20 6e 65 77 20 w">Create a new
0880: 72 65 70 6f 72 74 20 66 6f 72 6d 61 74 3c 2f 61 report format</a
0890: 3e 3c 2f 6c 69 3e 0a 20 20 7d 0a 20 20 40 20 3c ></li>. }. @ <
08a0: 2f 6f 6c 3e 0a 20 20 73 74 79 6c 65 5f 66 6f 6f /ol>. style_foo
08b0: 74 65 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 ter();.}../*.**
08c0: 52 65 6d 6f 76 65 20 77 68 69 74 65 73 70 61 63 Remove whitespac
08d0: 65 20 66 72 6f 6d 20 62 6f 74 68 20 65 6e 64 73 e from both ends
08e0: 20 6f 66 20 61 20 73 74 72 69 6e 67 2e 0a 2a 2f of a string..*/
08f0: 0a 63 68 61 72 20 2a 74 72 69 6d 5f 73 74 72 69 .char *trim_stri
0900: 6e 67 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a ng(const char *z
0910: 4f 72 69 67 29 7b 0a 20 20 69 6e 74 20 69 3b 0a Orig){. int i;.
0920: 20 20 77 68 69 6c 65 28 20 69 73 73 70 61 63 65 while( isspace
0930: 28 2a 7a 4f 72 69 67 29 20 29 7b 20 7a 4f 72 69 (*zOrig) ){ zOri
0940: 67 2b 2b 3b 20 7d 0a 20 20 69 20 3d 20 73 74 72 g++; }. i = str
0950: 6c 65 6e 28 7a 4f 72 69 67 29 3b 0a 20 20 77 68 len(zOrig);. wh
0960: 69 6c 65 28 20 69 3e 30 20 26 26 20 69 73 73 70 ile( i>0 && issp
0970: 61 63 65 28 7a 4f 72 69 67 5b 69 2d 31 5d 29 20 ace(zOrig[i-1])
0980: 29 7b 20 69 2d 2d 3b 20 7d 0a 20 20 72 65 74 75 ){ i--; }. retu
0990: 72 6e 20 6d 70 72 69 6e 74 66 28 22 25 2e 2a 73 rn mprintf("%.*s
09a0: 22 2c 20 69 2c 20 7a 4f 72 69 67 29 3b 0a 7d 0a ", i, zOrig);.}.
09b0: 0a 2f 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 61 ./*.** Extract a
09c0: 20 6e 75 6d 65 72 69 63 20 28 69 6e 74 65 67 65 numeric (intege
09d0: 72 29 20 76 61 6c 75 65 20 66 72 6f 6d 20 61 20 r) value from a
09e0: 73 74 72 69 6e 67 2e 0a 2a 2f 0a 63 68 61 72 20 string..*/.char
09f0: 2a 65 78 74 72 61 63 74 5f 69 6e 74 65 67 65 72 *extract_integer
0a00: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 72 (const char *zOr
0a10: 69 67 29 7b 0a 20 20 69 66 28 20 7a 4f 72 69 67 ig){. if( zOrig
0a20: 20 3d 3d 20 4e 55 4c 4c 20 7c 7c 20 7a 4f 72 69 == NULL || zOri
0a30: 67 5b 30 5d 20 3d 3d 20 30 20 29 20 72 65 74 75 g[0] == 0 ) retu
0a40: 72 6e 20 22 22 3b 0a 20 20 77 68 69 6c 65 28 20 rn "";. while(
0a50: 2a 7a 4f 72 69 67 20 26 26 20 21 69 73 64 69 67 *zOrig && !isdig
0a60: 69 74 28 2a 7a 4f 72 69 67 29 20 29 7b 20 7a 4f it(*zOrig) ){ zO
0a70: 72 69 67 2b 2b 3b 20 7d 0a 20 20 69 66 28 20 2a rig++; }. if( *
0a80: 7a 4f 72 69 67 20 29 7b 0a 20 20 20 20 2f 2a 20 zOrig ){. /*
0a90: 77 65 20 68 61 76 65 20 61 20 64 69 67 69 74 2e we have a digit.
0aa0: 20 61 74 6f 69 28 29 20 77 69 6c 6c 20 67 65 74 atoi() will get
0ab0: 20 61 73 20 6d 75 63 68 20 6f 66 20 74 68 65 20 as much of the
0ac0: 6e 75 6d 62 65 72 20 61 73 20 69 74 0a 20 20 20 number as it.
0ad0: 20 2a 2a 20 63 61 6e 2e 20 57 65 27 6c 6c 20 72 ** can. We'll r
0ae0: 75 6e 20 69 74 20 74 68 72 6f 75 67 68 20 6d 70 un it through mp
0af0: 72 69 6e 74 66 28 29 20 74 6f 20 67 65 74 20 61 rintf() to get a
0b00: 20 73 74 72 69 6e 67 2e 20 4e 6f 74 0a 20 20 20 string. Not.
0b10: 20 2a 2a 20 61 6e 20 65 66 66 69 63 69 65 6e 74 ** an efficient
0b20: 20 77 61 79 20 74 6f 20 64 6f 20 69 74 2c 20 62 way to do it, b
0b30: 75 74 20 65 66 66 65 63 74 69 76 65 2e 0a 20 20 ut effective..
0b40: 20 20 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 */. return
0b50: 6d 70 72 69 6e 74 66 28 22 25 64 22 2c 20 61 74 mprintf("%d", at
0b60: 6f 69 28 7a 4f 72 69 67 29 29 3b 0a 20 20 7d 0a oi(zOrig));. }.
0b70: 20 20 72 65 74 75 72 6e 20 22 22 3b 0a 7d 0a 0a return "";.}..
0b80: 2f 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 62 6c 61 /*.** Remove bla
0b90: 6e 6b 20 6c 69 6e 65 73 20 66 72 6f 6d 20 74 68 nk lines from th
0ba0: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61 e beginning of a
0bb0: 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 61 string and.** a
0bc0: 6c 6c 20 77 68 69 74 65 73 70 61 63 65 20 66 72 ll whitespace fr
0bd0: 6f 6d 20 74 68 65 20 65 6e 64 2e 20 52 65 6d 6f om the end. Remo
0be0: 76 65 73 20 77 68 69 74 65 73 70 61 63 65 20 70 ves whitespace p
0bf0: 72 65 63 65 65 64 69 6e 67 20 61 20 4e 4c 2c 0a receeding a NL,.
0c00: 2a 2a 20 77 68 69 63 68 20 61 6c 73 6f 20 63 6f ** which also co
0c10: 6e 76 65 72 74 73 20 61 6e 79 20 43 52 4e 4c 20 nverts any CRNL
0c20: 73 65 71 75 65 6e 63 65 20 69 6e 74 6f 20 61 20 sequence into a
0c30: 73 69 6e 67 6c 65 20 4e 4c 2e 0a 2a 2f 0a 63 68 single NL..*/.ch
0c40: 61 72 20 2a 72 65 6d 6f 76 65 5f 62 6c 61 6e 6b ar *remove_blank
0c50: 5f 6c 69 6e 65 73 28 63 6f 6e 73 74 20 63 68 61 _lines(const cha
0c60: 72 20 2a 7a 4f 72 69 67 29 7b 0a 20 20 69 6e 74 r *zOrig){. int
0c70: 20 69 2c 20 6a 2c 20 6e 3b 0a 20 20 63 68 61 72 i, j, n;. char
0c80: 20 2a 7a 3b 0a 20 20 66 6f 72 28 69 3d 6a 3d 30 *z;. for(i=j=0
0c90: 3b 20 69 73 73 70 61 63 65 28 7a 4f 72 69 67 5b ; isspace(zOrig[
0ca0: 69 5d 29 3b 20 69 2b 2b 29 7b 20 69 66 28 20 7a i]); i++){ if( z
0cb0: 4f 72 69 67 5b 69 5d 3d 3d 27 5c 6e 27 20 29 20 Orig[i]=='\n' )
0cc0: 6a 20 3d 20 69 2b 31 3b 20 7d 0a 20 20 6e 20 3d j = i+1; }. n =
0cd0: 20 73 74 72 6c 65 6e 28 26 7a 4f 72 69 67 5b 6a strlen(&zOrig[j
0ce0: 5d 29 3b 0a 20 20 77 68 69 6c 65 28 20 6e 3e 30 ]);. while( n>0
0cf0: 20 26 26 20 69 73 73 70 61 63 65 28 7a 4f 72 69 && isspace(zOri
0d00: 67 5b 6a 2b 6e 2d 31 5d 29 20 29 7b 20 6e 2d 2d g[j+n-1]) ){ n--
0d10: 3b 20 7d 0a 20 20 7a 20 3d 20 6d 70 72 69 6e 74 ; }. z = mprint
0d20: 66 28 22 25 2e 2a 73 22 2c 20 6e 2c 20 26 7a 4f f("%.*s", n, &zO
0d30: 72 69 67 5b 6a 5d 29 3b 0a 20 20 66 6f 72 28 69 rig[j]);. for(i
0d40: 3d 6a 3d 30 3b 20 7a 5b 69 5d 3b 20 69 2b 2b 29 =j=0; z[i]; i++)
0d50: 7b 0a 20 20 20 20 69 66 28 20 7a 5b 69 2b 31 5d {. if( z[i+1]
0d60: 3d 3d 27 5c 6e 27 20 26 26 20 7a 5b 69 5d 21 3d =='\n' && z[i]!=
0d70: 27 5c 6e 27 20 26 26 20 69 73 73 70 61 63 65 28 '\n' && isspace(
0d80: 7a 5b 69 5d 29 20 29 7b 0a 20 20 20 20 20 20 7a z[i]) ){. z
0d90: 5b 6a 5d 20 3d 20 7a 5b 69 5d 3b 0a 20 20 20 20 [j] = z[i];.
0da0: 20 20 77 68 69 6c 65 28 69 73 73 70 61 63 65 28 while(isspace(
0db0: 7a 5b 6a 5d 29 20 26 26 20 7a 5b 6a 5d 20 21 3d z[j]) && z[j] !=
0dc0: 20 27 5c 6e 27 20 29 7b 20 6a 2d 2d 3b 20 7d 0a '\n' ){ j--; }.
0dd0: 20 20 20 20 20 20 6a 2b 2b 3b 0a 20 20 20 20 20 j++;.
0de0: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 7d continue;. }
0df0: 0a 0a 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 7a .. z[j++] = z
0e00: 5b 69 5d 3b 0a 20 20 7d 0a 20 20 7a 5b 6a 5d 20 [i];. }. z[j]
0e10: 3d 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 7a 3b = 0;. return z;
0e20: 0a 7d 0a 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a .}.../**********
0e30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0e40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0e50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0e60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a ***********/../*
0e70: 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 .** This is the
0e80: 53 51 4c 69 74 65 20 61 75 74 68 6f 72 69 7a 65 SQLite authorize
0e90: 72 20 63 61 6c 6c 62 61 63 6b 20 75 73 65 64 20 r callback used
0ea0: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 to make sure tha
0eb0: 74 20 74 68 65 0a 2a 2a 20 53 51 4c 20 73 74 61 t the.** SQL sta
0ec0: 74 65 6d 65 6e 74 73 20 65 6e 74 65 72 65 64 20 tements entered
0ed0: 62 79 20 75 73 65 72 73 20 64 6f 20 6e 6f 74 20 by users do not
0ee0: 74 72 79 20 74 6f 20 64 6f 20 61 6e 79 74 68 69 try to do anythi
0ef0: 6e 67 20 75 6e 74 6f 77 61 72 64 2e 0a 2a 2a 20 ng untoward..**
0f00: 49 66 20 61 6e 79 74 68 69 6e 67 20 73 75 73 70 If anything susp
0f10: 69 63 69 6f 75 73 20 69 73 20 74 72 69 65 64 2c icious is tried,
0f20: 20 73 65 74 20 2a 28 63 68 61 72 2a 2a 29 70 45 set *(char**)pE
0f30: 72 72 6f 72 20 74 6f 20 61 6e 20 65 72 72 6f 72 rror to an error
0f40: 0a 2a 2a 20 6d 65 73 73 61 67 65 20 6f 62 74 61 .** message obta
0f50: 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 ined from malloc
0f60: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 ..*/.static int
0f70: 72 65 70 6f 72 74 5f 71 75 65 72 79 5f 61 75 74 report_query_aut
0f80: 68 6f 72 69 7a 65 72 28 0a 20 20 76 6f 69 64 20 horizer(. void
0f90: 2a 70 45 72 72 6f 72 2c 0a 20 20 69 6e 74 20 63 *pError,. int c
0fa0: 6f 64 65 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 ode,. const cha
0fb0: 72 20 2a 7a 41 72 67 31 2c 0a 20 20 63 6f 6e 73 r *zArg1,. cons
0fc0: 74 20 63 68 61 72 20 2a 7a 41 72 67 32 2c 0a 20 t char *zArg2,.
0fd0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 const char *zAr
0fe0: 67 33 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 g3,. const char
0ff0: 20 2a 7a 41 72 67 34 0a 29 7b 0a 20 20 63 68 61 *zArg4.){. cha
1000: 72 20 2a 7a 45 72 72 6f 72 20 3d 20 2a 28 63 68 r *zError = *(ch
1010: 61 72 2a 2a 29 70 45 72 72 6f 72 3b 0a 20 20 69 ar**)pError;. i
1020: 66 28 20 7a 45 72 72 6f 72 20 29 7b 0a 20 20 20 f( zError ){.
1030: 20 2f 2a 20 57 65 27 76 65 20 61 6c 72 65 61 64 /* We've alread
1040: 79 20 73 65 65 6e 20 61 6e 20 65 72 72 6f 72 2e y seen an error.
1050: 20 20 4e 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6e No need to con
1060: 74 69 6e 75 65 2e 20 2a 2f 0a 20 20 20 20 72 65 tinue. */. re
1070: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a turn SQLITE_OK;.
1080: 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20 63 6f }. switch( co
1090: 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 53 de ){. case S
10a0: 51 4c 49 54 45 5f 53 45 4c 45 43 54 3a 0a 20 20 QLITE_SELECT:.
10b0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46 55 case SQLITE_FU
10c0: 4e 43 54 49 4f 4e 3a 20 7b 0a 20 20 20 20 20 20 NCTION: {.
10d0: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 break;. }.
10e0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52 45 41 case SQLITE_REA
10f0: 44 3a 20 7b 0a 20 20 20 20 20 20 73 74 61 74 69 D: {. stati
1100: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a c const char *az
1110: 41 6c 6c 6f 77 65 64 5b 5d 20 3d 20 7b 0a 20 20 Allowed[] = {.
1120: 20 20 20 20 20 20 20 22 74 69 63 6b 65 74 22 2c "ticket",
1130: 0a 20 20 20 20 20 20 20 20 20 22 62 6c 6f 62 22 . "blob"
1140: 2c 0a 20 20 20 20 20 20 20 20 20 22 66 69 6c 65 ,. "file
1150: 6e 61 6d 65 22 2c 0a 20 20 20 20 20 20 20 20 20 name",.
1160: 22 6d 6c 69 6e 6b 22 2c 0a 20 20 20 20 20 20 20 "mlink",.
1170: 20 20 22 70 6c 69 6e 6b 22 2c 0a 20 20 20 20 20 "plink",.
1180: 20 20 20 20 22 65 76 65 6e 74 22 2c 0a 20 20 20 "event",.
1190: 20 20 20 20 20 20 22 74 61 67 22 2c 0a 20 20 20 "tag",.
11a0: 20 20 20 20 20 20 22 74 61 67 78 72 65 66 22 2c "tagxref",
11b0: 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 . };.
11c0: 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 66 6f 72 int i;. for
11d0: 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 61 (i=0; i<sizeof(a
11e0: 7a 41 6c 6c 6f 77 65 64 29 2f 73 69 7a 65 6f 66 zAllowed)/sizeof
11f0: 28 61 7a 41 6c 6c 6f 77 65 64 5b 30 5d 29 3b 20 (azAllowed[0]);
1200: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 i++){. if
1210: 28 20 73 74 72 63 61 73 65 63 6d 70 28 7a 41 72 ( strcasecmp(zAr
1220: 67 31 2c 20 61 7a 41 6c 6c 6f 77 65 64 5b 69 5d g1, azAllowed[i]
1230: 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 )==0 ) break;.
1240: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 }. if(
1250: 69 3e 3d 73 69 7a 65 6f 66 28 61 7a 41 6c 6c 6f i>=sizeof(azAllo
1260: 77 65 64 29 2f 73 69 7a 65 6f 66 28 61 7a 41 6c wed)/sizeof(azAl
1270: 6c 6f 77 65 64 5b 30 5d 29 20 29 7b 0a 20 20 20 lowed[0]) ){.
1280: 20 20 20 20 20 7a 45 72 72 6f 72 20 3d 20 6d 70 zError = mp
1290: 72 69 6e 74 66 28 22 63 61 6e 6e 6f 74 20 61 63 rintf("cannot ac
12a0: 63 65 73 73 20 74 61 62 6c 65 20 25 73 22 2c 20 cess table %s",
12b0: 7a 41 72 67 31 29 3b 0a 20 20 20 20 20 20 7d 0a zArg1);. }.
12c0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 break;.
12d0: 20 7d 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 }. default:
12e0: 7b 0a 20 20 20 20 20 20 7a 45 72 72 6f 72 20 3d {. zError =
12f0: 20 6d 70 72 69 6e 74 66 28 22 6f 6e 6c 79 20 53 mprintf("only S
1300: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 ELECT statements
1310: 20 61 72 65 20 61 6c 6c 6f 77 65 64 22 29 3b 0a are allowed");.
1320: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 break;.
1330: 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 }. }. return
1340: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f SQLITE_OK;.}.../
1350: 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 67 *.** Check the g
1360: 69 76 65 6e 20 53 51 4c 20 74 6f 20 73 65 65 20 iven SQL to see
1370: 69 66 20 69 73 20 61 20 76 61 6c 69 64 20 71 75 if is a valid qu
1380: 65 72 79 20 74 68 61 74 20 64 6f 65 73 20 6e 6f ery that does no
1390: 74 0a 2a 2a 20 61 74 74 65 6d 70 74 20 74 6f 20 t.** attempt to
13a0: 64 6f 20 61 6e 79 74 68 69 6e 67 20 64 61 6e 67 do anything dang
13b0: 65 72 6f 75 73 2e 20 20 52 65 74 75 72 6e 20 30 erous. Return 0
13c0: 20 6f 6e 20 73 75 63 63 65 73 73 20 61 6e 64 20 on success and
13d0: 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 a.** pointer to
13e0: 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 an error message
13f0: 20 73 74 72 69 6e 67 20 28 6f 62 74 61 69 6e 65 string (obtaine
1400: 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 29 20 69 d from malloc) i
1410: 66 0a 2a 2a 20 74 68 65 72 65 20 69 73 20 61 20 f.** there is a
1420: 70 72 6f 62 6c 65 6d 2e 0a 2a 2f 0a 63 68 61 72 problem..*/.char
1430: 20 2a 76 65 72 69 66 79 5f 73 71 6c 5f 73 74 61 *verify_sql_sta
1440: 74 65 6d 65 6e 74 28 63 68 61 72 20 2a 7a 53 71 tement(char *zSq
1450: 6c 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 l){. int i;. c
1460: 68 61 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20 har *zErr = 0;.
1470: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 const char *zTa
1480: 69 6c 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 il;. sqlite3_st
1490: 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 mt *pStmt;. int
14a0: 20 72 63 3b 0a 0a 20 20 2f 2a 20 46 69 72 73 74 rc;.. /* First
14b0: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 53 make sure the S
14c0: 51 4c 20 69 73 20 61 20 73 69 6e 67 6c 65 20 71 QL is a single q
14d0: 75 65 72 79 20 63 6f 6d 6d 61 6e 64 20 62 79 20 uery command by
14e0: 76 65 72 69 66 79 69 6e 67 20 74 68 61 74 0a 20 verifying that.
14f0: 20 2a 2a 20 74 68 65 20 66 69 72 73 74 20 74 6f ** the first to
1500: 6b 65 6e 20 69 73 20 22 53 45 4c 45 43 54 22 20 ken is "SELECT"
1510: 61 6e 64 20 74 68 61 74 20 74 68 65 72 65 20 61 and that there a
1520: 72 65 20 6e 6f 20 75 6e 71 75 6f 74 65 64 20 73 re no unquoted s
1530: 65 6d 69 63 6f 6c 6f 6e 73 2e 0a 20 20 2a 2f 0a emicolons.. */.
1540: 20 20 66 6f 72 28 69 3d 30 3b 20 69 73 73 70 61 for(i=0; isspa
1550: 63 65 28 7a 53 71 6c 5b 69 5d 29 3b 20 69 2b 2b ce(zSql[i]); i++
1560: 29 7b 7d 0a 20 20 69 66 28 20 73 74 72 6e 63 61 ){}. if( strnca
1570: 73 65 63 6d 70 28 26 7a 53 71 6c 5b 69 5d 2c 22 secmp(&zSql[i],"
1580: 73 65 6c 65 63 74 22 2c 36 29 21 3d 30 20 29 7b select",6)!=0 ){
1590: 0a 20 20 20 20 72 65 74 75 72 6e 20 6d 70 72 69 . return mpri
15a0: 6e 74 66 28 22 54 68 65 20 53 51 4c 20 6d 75 73 ntf("The SQL mus
15b0: 74 20 62 65 20 61 20 53 45 4c 45 43 54 20 73 74 t be a SELECT st
15c0: 61 74 65 6d 65 6e 74 22 29 3b 0a 20 20 7d 0a 20 atement");. }.
15d0: 20 66 6f 72 28 69 3d 30 3b 20 7a 53 71 6c 5b 69 for(i=0; zSql[i
15e0: 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 ]; i++){. if(
15f0: 20 7a 53 71 6c 5b 69 5d 3d 3d 27 3b 27 20 29 7b zSql[i]==';' ){
1600: 0a 20 20 20 20 20 20 69 6e 74 20 62 61 64 3b 0a . int bad;.
1610: 20 20 20 20 20 20 69 6e 74 20 63 20 3d 20 7a 53 int c = zS
1620: 71 6c 5b 69 2b 31 5d 3b 0a 20 20 20 20 20 20 7a ql[i+1];. z
1630: 53 71 6c 5b 69 2b 31 5d 20 3d 20 30 3b 0a 20 20 Sql[i+1] = 0;.
1640: 20 20 20 20 62 61 64 20 3d 20 73 71 6c 69 74 65 bad = sqlite
1650: 33 5f 63 6f 6d 70 6c 65 74 65 28 7a 53 71 6c 29 3_complete(zSql)
1660: 3b 0a 20 20 20 20 20 20 7a 53 71 6c 5b 69 2b 31 ;. zSql[i+1
1670: 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 69 66 28 ] = c;. if(
1680: 20 62 61 64 20 29 7b 0a 20 20 20 20 20 20 20 20 bad ){.
1690: 2f 2a 20 41 20 63 6f 6d 70 6c 65 74 65 20 73 74 /* A complete st
16a0: 61 74 65 6d 65 6e 74 20 62 61 73 69 63 61 6c 6c atement basicall
16b0: 79 20 6d 65 61 6e 73 20 74 68 61 74 20 61 6e 20 y means that an
16c0: 75 6e 71 75 6f 74 65 64 20 73 65 6d 69 2d 63 6f unquoted semi-co
16d0: 6c 6f 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20 77 lon. ** w
16e0: 61 73 20 66 6f 75 6e 64 2e 20 57 65 20 64 6f 6e as found. We don
16f0: 27 74 20 61 63 74 75 61 6c 6c 79 20 63 68 65 63 't actually chec
1700: 6b 20 77 68 61 74 27 73 20 61 66 74 65 72 20 74 k what's after t
1710: 68 61 74 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a hat.. */.
1720: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d return m
1730: 70 72 69 6e 74 66 28 22 53 65 6d 69 2d 63 6f 6c printf("Semi-col
1740: 6f 6e 20 64 65 74 65 63 74 65 64 21 20 22 0a 20 on detected! ".
1750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1760: 20 20 20 20 20 20 22 4f 6e 6c 79 20 61 20 73 69 "Only a si
1770: 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 ngle SQL stateme
1780: 6e 74 20 69 73 20 61 6c 6c 6f 77 65 64 22 29 3b nt is allowed");
1790: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 . }. }.
17a0: 20 7d 0a 20 20 0a 20 20 2f 2a 20 43 6f 6d 70 69 }. . /* Compi
17b0: 6c 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 le the statement
17c0: 20 61 6e 64 20 63 68 65 63 6b 20 66 6f 72 20 69 and check for i
17d0: 6c 6c 65 67 61 6c 20 61 63 63 65 73 73 65 73 20 llegal accesses
17e0: 6f 72 20 73 79 6e 74 61 78 20 65 72 72 6f 72 73 or syntax errors
17f0: 2e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 . */. sqlite3_s
1800: 65 74 5f 61 75 74 68 6f 72 69 7a 65 72 28 67 2e et_authorizer(g.
1810: 64 62 2c 20 72 65 70 6f 72 74 5f 71 75 65 72 79 db, report_query
1820: 5f 61 75 74 68 6f 72 69 7a 65 72 2c 20 28 76 6f _authorizer, (vo
1830: 69 64 2a 29 26 7a 45 72 72 29 3b 0a 20 20 72 63 id*)&zErr);. rc
1840: 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 = sqlite3_prepa
1850: 72 65 28 67 2e 64 62 2c 20 7a 53 71 6c 2c 20 2d re(g.db, zSql, -
1860: 31 2c 20 26 70 53 74 6d 74 2c 20 26 7a 54 61 69 1, &pStmt, &zTai
1870: 6c 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 l);. if( rc!=SQ
1880: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 7a LITE_OK ){. z
1890: 45 72 72 20 3d 20 6d 70 72 69 6e 74 66 28 22 53 Err = mprintf("S
18a0: 79 6e 74 61 78 20 65 72 72 6f 72 3a 20 25 73 22 yntax error: %s"
18b0: 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 , sqlite3_errmsg
18c0: 28 67 2e 64 62 29 29 3b 0a 20 20 7d 0a 20 20 69 (g.db));. }. i
18d0: 66 28 20 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 f( pStmt ){.
18e0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 sqlite3_finalize
18f0: 28 70 53 74 6d 74 29 3b 0a 20 20 7d 0a 20 20 73 (pStmt);. }. s
1900: 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74 68 6f qlite3_set_autho
1910: 72 69 7a 65 72 28 67 2e 64 62 2c 20 30 2c 20 30 rizer(g.db, 0, 0
1920: 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a 45 72 72 );. return zErr
1930: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 ;.}../*.** WEBPA
1940: 47 45 3a 20 2f 72 70 74 73 71 6c 0a 2a 2f 0a 76 GE: /rptsql.*/.v
1950: 6f 69 64 20 76 69 65 77 5f 73 65 65 5f 73 71 6c oid view_see_sql
1960: 28 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20 72 6e (void){. int rn
1970: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a ;. const char *
1980: 7a 54 69 74 6c 65 3b 0a 20 20 63 6f 6e 73 74 20 zTitle;. const
1990: 63 68 61 72 20 2a 7a 53 51 4c 3b 0a 20 20 63 6f char *zSQL;. co
19a0: 6e 73 74 20 63 68 61 72 20 2a 7a 4f 77 6e 65 72 nst char *zOwner
19b0: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a ;. const char *
19c0: 7a 43 6c 72 4b 65 79 3b 0a 20 20 53 74 6d 74 20 zClrKey;. Stmt
19d0: 71 3b 0a 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 q;.. login_chec
19e0: 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 29 3b k_credentials();
19f0: 0a 20 20 69 66 28 20 21 67 2e 6f 6b 51 75 65 72 . if( !g.okQuer
1a00: 79 20 29 7b 0a 20 20 20 20 6c 6f 67 69 6e 5f 6e y ){. login_n
1a10: 65 65 64 65 64 28 29 3b 0a 20 20 20 20 72 65 74 eeded();. ret
1a20: 75 72 6e 3b 0a 20 20 7d 0a 20 20 72 6e 20 3d 20 urn;. }. rn =
1a30: 61 74 6f 69 28 50 44 28 22 72 6e 22 2c 22 30 22 atoi(PD("rn","0"
1a40: 29 29 3b 0a 20 20 64 62 5f 70 72 65 70 61 72 65 ));. db_prepare
1a50: 28 26 71 2c 20 22 53 45 4c 45 43 54 20 74 69 74 (&q, "SELECT tit
1a60: 6c 65 2c 20 73 71 6c 63 6f 64 65 2c 20 6f 77 6e le, sqlcode, own
1a70: 65 72 2c 20 63 6f 6c 73 20 22 0a 20 20 20 20 20 er, cols ".
1a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 "F
1a90: 52 4f 4d 20 72 65 70 6f 72 74 66 6d 74 20 57 48 ROM reportfmt WH
1aa0: 45 52 45 20 72 6e 3d 25 64 22 2c 72 6e 29 3b 0a ERE rn=%d",rn);.
1ab0: 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22 style_header("
1ac0: 53 51 4c 20 46 6f 72 20 52 65 70 6f 72 74 20 46 SQL For Report F
1ad0: 6f 72 6d 61 74 20 4e 75 6d 62 65 72 20 25 64 22 ormat Number %d"
1ae0: 2c 20 72 6e 29 3b 0a 20 20 69 66 28 20 64 62 5f , rn);. if( db_
1af0: 73 74 65 70 28 26 71 29 21 3d 53 51 4c 49 54 45 step(&q)!=SQLITE
1b00: 5f 52 4f 57 20 29 7b 0a 20 20 20 20 40 20 3c 70 _ROW ){. @ <p
1b10: 3e 55 6e 6b 6e 6f 77 6e 20 72 65 70 6f 72 74 20 >Unknown report
1b20: 6e 75 6d 62 65 72 3a 20 25 64 28 72 6e 29 3c 2f number: %d(rn)</
1b30: 70 3e 0a 20 20 20 20 73 74 79 6c 65 5f 66 6f 6f p>. style_foo
1b40: 74 65 72 28 29 3b 0a 20 20 20 20 72 65 74 75 72 ter();. retur
1b50: 6e 3b 0a 20 20 7d 0a 20 20 7a 54 69 74 6c 65 20 n;. }. zTitle
1b60: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
1b70: 28 26 71 2c 20 30 29 3b 0a 20 20 7a 53 51 4c 20 (&q, 0);. zSQL
1b80: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
1b90: 28 26 71 2c 20 31 29 3b 0a 20 20 7a 4f 77 6e 65 (&q, 1);. zOwne
1ba0: 72 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 r = db_column_te
1bb0: 78 74 28 26 71 2c 20 32 29 3b 0a 20 20 7a 43 6c xt(&q, 2);. zCl
1bc0: 72 4b 65 79 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e rKey = db_column
1bd0: 5f 74 65 78 74 28 26 71 2c 20 33 29 3b 0a 20 20 _text(&q, 3);.
1be0: 40 20 3c 74 61 62 6c 65 20 63 65 6c 6c 70 61 64 @ <table cellpad
1bf0: 64 69 6e 67 3d 30 20 63 65 6c 6c 73 70 61 63 69 ding=0 cellspaci
1c00: 6e 67 3d 30 20 62 6f 72 64 65 72 3d 30 3e 0a 20 ng=0 border=0>.
1c10: 20 40 20 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 @ <tr><td valig
1c20: 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 n="top" align="r
1c30: 69 67 68 74 22 3e 54 69 74 6c 65 3a 3c 2f 74 64 ight">Title:</td
1c40: 3e 3c 74 64 20 77 69 64 74 68 3d 31 35 3e 3c 2f ><td width=15></
1c50: 74 64 3e 0a 20 20 40 20 3c 74 64 20 63 6f 6c 73 td>. @ <td cols
1c60: 70 61 6e 3d 33 3e 25 68 28 7a 54 69 74 6c 65 29 pan=3>%h(zTitle)
1c70: 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 40 20 3c </td></tr>. @ <
1c80: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 tr><td valign="t
1c90: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 op" align="right
1ca0: 22 3e 4f 77 6e 65 72 3a 3c 2f 74 64 3e 3c 74 64 ">Owner:</td><td
1cb0: 3e 3c 2f 74 64 3e 0a 20 20 40 20 3c 74 64 20 63 ></td>. @ <td c
1cc0: 6f 6c 73 70 61 6e 3d 33 3e 25 68 28 7a 4f 77 6e olspan=3>%h(zOwn
1cd0: 65 72 29 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 er)</td></tr>.
1ce0: 40 20 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e @ <tr><td valign
1cf0: 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 ="top" align="ri
1d00: 67 68 74 22 3e 53 51 4c 3a 3c 2f 74 64 3e 3c 74 ght">SQL:</td><t
1d10: 64 3e 3c 2f 74 64 3e 0a 20 20 40 20 3c 74 64 20 d></td>. @ <td
1d20: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 70 72 valign="top"><pr
1d30: 65 3e 0a 20 20 40 20 25 68 28 7a 53 51 4c 29 0a e>. @ %h(zSQL).
1d40: 20 20 40 20 3c 2f 70 72 65 3e 3c 2f 74 64 3e 0a @ </pre></td>.
1d50: 20 20 40 20 3c 74 64 20 77 69 64 74 68 3d 31 35 @ <td width=15
1d60: 3e 3c 2f 74 64 3e 3c 74 64 20 76 61 6c 69 67 6e ></td><td valign
1d70: 3d 22 74 6f 70 22 3e 0a 20 20 6f 75 74 70 75 74 ="top">. output
1d80: 5f 63 6f 6c 6f 72 5f 6b 65 79 28 7a 43 6c 72 4b _color_key(zClrK
1d90: 65 79 2c 20 30 2c 20 22 62 6f 72 64 65 72 3d 30 ey, 0, "border=0
1da0: 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 30 20 63 cellspacing=0 c
1db0: 65 6c 6c 70 61 64 64 69 6e 67 3d 33 22 29 3b 0a ellpadding=3");.
1dc0: 20 20 40 20 3c 2f 74 64 3e 0a 20 20 40 20 3c 2f @ </td>. @ </
1dd0: 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 20 20 72 65 tr></table>. re
1de0: 70 6f 72 74 5f 66 6f 72 6d 61 74 5f 68 69 6e 74 port_format_hint
1df0: 73 28 29 3b 0a 20 20 73 74 79 6c 65 5f 66 6f 6f s();. style_foo
1e00: 74 65 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 ter();.}../*.**
1e10: 57 45 42 50 41 47 45 3a 20 2f 72 70 74 6e 65 77 WEBPAGE: /rptnew
1e20: 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 2f 72 70 .** WEBPAGE: /rp
1e30: 74 65 64 69 74 0a 2a 2f 0a 76 6f 69 64 20 76 69 tedit.*/.void vi
1e40: 65 77 5f 65 64 69 74 28 76 6f 69 64 29 7b 0a 20 ew_edit(void){.
1e50: 20 69 6e 74 20 72 6e 3b 0a 20 20 63 6f 6e 73 74 int rn;. const
1e60: 20 63 68 61 72 20 2a 7a 54 69 74 6c 65 3b 0a 20 char *zTitle;.
1e70: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a const char *z;.
1e80: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f const char *zO
1e90: 77 6e 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 43 wner;. char *zC
1ea0: 6c 72 4b 65 79 3b 0a 20 20 63 68 61 72 20 2a 7a lrKey;. char *z
1eb0: 53 51 4c 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 SQL;. char *zEr
1ec0: 72 20 3d 20 30 3b 0a 0a 20 20 6c 6f 67 69 6e 5f r = 0;.. login_
1ed0: 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c check_credential
1ee0: 73 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b s();. if( !g.ok
1ef0: 51 75 65 72 79 20 29 7b 0a 20 20 20 20 6c 6f 67 Query ){. log
1f00: 69 6e 5f 6e 65 65 64 65 64 28 29 3b 0a 20 20 20 in_needed();.
1f10: 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 2f return;. }. /
1f20: 2a 76 69 65 77 5f 61 64 64 5f 66 75 6e 63 74 69 *view_add_functi
1f30: 6f 6e 73 28 30 29 3b 2a 2f 0a 20 20 72 6e 20 3d ons(0);*/. rn =
1f40: 20 61 74 6f 69 28 50 44 28 22 72 6e 22 2c 22 30 atoi(PD("rn","0
1f50: 22 29 29 3b 0a 20 20 7a 54 69 74 6c 65 20 3d 20 "));. zTitle =
1f60: 50 28 22 74 22 29 3b 0a 20 20 7a 4f 77 6e 65 72 P("t");. zOwner
1f70: 20 3d 20 50 44 28 22 77 22 2c 67 2e 7a 4c 6f 67 = PD("w",g.zLog
1f80: 69 6e 29 3b 0a 20 20 7a 20 3d 20 50 28 22 73 22 in);. z = P("s"
1f90: 29 3b 0a 20 20 7a 53 51 4c 20 3d 20 7a 20 3f 20 );. zSQL = z ?
1fa0: 74 72 69 6d 5f 73 74 72 69 6e 67 28 7a 29 20 3a trim_string(z) :
1fb0: 20 30 3b 0a 20 20 7a 43 6c 72 4b 65 79 20 3d 20 0;. zClrKey =
1fc0: 74 72 69 6d 5f 73 74 72 69 6e 67 28 50 44 28 22 trim_string(PD("
1fd0: 6b 22 2c 22 22 29 29 3b 0a 20 20 69 66 28 20 72 k",""));. if( r
1fe0: 6e 3e 30 20 26 26 20 50 28 22 64 65 6c 32 22 29 n>0 && P("del2")
1ff0: 20 29 7b 0a 20 20 20 20 64 62 5f 6d 75 6c 74 69 ){. db_multi
2000: 5f 65 78 65 63 28 22 44 45 4c 45 54 45 20 46 52 _exec("DELETE FR
2010: 4f 4d 20 72 65 70 6f 72 74 66 6d 74 20 57 48 45 OM reportfmt WHE
2020: 52 45 20 72 6e 3d 25 64 22 2c 20 72 6e 29 3b 0a RE rn=%d", rn);.
2030: 20 20 20 20 63 67 69 5f 72 65 64 69 72 65 63 74 cgi_redirect
2040: 28 22 72 65 70 6f 72 74 6c 69 73 74 22 29 3b 0a ("reportlist");.
2050: 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 65 return;. }e
2060: 6c 73 65 20 69 66 28 20 72 6e 3e 30 20 26 26 20 lse if( rn>0 &&
2070: 50 28 22 64 65 6c 31 22 29 20 29 7b 0a 20 20 20 P("del1") ){.
2080: 20 7a 54 69 74 6c 65 20 3d 20 64 62 5f 74 65 78 zTitle = db_tex
2090: 74 28 30 2c 20 22 53 45 4c 45 43 54 20 74 69 74 t(0, "SELECT tit
20a0: 6c 65 20 46 52 4f 4d 20 72 65 70 6f 72 74 66 6d le FROM reportfm
20b0: 74 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 t ".
20c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 57 48 "WH
20d0: 45 52 45 20 72 6e 3d 25 64 22 2c 20 72 6e 29 3b ERE rn=%d", rn);
20e0: 0a 20 20 20 20 69 66 28 20 7a 54 69 74 6c 65 3d . if( zTitle=
20f0: 3d 30 20 29 20 63 67 69 5f 72 65 64 69 72 65 63 =0 ) cgi_redirec
2100: 74 28 22 72 65 70 6f 72 74 6c 69 73 74 22 29 3b t("reportlist");
2110: 0a 0a 20 20 20 20 73 74 79 6c 65 5f 68 65 61 64 .. style_head
2120: 65 72 28 22 41 72 65 20 59 6f 75 20 53 75 72 65 er("Are You Sure
2130: 3f 22 29 3b 0a 20 20 20 20 40 20 3c 66 6f 72 6d ?");. @ <form
2140: 20 61 63 74 69 6f 6e 3d 22 72 70 74 65 64 69 74 action="rptedit
2150: 22 20 6d 65 74 68 6f 64 3d 22 50 4f 53 54 22 3e " method="POST">
2160: 0a 20 20 20 20 40 20 3c 70 3e 59 6f 75 20 61 72 . @ <p>You ar
2170: 65 20 61 62 6f 75 74 20 74 6f 20 64 65 6c 65 74 e about to delet
2180: 65 20 61 6c 6c 20 74 72 61 63 65 73 20 6f 66 20 e all traces of
2190: 74 68 65 20 72 65 70 6f 72 74 0a 20 20 20 20 40 the report. @
21a0: 20 3c 73 74 72 6f 6e 67 3e 25 68 28 7a 54 69 74 <strong>%h(zTit
21b0: 6c 65 29 3c 2f 73 74 72 6f 6e 67 3e 20 66 72 6f le)</strong> fro
21c0: 6d 0a 20 20 20 20 40 20 74 68 65 20 64 61 74 61 m. @ the data
21d0: 62 61 73 65 2e 20 20 54 68 69 73 20 69 73 20 61 base. This is a
21e0: 6e 20 69 72 72 65 76 65 72 73 69 62 6c 65 20 6f n irreversible o
21f0: 70 65 72 61 74 69 6f 6e 2e 20 20 41 6c 6c 20 72 peration. All r
2200: 65 63 6f 72 64 73 0a 20 20 20 20 40 20 72 65 6c ecords. @ rel
2210: 61 74 65 64 20 74 6f 20 74 68 69 73 20 72 65 70 ated to this rep
2220: 6f 72 74 20 77 69 6c 6c 20 62 65 20 72 65 6d 6f ort will be remo
2230: 76 65 64 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 ved and cannot b
2240: 65 20 72 65 63 6f 76 65 72 65 64 2e 3c 2f 70 3e e recovered.</p>
2250: 0a 20 20 20 20 40 0a 20 20 20 20 40 20 3c 69 6e . @. @ <in
2260: 70 75 74 20 74 79 70 65 3d 22 68 69 64 64 65 6e put type="hidden
2270: 22 20 6e 61 6d 65 3d 22 72 6e 22 20 76 61 6c 75 " name="rn" valu
2280: 65 3d 22 25 64 28 72 6e 29 22 3e 0a 20 20 20 20 e="%d(rn)">.
2290: 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 73 @ <input type="s
22a0: 75 62 6d 69 74 22 20 6e 61 6d 65 3d 22 64 65 6c ubmit" name="del
22b0: 32 22 20 76 61 6c 75 65 3d 22 44 65 6c 65 74 65 2" value="Delete
22c0: 20 54 68 65 20 52 65 70 6f 72 74 22 3e 0a 20 20 The Report">.
22d0: 20 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d @ <input type=
22e0: 22 73 75 62 6d 69 74 22 20 6e 61 6d 65 3d 22 63 "submit" name="c
22f0: 61 6e 22 20 76 61 6c 75 65 3d 22 43 61 6e 63 65 an" value="Cance
2300: 6c 22 3e 0a 20 20 20 20 40 20 3c 2f 66 6f 72 6d l">. @ </form
2310: 3e 0a 20 20 20 20 73 74 79 6c 65 5f 66 6f 6f 74 >. style_foot
2320: 65 72 28 29 3b 0a 20 20 20 20 72 65 74 75 72 6e er();. return
2330: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 50 28 ;. }else if( P(
2340: 22 63 61 6e 22 29 20 29 7b 0a 20 20 20 20 2f 2a "can") ){. /*
2350: 20 75 73 65 72 20 63 61 6e 63 65 6c 6c 65 64 20 user cancelled
2360: 2a 2f 0a 20 20 20 20 63 67 69 5f 72 65 64 69 72 */. cgi_redir
2370: 65 63 74 28 22 72 65 70 6f 72 74 6c 69 73 74 22 ect("reportlist"
2380: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 );. return;.
2390: 20 7d 0a 20 20 69 66 28 20 7a 54 69 74 6c 65 20 }. if( zTitle
23a0: 26 26 20 7a 53 51 4c 20 29 7b 0a 20 20 20 20 69 && zSQL ){. i
23b0: 66 28 20 7a 53 51 4c 5b 30 5d 3d 3d 30 20 29 7b f( zSQL[0]==0 ){
23c0: 0a 20 20 20 20 20 20 7a 45 72 72 20 3d 20 22 50 . zErr = "P
23d0: 6c 65 61 73 65 20 73 75 70 70 6c 79 20 61 6e 20 lease supply an
23e0: 53 51 4c 20 71 75 65 72 79 20 73 74 61 74 65 6d SQL query statem
23f0: 65 6e 74 22 3b 0a 20 20 20 20 7d 65 6c 73 65 20 ent";. }else
2400: 69 66 28 20 28 7a 54 69 74 6c 65 20 3d 20 74 72 if( (zTitle = tr
2410: 69 6d 5f 73 74 72 69 6e 67 28 7a 54 69 74 6c 65 im_string(zTitle
2420: 29 29 5b 30 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 ))[0]==0 ){.
2430: 20 20 7a 45 72 72 20 3d 20 22 50 6c 65 61 73 65 zErr = "Please
2440: 20 73 75 70 70 6c 79 20 61 20 74 69 74 6c 65 22 supply a title"
2450: 3b 20 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 ; . }else{.
2460: 20 20 20 20 7a 45 72 72 20 3d 20 76 65 72 69 66 zErr = verif
2470: 79 5f 73 71 6c 5f 73 74 61 74 65 6d 65 6e 74 28 y_sql_statement(
2480: 7a 53 51 4c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 zSQL);. }.
2490: 20 69 66 28 20 7a 45 72 72 3d 3d 30 20 29 7b 0a if( zErr==0 ){.
24a0: 20 20 20 20 20 20 69 66 28 20 72 6e 3e 30 20 29 if( rn>0 )
24b0: 7b 0a 20 20 20 20 20 20 20 20 64 62 5f 6d 75 6c {. db_mul
24c0: 74 69 5f 65 78 65 63 28 22 55 50 44 41 54 45 20 ti_exec("UPDATE
24d0: 72 65 70 6f 72 74 66 6d 74 20 53 45 54 20 74 69 reportfmt SET ti
24e0: 74 6c 65 3d 25 51 2c 20 73 71 6c 63 6f 64 65 3d tle=%Q, sqlcode=
24f0: 25 51 2c 22 0a 20 20 20 20 20 20 20 20 20 20 20 %Q,".
2500: 20 20 20 20 20 20 20 20 20 20 20 22 20 6f 77 6e " own
2510: 65 72 3d 25 51 2c 20 63 6f 6c 73 3d 25 51 20 57 er=%Q, cols=%Q W
2520: 48 45 52 45 20 72 6e 3d 25 64 22 2c 0a 20 20 20 HERE rn=%d",.
2530: 20 20 20 20 20 20 20 20 7a 54 69 74 6c 65 2c 20 zTitle,
2540: 7a 53 51 4c 2c 20 7a 4f 77 6e 65 72 2c 20 7a 43 zSQL, zOwner, zC
2550: 6c 72 4b 65 79 2c 20 72 6e 29 3b 0a 20 20 20 20 lrKey, rn);.
2560: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 }else{.
2570: 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 db_multi_exec("
2580: 49 4e 53 45 52 54 20 49 4e 54 4f 20 72 65 70 6f INSERT INTO repo
2590: 72 74 66 6d 74 28 74 69 74 6c 65 2c 73 71 6c 63 rtfmt(title,sqlc
25a0: 6f 64 65 2c 6f 77 6e 65 72 2c 63 6f 6c 73 29 20 ode,owner,cols)
25b0: 22 0a 20 20 20 20 20 20 20 20 20 20 20 22 56 41 ". "VA
25c0: 4c 55 45 53 28 25 51 2c 25 51 2c 25 51 2c 25 51 LUES(%Q,%Q,%Q,%Q
25d0: 29 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 7a )",. z
25e0: 54 69 74 6c 65 2c 20 7a 53 51 4c 2c 20 7a 4f 77 Title, zSQL, zOw
25f0: 6e 65 72 2c 20 7a 43 6c 72 4b 65 79 29 3b 0a 20 ner, zClrKey);.
2600: 20 20 20 20 20 20 20 72 6e 20 3d 20 64 62 5f 6c rn = db_l
2610: 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 ast_insert_rowid
2620: 28 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 ();. }.
2630: 20 20 63 67 69 5f 72 65 64 69 72 65 63 74 28 6d cgi_redirect(m
2640: 70 72 69 6e 74 66 28 22 72 70 74 76 69 65 77 3f printf("rptview?
2650: 72 6e 3d 25 64 22 2c 20 72 6e 29 29 3b 0a 20 20 rn=%d", rn));.
2660: 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 return;.
2670: 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72 6e }. }else if( rn
2680: 3d 3d 30 20 29 7b 0a 20 20 20 20 7a 54 69 74 6c ==0 ){. zTitl
2690: 65 20 3d 20 22 22 3b 0a 20 20 20 20 7a 53 51 4c e = "";. zSQL
26a0: 20 3d 20 0a 20 20 20 20 20 20 40 20 53 45 4c 45 = . @ SELE
26b0: 43 54 0a 20 20 20 20 20 20 40 20 20 20 43 41 53 CT. @ CAS
26c0: 45 20 57 48 45 4e 20 73 74 61 74 75 73 20 49 4e E WHEN status IN
26d0: 20 28 27 6e 65 77 27 2c 27 61 63 74 69 76 65 27 ('new','active'
26e0: 29 20 54 48 45 4e 20 27 23 66 32 64 63 64 63 27 ) THEN '#f2dcdc'
26f0: 0a 20 20 20 20 20 20 40 20 20 20 20 20 20 20 20 . @
2700: 57 48 45 4e 20 73 74 61 74 75 73 3d 27 72 65 76 WHEN status='rev
2710: 69 65 77 27 20 54 48 45 4e 20 27 23 65 38 65 38 iew' THEN '#e8e8
2720: 62 64 27 0a 20 20 20 20 20 20 40 20 20 20 20 20 bd'. @
2730: 20 20 20 57 48 45 4e 20 73 74 61 74 75 73 3d 27 WHEN status='
2740: 66 69 78 65 64 27 20 54 48 45 4e 20 27 23 63 66 fixed' THEN '#cf
2750: 65 38 62 64 27 0a 20 20 20 20 20 20 40 20 20 20 e8bd'. @
2760: 20 20 20 20 20 57 48 45 4e 20 73 74 61 74 75 73 WHEN status
2770: 3d 27 74 65 73 74 65 64 27 20 54 48 45 4e 20 27 ='tested' THEN '
2780: 23 62 64 65 35 64 36 27 0a 20 20 20 20 20 20 40 #bde5d6'. @
2790: 20 20 20 20 20 20 20 20 57 48 45 4e 20 73 74 61 WHEN sta
27a0: 74 75 73 3d 27 64 65 66 65 72 27 20 54 48 45 4e tus='defer' THEN
27b0: 20 27 23 63 61 63 61 65 35 27 0a 20 20 20 20 20 '#cacae5'.
27c0: 20 40 20 20 20 20 20 20 20 20 45 4c 53 45 20 27 @ ELSE '
27d0: 23 63 38 63 38 63 38 27 20 45 4e 44 20 41 53 20 #c8c8c8' END AS
27e0: 27 62 67 63 6f 6c 6f 72 27 2c 0a 20 20 20 20 20 'bgcolor',.
27f0: 20 40 20 20 20 74 6e 20 41 53 20 27 23 27 2c 0a @ tn AS '#',.
2800: 20 20 20 20 20 20 40 20 20 20 74 79 70 65 20 41 @ type A
2810: 53 20 27 54 79 70 65 27 2c 0a 20 20 20 20 20 20 S 'Type',.
2820: 40 20 20 20 73 74 61 74 75 73 20 41 53 20 27 53 @ status AS 'S
2830: 74 61 74 75 73 27 2c 0a 20 20 20 20 20 20 40 20 tatus',. @
2840: 20 20 73 64 61 74 65 28 6f 72 69 67 74 69 6d 65 sdate(origtime
2850: 29 20 41 53 20 27 43 72 65 61 74 65 64 27 2c 0a ) AS 'Created',.
2860: 20 20 20 20 20 20 40 20 20 20 6f 77 6e 65 72 20 @ owner
2870: 41 53 20 27 42 79 27 2c 0a 20 20 20 20 20 20 40 AS 'By',. @
2880: 20 20 20 73 75 62 73 79 73 74 65 6d 20 41 53 20 subsystem AS
2890: 27 53 75 62 73 79 73 27 2c 0a 20 20 20 20 20 20 'Subsys',.
28a0: 40 20 20 20 73 64 61 74 65 28 63 68 61 6e 67 65 @ sdate(change
28b0: 74 69 6d 65 29 20 41 53 20 27 43 68 61 6e 67 65 time) AS 'Change
28c0: 64 27 2c 0a 20 20 20 20 20 20 40 20 20 20 61 73 d',. @ as
28d0: 73 69 67 6e 65 64 74 6f 20 41 53 20 27 41 73 73 signedto AS 'Ass
28e0: 69 67 6e 65 64 27 2c 0a 20 20 20 20 20 20 40 20 igned',. @
28f0: 20 20 73 65 76 65 72 69 74 79 20 41 53 20 27 53 severity AS 'S
2900: 76 72 27 2c 0a 20 20 20 20 20 20 40 20 20 20 70 vr',. @ p
2910: 72 69 6f 72 69 74 79 20 41 53 20 27 50 72 69 27 riority AS 'Pri'
2920: 2c 0a 20 20 20 20 20 20 40 20 20 20 74 69 74 6c ,. @ titl
2930: 65 20 41 53 20 27 54 69 74 6c 65 27 0a 20 20 20 e AS 'Title'.
2940: 20 20 20 40 20 46 52 4f 4d 20 74 69 63 6b 65 74 @ FROM ticket
2950: 0a 20 20 20 20 3b 0a 20 20 20 20 7a 43 6c 72 4b . ;. zClrK
2960: 65 79 20 3d 20 0a 20 20 20 20 20 20 40 20 23 66 ey = . @ #f
2970: 66 66 66 66 66 20 4b 65 79 3a 0a 20 20 20 20 20 fffff Key:.
2980: 20 40 20 23 66 32 64 63 64 63 20 41 63 74 69 76 @ #f2dcdc Activ
2990: 65 0a 20 20 20 20 20 20 40 20 23 65 38 65 38 65 e. @ #e8e8e
29a0: 38 20 52 65 76 69 65 77 0a 20 20 20 20 20 20 40 8 Review. @
29b0: 20 23 63 66 65 38 62 64 20 46 69 78 65 64 0a 20 #cfe8bd Fixed.
29c0: 20 20 20 20 20 40 20 23 62 64 65 35 64 36 20 54 @ #bde5d6 T
29d0: 65 73 74 65 64 0a 20 20 20 20 20 20 40 20 23 63 ested. @ #c
29e0: 61 63 61 65 35 20 44 65 66 65 72 72 65 64 0a 20 acae5 Deferred.
29f0: 20 20 20 20 20 40 20 23 63 38 63 38 63 38 20 43 @ #c8c8c8 C
2a00: 6c 6f 73 65 64 0a 20 20 20 20 3b 0a 20 20 7d 65 losed. ;. }e
2a10: 6c 73 65 7b 0a 20 20 20 20 53 74 6d 74 20 71 3b lse{. Stmt q;
2a20: 0a 20 20 20 20 64 62 5f 70 72 65 70 61 72 65 28 . db_prepare(
2a30: 26 71 2c 20 22 53 45 4c 45 43 54 20 74 69 74 6c &q, "SELECT titl
2a40: 65 2c 20 73 71 6c 63 6f 64 65 2c 20 6f 77 6e 65 e, sqlcode, owne
2a50: 72 2c 20 63 6f 6c 73 20 22 0a 20 20 20 20 20 20 r, cols ".
2a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
2a70: 46 52 4f 4d 20 72 65 70 6f 72 74 66 6d 74 20 57 FROM reportfmt W
2a80: 48 45 52 45 20 72 6e 3d 25 64 22 2c 72 6e 29 3b HERE rn=%d",rn);
2a90: 0a 20 20 20 20 69 66 28 20 64 62 5f 73 74 65 70 . if( db_step
2aa0: 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 (&q)==SQLITE_ROW
2ab0: 20 29 7b 0a 20 20 20 20 20 20 7a 54 69 74 6c 65 ){. zTitle
2ac0: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 6d 61 6c = db_column_mal
2ad0: 6c 6f 63 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 loc(&q, 0);.
2ae0: 20 20 7a 53 51 4c 20 3d 20 64 62 5f 63 6f 6c 75 zSQL = db_colu
2af0: 6d 6e 5f 6d 61 6c 6c 6f 63 28 26 71 2c 20 31 29 mn_malloc(&q, 1)
2b00: 3b 0a 20 20 20 20 20 20 7a 4f 77 6e 65 72 20 3d ;. zOwner =
2b10: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 6d 61 6c 6c 6f db_column_mallo
2b20: 63 28 26 71 2c 20 32 29 3b 0a 20 20 20 20 20 20 c(&q, 2);.
2b30: 7a 43 6c 72 4b 65 79 20 3d 20 64 62 5f 63 6f 6c zClrKey = db_col
2b40: 75 6d 6e 5f 6d 61 6c 6c 6f 63 28 26 71 2c 20 33 umn_malloc(&q, 3
2b50: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 5f );. }. db_
2b60: 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 finalize(&q);.
2b70: 20 20 69 66 28 20 50 28 22 63 6f 70 79 22 29 20 if( P("copy")
2b80: 29 7b 0a 20 20 20 20 20 20 72 6e 20 3d 20 30 3b ){. rn = 0;
2b90: 0a 20 20 20 20 20 20 7a 54 69 74 6c 65 20 3d 20 . zTitle =
2ba0: 6d 70 72 69 6e 74 66 28 22 43 6f 70 79 20 4f 66 mprintf("Copy Of
2bb0: 20 25 73 22 2c 20 7a 54 69 74 6c 65 29 3b 0a 20 %s", zTitle);.
2bc0: 20 20 20 20 20 7a 4f 77 6e 65 72 20 3d 20 67 2e zOwner = g.
2bd0: 7a 4c 6f 67 69 6e 3b 0a 20 20 20 20 7d 0a 20 20 zLogin;. }.
2be0: 7d 0a 20 20 69 66 28 20 7a 4f 77 6e 65 72 3d 3d }. if( zOwner==
2bf0: 30 20 29 20 7a 4f 77 6e 65 72 20 3d 20 67 2e 7a 0 ) zOwner = g.z
2c00: 4c 6f 67 69 6e 3b 0a 20 20 73 74 79 6c 65 5f 73 Login;. style_s
2c10: 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 ubmenu_element("
2c20: 43 61 6e 63 65 6c 22 2c 20 22 43 61 6e 63 65 6c Cancel", "Cancel
2c30: 22 2c 20 22 72 65 70 6f 72 74 6c 69 73 74 22 29 ", "reportlist")
2c40: 3b 0a 20 20 69 66 28 20 72 6e 3e 30 20 29 7b 0a ;. if( rn>0 ){.
2c50: 20 20 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e style_submen
2c60: 75 5f 65 6c 65 6d 65 6e 74 28 22 44 65 6c 65 74 u_element("Delet
2c70: 65 22 2c 20 22 44 65 6c 65 74 65 22 2c 20 22 72 e", "Delete", "r
2c80: 70 74 65 64 69 74 3f 72 6e 3d 25 64 26 64 65 6c ptedit?rn=%d&del
2c90: 31 3d 31 22 2c 20 72 6e 29 3b 0a 20 20 7d 0a 20 1=1", rn);. }.
2ca0: 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 72 6e style_header(rn
2cb0: 3e 30 20 3f 20 22 45 64 69 74 20 52 65 70 6f 72 >0 ? "Edit Repor
2cc0: 74 20 46 6f 72 6d 61 74 22 3a 22 43 72 65 61 74 t Format":"Creat
2cd0: 65 20 4e 65 77 20 52 65 70 6f 72 74 20 46 6f 72 e New Report For
2ce0: 6d 61 74 22 29 3b 0a 20 20 69 66 28 20 7a 45 72 mat");. if( zEr
2cf0: 72 20 29 7b 0a 20 20 20 20 40 20 3c 62 6c 6f 63 r ){. @ <bloc
2d00: 6b 71 75 6f 74 65 3e 3c 66 6f 6e 74 20 63 6f 6c kquote><font col
2d10: 6f 72 3d 22 23 66 66 30 30 30 30 22 3e 3c 62 3e or="#ff0000"><b>
2d20: 25 68 28 7a 45 72 72 29 3c 2f 62 3e 3c 2f 66 6f %h(zErr)</b></fo
2d30: 6e 74 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e nt></blockquote>
2d40: 0a 20 20 7d 0a 20 20 40 20 3c 66 6f 72 6d 20 61 . }. @ <form a
2d50: 63 74 69 6f 6e 3d 22 72 70 74 65 64 69 74 22 20 ction="rptedit"
2d60: 6d 65 74 68 6f 64 3d 22 50 4f 53 54 22 3e 0a 20 method="POST">.
2d70: 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 @ <input type="
2d80: 68 69 64 64 65 6e 22 20 6e 61 6d 65 3d 22 72 6e hidden" name="rn
2d90: 22 20 76 61 6c 75 65 3d 22 25 64 28 72 6e 29 22 " value="%d(rn)"
2da0: 3e 0a 20 20 40 20 3c 70 3e 52 65 70 6f 72 74 20 >. @ <p>Report
2db0: 54 69 74 6c 65 3a 3c 62 72 3e 0a 20 20 40 20 3c Title:<br>. @ <
2dc0: 69 6e 70 75 74 20 74 79 70 65 3d 22 74 65 78 74 input type="text
2dd0: 22 20 6e 61 6d 65 3d 22 74 22 20 76 61 6c 75 65 " name="t" value
2de0: 3d 22 25 68 28 7a 54 69 74 6c 65 29 22 20 73 69 ="%h(zTitle)" si
2df0: 7a 65 3d 22 36 30 22 3e 3c 2f 70 3e 0a 20 20 40 ze="60"></p>. @
2e00: 20 3c 70 3e 45 6e 74 65 72 20 61 20 63 6f 6d 70 <p>Enter a comp
2e10: 6c 65 74 65 20 53 51 4c 20 71 75 65 72 79 20 73 lete SQL query s
2e20: 74 61 74 65 6d 65 6e 74 20 61 67 61 69 6e 73 74 tatement against
2e30: 20 74 68 65 20 22 54 49 43 4b 45 54 22 20 74 61 the "TICKET" ta
2e40: 62 6c 65 3a 3c 62 72 3e 0a 20 20 40 20 3c 74 65 ble:<br>. @ <te
2e50: 78 74 61 72 65 61 20 6e 61 6d 65 3d 22 73 22 20 xtarea name="s"
2e60: 72 6f 77 73 3d 22 32 30 22 20 63 6f 6c 73 3d 22 rows="20" cols="
2e70: 38 30 22 3e 25 68 28 7a 53 51 4c 29 3c 2f 74 65 80">%h(zSQL)</te
2e80: 78 74 61 72 65 61 3e 0a 20 20 40 20 3c 2f 70 3e xtarea>. @ </p>
2e90: 0a 20 20 69 66 28 20 67 2e 6f 6b 41 64 6d 69 6e . if( g.okAdmin
2ea0: 20 29 7b 0a 20 20 20 20 40 20 3c 70 3e 52 65 70 ){. @ <p>Rep
2eb0: 6f 72 74 20 6f 77 6e 65 72 3a 0a 20 20 20 20 40 ort owner:. @
2ec0: 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 74 65 <input type="te
2ed0: 78 74 22 20 6e 61 6d 65 3d 22 77 22 20 73 69 7a xt" name="w" siz
2ee0: 65 3d 22 32 30 22 20 76 61 6c 75 65 3d 22 25 68 e="20" value="%h
2ef0: 28 7a 4f 77 6e 65 72 29 22 3e 0a 20 20 20 20 40 (zOwner)">. @
2f00: 20 3c 2f 70 3e 0a 20 20 7d 20 65 6c 73 65 20 7b </p>. } else {
2f10: 0a 20 20 20 20 40 20 3c 69 6e 70 75 74 20 74 79 . @ <input ty
2f20: 70 65 3d 22 68 69 64 64 65 6e 22 20 6e 61 6d 65 pe="hidden" name
2f30: 3d 22 77 22 20 76 61 6c 75 65 3d 22 25 68 28 7a ="w" value="%h(z
2f40: 4f 77 6e 65 72 29 22 3e 0a 20 20 7d 0a 20 20 40 Owner)">. }. @
2f50: 20 3c 70 3e 45 6e 74 65 72 20 61 6e 20 6f 70 74 <p>Enter an opt
2f60: 69 6f 6e 61 6c 20 63 6f 6c 6f 72 20 6b 65 79 20 ional color key
2f70: 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 in the following
2f80: 20 62 6f 78 2e 20 20 28 49 66 20 62 6c 61 6e 6b box. (If blank
2f90: 2c 20 6e 6f 0a 20 20 40 20 63 6f 6c 6f 72 20 6b , no. @ color k
2fa0: 65 79 20 69 73 20 64 69 73 70 6c 61 79 65 64 2e ey is displayed.
2fb0: 29 20 20 45 61 63 68 20 6c 69 6e 65 20 63 6f 6e ) Each line con
2fc0: 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20 66 tains the text f
2fd0: 6f 72 20 61 20 73 69 6e 67 6c 65 0a 20 20 40 20 or a single. @
2fe0: 65 6e 74 72 79 20 69 6e 20 74 68 65 20 6b 65 79 entry in the key
2ff0: 2e 20 20 54 68 65 20 66 69 72 73 74 20 74 6f 6b . The first tok
3000: 65 6e 20 6f 66 20 65 61 63 68 20 6c 69 6e 65 20 en of each line
3010: 69 73 20 74 68 65 20 62 61 63 6b 67 72 6f 75 6e is the backgroun
3020: 64 0a 20 20 40 20 63 6f 6c 6f 72 20 66 6f 72 20 d. @ color for
3030: 74 68 61 74 20 6c 69 6e 65 2e 3c 62 72 3e 0a 20 that line.<br>.
3040: 20 40 20 3c 74 65 78 74 61 72 65 61 20 6e 61 6d @ <textarea nam
3050: 65 3d 22 6b 22 20 72 6f 77 73 3d 22 38 22 20 63 e="k" rows="8" c
3060: 6f 6c 73 3d 22 35 30 22 3e 25 68 28 7a 43 6c 72 ols="50">%h(zClr
3070: 4b 65 79 29 3c 2f 74 65 78 74 61 72 65 61 3e 0a Key)</textarea>.
3080: 20 20 40 20 3c 2f 70 3e 0a 20 20 69 66 28 20 21 @ </p>. if( !
3090: 67 2e 6f 6b 41 64 6d 69 6e 20 26 26 20 73 74 72 g.okAdmin && str
30a0: 63 6d 70 28 7a 4f 77 6e 65 72 2c 67 2e 7a 4c 6f cmp(zOwner,g.zLo
30b0: 67 69 6e 29 21 3d 30 20 29 7b 0a 20 20 20 20 40 gin)!=0 ){. @
30c0: 20 3c 70 3e 54 68 69 73 20 72 65 70 6f 72 74 20 <p>This report
30d0: 66 6f 72 6d 61 74 20 69 73 20 6f 77 6e 65 64 20 format is owned
30e0: 62 79 20 25 68 28 7a 4f 77 6e 65 72 29 2e 20 20 by %h(zOwner).
30f0: 59 6f 75 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f You are not allo
3100: 77 65 64 0a 20 20 20 20 40 20 74 6f 20 63 68 61 wed. @ to cha
3110: 6e 67 65 20 69 74 2e 3c 2f 70 3e 0a 20 20 20 20 nge it.</p>.
3120: 40 20 3c 2f 66 6f 72 6d 3e 0a 20 20 20 20 72 65 @ </form>. re
3130: 70 6f 72 74 5f 66 6f 72 6d 61 74 5f 68 69 6e 74 port_format_hint
3140: 73 28 29 3b 0a 20 20 20 20 73 74 79 6c 65 5f 66 s();. style_f
3150: 6f 6f 74 65 72 28 29 3b 0a 20 20 20 20 72 65 74 ooter();. ret
3160: 75 72 6e 3b 0a 20 20 7d 0a 20 20 40 20 3c 69 6e urn;. }. @ <in
3170: 70 75 74 20 74 79 70 65 3d 22 73 75 62 6d 69 74 put type="submit
3180: 22 20 76 61 6c 75 65 3d 22 41 70 70 6c 79 20 43 " value="Apply C
3190: 68 61 6e 67 65 73 22 3e 0a 20 20 69 66 28 20 72 hanges">. if( r
31a0: 6e 3e 30 20 29 7b 0a 20 20 20 20 40 20 3c 69 6e n>0 ){. @ <in
31b0: 70 75 74 20 74 79 70 65 3d 22 73 75 62 6d 69 74 put type="submit
31c0: 22 20 76 61 6c 75 65 3d 22 44 65 6c 65 74 65 20 " value="Delete
31d0: 54 68 69 73 20 52 65 70 6f 72 74 22 20 6e 61 6d This Report" nam
31e0: 65 3d 22 64 65 6c 31 22 3e 0a 20 20 7d 0a 20 20 e="del1">. }.
31f0: 40 20 3c 2f 66 6f 72 6d 3e 0a 20 20 72 65 70 6f @ </form>. repo
3200: 72 74 5f 66 6f 72 6d 61 74 5f 68 69 6e 74 73 28 rt_format_hints(
3210: 29 3b 0a 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 );. style_foote
3220: 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 r();.}../*.** Ou
3230: 74 70 75 74 20 61 20 62 75 6e 63 68 20 6f 66 20 tput a bunch of
3240: 74 65 78 74 20 74 68 61 74 20 70 72 6f 76 69 64 text that provid
3250: 65 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 es information a
3260: 62 6f 75 74 20 72 65 70 6f 72 74 0a 2a 2a 20 66 bout report.** f
3270: 6f 72 6d 61 74 73 0a 2a 2f 0a 73 74 61 74 69 63 ormats.*/.static
3280: 20 76 6f 69 64 20 72 65 70 6f 72 74 5f 66 6f 72 void report_for
3290: 6d 61 74 5f 68 69 6e 74 73 28 76 6f 69 64 29 7b mat_hints(void){
32a0: 0a 20 20 63 68 61 72 20 2a 7a 53 63 68 65 6d 61 . char *zSchema
32b0: 3b 0a 20 20 7a 53 63 68 65 6d 61 20 3d 20 64 62 ;. zSchema = db
32c0: 5f 74 65 78 74 28 30 2c 22 53 45 4c 45 43 54 20 _text(0,"SELECT
32d0: 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f sql FROM sqlite_
32e0: 6d 61 73 74 65 72 20 57 48 45 52 45 20 6e 61 6d master WHERE nam
32f0: 65 3d 27 74 69 63 6b 65 74 27 22 29 3b 0a 20 20 e='ticket'");.
3300: 40 20 3c 68 72 3e 3c 68 33 3e 54 49 43 4b 45 54 @ <hr><h3>TICKET
3310: 20 53 63 68 65 6d 61 3c 2f 68 33 3e 0a 20 20 40 Schema</h3>. @
3320: 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 <blockquote><pr
3330: 65 3e 0a 20 20 40 20 25 68 28 7a 53 63 68 65 6d e>. @ %h(zSchem
3340: 61 29 0a 20 20 40 20 3c 2f 70 72 65 3e 3c 2f 62 a). @ </pre></b
3350: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 40 20 3c lockquote>. @ <
3360: 68 33 3e 4e 6f 74 65 73 3c 2f 68 33 3e 0a 20 20 h3>Notes</h3>.
3370: 40 20 3c 75 6c 3e 0a 20 20 40 20 3c 6c 69 3e 3c @ <ul>. @ <li><
3380: 70 3e 54 68 65 20 53 51 4c 20 6d 75 73 74 20 63 p>The SQL must c
3390: 6f 6e 73 69 73 74 20 6f 66 20 61 20 73 69 6e 67 onsist of a sing
33a0: 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d le SELECT statem
33b0: 65 6e 74 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 40 ent</p></li>. @
33c0: 0a 20 20 40 20 3c 6c 69 3e 3c 70 3e 49 66 20 61 . @ <li><p>If a
33d0: 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 column of the r
33e0: 65 73 75 6c 74 20 73 65 74 20 69 73 20 6e 61 6d esult set is nam
33f0: 65 64 20 22 23 22 20 74 68 65 6e 20 74 68 61 74 ed "#" then that
3400: 20 63 6f 6c 75 6d 6e 0a 20 20 40 20 69 73 20 61 column. @ is a
3410: 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 ssumed to hold a
3420: 20 74 69 63 6b 65 74 20 6e 75 6d 62 65 72 2e 20 ticket number.
3430: 20 41 20 68 79 70 65 72 6c 69 6e 6b 20 77 69 6c A hyperlink wil
3440: 6c 20 62 65 20 63 72 65 61 74 65 64 20 66 72 6f l be created fro
3450: 6d 0a 20 20 40 20 74 68 61 74 20 63 6f 6c 75 6d m. @ that colum
3460: 6e 20 74 6f 20 61 20 64 65 74 61 69 6c 65 64 20 n to a detailed
3470: 76 69 65 77 20 6f 66 20 74 68 65 20 74 69 63 6b view of the tick
3480: 65 74 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 40 et.</p></li>. @
3490: 0a 20 20 40 20 3c 6c 69 3e 3c 70 3e 49 66 20 61 . @ <li><p>If a
34a0: 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 column of the r
34b0: 65 73 75 6c 74 20 73 65 74 20 69 73 20 6e 61 6d esult set is nam
34c0: 65 64 20 22 62 67 63 6f 6c 6f 72 22 20 74 68 65 ed "bgcolor" the
34d0: 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 20 20 n the content.
34e0: 40 20 6f 66 20 74 68 61 74 20 63 6f 6c 75 6d 6e @ of that column
34f0: 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 determines the
3500: 62 61 63 6b 67 72 6f 75 6e 64 20 63 6f 6c 6f 72 background color
3510: 20 6f 66 20 74 68 65 20 72 6f 77 2e 3c 2f 70 3e of the row.</p>
3520: 3c 2f 6c 69 3e 0a 20 20 40 0a 20 20 40 20 3c 6c </li>. @. @ <l
3530: 69 3e 3c 70 3e 54 68 65 20 3c 62 3e 75 73 65 72 i><p>The <b>user
3540: 28 29 3c 2f 62 3e 20 53 51 4c 20 66 75 6e 63 74 ()</b> SQL funct
3550: 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 ion returns a st
3560: 72 69 6e 67 0a 20 20 40 20 77 68 69 63 68 20 69 ring. @ which i
3570: 73 20 74 68 65 20 6c 6f 67 69 6e 20 6f 66 20 74 s the login of t
3580: 68 65 20 63 75 72 72 65 6e 74 20 75 73 65 72 2e he current user.
3590: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 40 0a 20 20 </p></li>. @.
35a0: 40 20 3c 6c 69 3e 3c 70 3e 54 68 65 20 66 69 72 @ <li><p>The fir
35b0: 73 74 20 63 6f 6c 75 6d 6e 20 77 68 6f 73 65 20 st column whose
35c0: 6e 61 6d 65 20 62 65 67 69 6e 73 20 77 69 74 68 name begins with
35d0: 20 75 6e 64 65 72 73 63 6f 72 65 20 28 22 5f 22 underscore ("_"
35e0: 29 20 61 6e 64 20 61 6c 6c 0a 20 20 40 20 73 75 ) and all. @ su
35f0: 62 73 65 71 75 65 6e 74 20 63 6f 6c 75 6d 6e 73 bsequent columns
3600: 20 61 72 65 20 73 68 6f 77 6e 20 6f 6e 20 74 68 are shown on th
3610: 65 69 72 20 6f 77 6e 20 72 6f 77 73 20 69 6e 20 eir own rows in
3620: 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68 69 73 the table. This
3630: 20 6d 69 67 68 74 0a 20 20 40 20 62 65 20 75 73 might. @ be us
3640: 65 66 75 6c 20 66 6f 72 20 64 69 73 70 6c 61 79 eful for display
3650: 69 6e 67 20 74 68 65 20 64 65 73 63 72 69 70 74 ing the descript
3660: 69 6f 6e 20 6f 66 20 74 69 63 6b 65 74 73 2e 0a ion of tickets..
3670: 20 20 40 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 @ </p></li>.
3680: 40 0a 20 20 40 20 3c 6c 69 3e 3c 70 3e 54 68 65 @. @ <li><p>The
3690: 20 3c 62 3e 61 75 78 28 29 3c 2f 62 3e 20 53 51 <b>aux()</b> SQ
36a0: 4c 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 L function takes
36b0: 20 61 20 70 61 72 61 6d 65 74 65 72 20 6e 61 6d a parameter nam
36c0: 65 20 61 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 e as an argument
36d0: 0a 20 20 40 20 61 6e 64 20 72 65 74 75 72 6e 73 . @ and returns
36e0: 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 the value that
36f0: 74 68 65 20 75 73 65 72 20 65 6e 74 65 72 73 20 the user enters
3700: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 in the resulting
3710: 20 48 54 4d 4c 20 66 6f 72 6d 2e 20 41 0a 20 20 HTML form. A.
3720: 40 20 73 65 63 6f 6e 64 20 6f 70 74 69 6f 6e 61 @ second optiona
3730: 6c 20 70 61 72 61 6d 65 74 65 72 20 70 72 6f 76 l parameter prov
3740: 69 64 65 73 20 61 20 64 65 66 61 75 6c 74 20 76 ides a default v
3750: 61 6c 75 65 20 66 6f 72 20 74 68 65 20 66 69 65 alue for the fie
3760: 6c 64 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 40 ld.</p></li>. @
3770: 0a 20 20 40 20 3c 6c 69 3e 3c 70 3e 54 68 65 20 . @ <li><p>The
3780: 3c 62 3e 6f 70 74 69 6f 6e 28 29 3c 2f 62 3e 20 <b>option()</b>
3790: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b SQL function tak
37a0: 65 73 20 61 20 70 61 72 61 6d 65 74 65 72 20 6e es a parameter n
37b0: 61 6d 65 0a 20 20 40 20 61 6e 64 20 61 20 71 75 ame. @ and a qu
37c0: 6f 74 65 64 20 53 45 4c 45 43 54 20 73 74 61 74 oted SELECT stat
37d0: 65 6d 65 6e 74 20 61 73 20 70 61 72 61 6d 65 74 ement as paramet
37e0: 65 72 73 2e 20 54 68 65 20 71 75 65 72 79 20 72 ers. The query r
37f0: 65 73 75 6c 74 73 20 61 72 65 0a 20 20 40 20 70 esults are. @ p
3800: 72 65 73 65 6e 74 65 64 20 61 73 20 61 6e 20 48 resented as an H
3810: 54 4d 4c 20 64 72 6f 70 64 6f 77 6e 20 6d 65 6e TML dropdown men
3820: 75 20 61 6e 64 20 74 68 65 20 66 75 6e 63 74 69 u and the functi
3830: 6f 6e 20 72 65 74 75 72 6e 73 0a 20 20 40 20 74 on returns. @ t
3840: 68 65 20 63 75 72 72 65 6e 74 6c 79 20 73 65 6c he currently sel
3850: 65 63 74 65 64 20 76 61 6c 75 65 2e 20 52 65 73 ected value. Res
3860: 75 6c 74 73 20 6d 61 79 20 62 65 20 61 20 73 69 ults may be a si
3870: 6e 67 6c 65 20 76 61 6c 75 65 20 63 6f 6c 75 6d ngle value colum
3880: 6e 20 6f 72 0a 20 20 40 20 74 77 6f 20 3c 62 3e n or. @ two <b>
3890: 76 61 6c 75 65 2c 64 65 73 63 72 69 70 74 69 6f value,descriptio
38a0: 6e 3c 2f 62 3e 20 63 6f 6c 75 6d 6e 73 2e 20 54 n</b> columns. T
38b0: 68 65 20 66 69 72 73 74 20 72 6f 77 20 69 73 20 he first row is
38c0: 74 68 65 20 64 65 66 61 75 6c 74 2e 3c 2f 70 3e the default.</p>
38d0: 3c 2f 6c 69 3e 0a 20 20 40 0a 20 20 40 20 3c 6c </li>. @. @ <l
38e0: 69 3e 3c 70 3e 54 68 65 20 3c 62 3e 63 67 69 28 i><p>The <b>cgi(
38f0: 29 3c 2f 62 3e 20 53 51 4c 20 66 75 6e 63 74 69 )</b> SQL functi
3900: 6f 6e 20 74 61 6b 65 73 20 61 20 70 61 72 61 6d on takes a param
3910: 65 74 65 72 20 6e 61 6d 65 20 61 73 20 61 6e 20 eter name as an
3920: 61 72 67 75 6d 65 6e 74 0a 20 20 40 20 61 6e 64 argument. @ and
3930: 20 72 65 74 75 72 6e 73 20 74 68 65 20 76 61 6c returns the val
3940: 75 65 20 6f 66 20 61 20 63 6f 72 72 65 73 70 6f ue of a correspo
3950: 6e 64 69 6e 67 20 43 47 49 20 71 75 65 72 79 20 nding CGI query
3960: 76 61 6c 75 65 2e 20 49 66 20 74 68 65 20 43 47 value. If the CG
3970: 49 0a 20 20 40 20 70 61 72 61 6d 65 74 65 72 20 I. @ parameter
3980: 64 6f 65 73 6e 27 74 20 65 78 69 73 74 2c 20 61 doesn't exist, a
3990: 6e 20 6f 70 74 69 6f 6e 61 6c 20 73 65 63 6f 6e n optional secon
39a0: 64 20 61 72 67 75 6d 65 6e 74 20 77 69 6c 6c 20 d argument will
39b0: 62 65 20 72 65 74 75 72 6e 65 64 0a 20 20 40 20 be returned. @
39c0: 69 6e 73 74 65 61 64 2e 3c 2f 70 3e 3c 2f 6c 69 instead.</p></li
39d0: 3e 0a 20 20 40 0a 20 20 40 20 3c 6c 69 3e 3c 70 >. @. @ <li><p
39e0: 3e 49 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 >If a column is
39f0: 77 72 61 70 70 65 64 20 62 79 20 74 68 65 20 3c wrapped by the <
3a00: 62 3e 77 69 6b 69 28 29 3c 2f 62 3e 20 53 51 4c b>wiki()</b> SQL
3a10: 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74 20 77 69 function, it wi
3a20: 6c 6c 0a 20 20 40 20 62 65 20 72 65 6e 64 65 72 ll. @ be render
3a30: 65 64 20 61 73 20 77 69 6b 69 20 66 6f 72 6d 61 ed as wiki forma
3a40: 74 74 65 64 20 63 6f 6e 74 65 6e 74 2e 3c 2f 70 tted content.</p
3a50: 3e 3c 2f 6c 69 3e 0a 20 20 40 0a 20 20 40 20 3c ></li>. @. @ <
3a60: 6c 69 3e 3c 70 3e 49 66 20 61 20 63 6f 6c 75 6d li><p>If a colum
3a70: 6e 20 69 73 20 77 72 61 70 70 65 64 20 62 79 20 n is wrapped by
3a80: 74 68 65 20 3c 62 3e 74 6b 74 28 29 3c 2f 62 3e the <b>tkt()</b>
3a90: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 20 69 SQL function, i
3aa0: 74 20 77 69 6c 6c 0a 20 20 40 20 62 65 20 73 68 t will. @ be sh
3ab0: 6f 77 6e 20 61 73 20 61 20 74 69 63 6b 65 74 20 own as a ticket
3ac0: 69 64 20 77 69 74 68 20 61 20 6c 69 6e 6b 20 74 id with a link t
3ad0: 6f 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 o the appropriat
3ae0: 65 20 70 61 67 65 3c 2f 70 3e 3c 2f 6c 69 3e 0a e page</p></li>.
3af0: 20 20 40 0a 20 20 40 20 3c 6c 69 3e 3c 70 3e 49 @. @ <li><p>I
3b00: 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 77 72 f a column is wr
3b10: 61 70 70 65 64 20 62 79 20 74 68 65 20 3c 62 3e apped by the <b>
3b20: 63 68 6e 67 28 29 3c 2f 62 3e 20 53 51 4c 20 66 chng()</b> SQL f
3b30: 75 6e 63 74 69 6f 6e 2c 20 69 74 20 77 69 6c 6c unction, it will
3b40: 0a 20 20 40 20 62 65 20 73 68 6f 77 6e 20 61 73 . @ be shown as
3b50: 20 61 20 62 61 73 65 6c 69 6e 65 20 69 64 20 77 a baseline id w
3b60: 69 74 68 20 61 20 6c 69 6e 6b 20 74 6f 20 74 68 ith a link to th
3b70: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 70 61 e appropriate pa
3b80: 67 65 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 40 ge.</p></li>. @
3b90: 0a 20 20 40 20 3c 6c 69 3e 3c 70 3e 54 68 65 20 . @ <li><p>The
3ba0: 3c 62 3e 73 65 61 72 63 68 28 29 3c 2f 62 3e 20 <b>search()</b>
3bb0: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b SQL function tak
3bc0: 65 73 20 61 20 6b 65 79 77 6f 72 64 20 70 61 74 es a keyword pat
3bd0: 74 65 72 6e 20 61 6e 64 0a 20 20 40 20 61 20 73 tern and. @ a s
3be0: 65 61 72 63 68 20 74 65 78 74 2e 20 54 68 65 20 earch text. The
3bf0: 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 function returns
3c00: 20 61 6e 20 69 6e 74 65 67 65 72 20 73 63 6f 72 an integer scor
3c10: 65 20 77 68 69 63 68 20 69 73 0a 20 20 40 20 68 e which is. @ h
3c20: 69 67 68 65 72 20 64 65 70 65 6e 64 69 6e 67 20 igher depending
3c30: 6f 6e 20 68 6f 77 20 77 65 6c 6c 20 74 68 65 20 on how well the
3c40: 73 65 61 72 63 68 20 77 65 6e 74 2e 3c 2f 70 3e search went.</p>
3c50: 3c 2f 6c 69 3e 0a 20 20 40 0a 20 20 40 20 3c 6c </li>. @. @ <l
3c60: 69 3e 3c 70 3e 54 68 65 20 71 75 65 72 79 20 63 i><p>The query c
3c70: 61 6e 20 6a 6f 69 6e 20 6f 74 68 65 72 20 74 61 an join other ta
3c80: 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 bles in the data
3c90: 62 61 73 65 20 62 65 73 69 64 65 73 20 54 49 43 base besides TIC
3ca0: 4b 45 54 2e 0a 20 20 40 20 3c 2f 70 3e 3c 2f 6c KET.. @ </p></l
3cb0: 69 3e 0a 20 20 40 20 3c 2f 75 6c 3e 0a 20 20 40 i>. @ </ul>. @
3cc0: 0a 20 20 40 20 3c 68 33 3e 45 78 61 6d 70 6c 65 . @ <h3>Example
3cd0: 73 3c 2f 68 33 3e 0a 20 20 40 20 3c 70 3e 49 6e s</h3>. @ <p>In
3ce0: 20 74 68 69 73 20 65 78 61 6d 70 6c 65 2c 20 74 this example, t
3cf0: 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 he first column
3d00: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 in the result se
3d10: 74 20 69 73 20 6e 61 6d 65 64 0a 20 20 40 20 22 t is named. @ "
3d20: 62 67 63 6f 6c 6f 72 22 2e 20 20 54 68 65 20 76 bgcolor". The v
3d30: 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c alue of this col
3d40: 75 6d 6e 20 69 73 20 6e 6f 74 20 64 69 73 70 6c umn is not displ
3d50: 61 79 65 64 2e 20 20 49 6e 73 74 65 61 64 2c 20 ayed. Instead,
3d60: 69 74 0a 20 20 40 20 73 65 6c 65 63 74 73 20 74 it. @ selects t
3d70: 68 65 20 62 61 63 6b 67 72 6f 75 6e 64 20 63 6f he background co
3d80: 6c 6f 72 20 6f 66 20 65 61 63 68 20 72 6f 77 20 lor of each row
3d90: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 54 49 43 based on the TIC
3da0: 4b 45 54 2e 53 54 41 54 55 53 0a 20 20 40 20 66 KET.STATUS. @ f
3db0: 69 65 6c 64 20 6f 66 20 74 68 65 20 64 61 74 61 ield of the data
3dc0: 62 61 73 65 2e 20 20 54 68 65 20 63 6f 6c 6f 72 base. The color
3dd0: 20 6b 65 79 20 61 74 20 74 68 65 20 72 69 67 68 key at the righ
3de0: 74 20 73 68 6f 77 73 20 74 68 65 20 76 61 72 69 t shows the vari
3df0: 6f 75 73 0a 20 20 40 20 63 6f 6c 6f 72 20 63 6f ous. @ color co
3e00: 64 65 73 2e 3c 2f 70 3e 0a 20 20 40 20 3c 74 61 des.</p>. @ <ta
3e10: 62 6c 65 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 ble align="right
3e20: 22 20 73 74 79 6c 65 3d 22 6d 61 72 67 69 6e 3a " style="margin:
3e30: 20 30 20 35 70 78 3b 22 20 62 6f 72 64 65 72 3d 0 5px;" border=
3e40: 31 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 30 20 1 cellspacing=0
3e50: 77 69 64 74 68 3d 31 32 35 3e 0a 20 20 40 20 3c width=125>. @ <
3e60: 74 72 20 62 67 63 6f 6c 6f 72 3d 22 23 66 32 64 tr bgcolor="#f2d
3e70: 63 64 63 22 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 cdc"><td align="
3e80: 63 65 6e 74 65 72 22 3e 6e 65 77 20 6f 72 20 61 center">new or a
3e90: 63 74 69 76 65 3c 2f 74 64 3e 3c 2f 74 72 3e 0a ctive</td></tr>.
3ea0: 20 20 40 20 3c 74 72 20 62 67 63 6f 6c 6f 72 3d @ <tr bgcolor=
3eb0: 22 23 65 38 65 38 62 64 22 3e 3c 74 64 20 61 6c "#e8e8bd"><td al
3ec0: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 72 65 76 ign="center">rev
3ed0: 69 65 77 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 iew</td></tr>.
3ee0: 40 20 3c 74 72 20 62 67 63 6f 6c 6f 72 3d 22 23 @ <tr bgcolor="#
3ef0: 63 66 65 38 62 64 22 3e 3c 74 64 20 61 6c 69 67 cfe8bd"><td alig
3f00: 6e 3d 22 63 65 6e 74 65 72 22 3e 66 69 78 65 64 n="center">fixed
3f10: 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 40 20 3c </td></tr>. @ <
3f20: 74 72 20 62 67 63 6f 6c 6f 72 3d 22 23 62 64 65 tr bgcolor="#bde
3f30: 35 64 36 22 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 5d6"><td align="
3f40: 63 65 6e 74 65 72 22 3e 74 65 73 74 65 64 3c 2f center">tested</
3f50: 74 64 3e 3c 2f 74 72 3e 0a 20 20 40 20 3c 74 72 td></tr>. @ <tr
3f60: 20 62 67 63 6f 6c 6f 72 3d 22 23 63 61 63 61 65 bgcolor="#cacae
3f70: 35 22 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 5"><td align="ce
3f80: 6e 74 65 72 22 3e 64 65 66 65 72 3c 2f 74 64 3e nter">defer</td>
3f90: 3c 2f 74 72 3e 0a 20 20 40 20 3c 74 72 20 62 67 </tr>. @ <tr bg
3fa0: 63 6f 6c 6f 72 3d 22 23 63 38 63 38 63 38 22 3e color="#c8c8c8">
3fb0: 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 <td align="cente
3fc0: 72 22 3e 63 6c 6f 73 65 64 3c 2f 74 64 3e 3c 2f r">closed</td></
3fd0: 74 72 3e 0a 20 20 40 20 3c 2f 74 61 62 6c 65 3e tr>. @ </table>
3fe0: 0a 20 20 40 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 . @ <blockquote
3ff0: 3e 3c 70 72 65 3e 0a 20 20 40 20 53 45 4c 45 43 ><pre>. @ SELEC
4000: 54 0a 20 20 40 20 20 20 43 41 53 45 20 57 48 45 T. @ CASE WHE
4010: 4e 20 73 74 61 74 75 73 20 49 4e 20 28 27 6e 65 N status IN ('ne
4020: 77 27 2c 27 61 63 74 69 76 65 27 29 20 54 48 45 w','active') THE
4030: 4e 20 27 23 66 32 64 63 64 63 27 0a 20 20 40 20 N '#f2dcdc'. @
4040: 20 20 20 20 20 20 20 57 48 45 4e 20 73 74 61 74 WHEN stat
4050: 75 73 3d 27 72 65 76 69 65 77 27 20 54 48 45 4e us='review' THEN
4060: 20 27 23 65 38 65 38 62 64 27 0a 20 20 40 20 20 '#e8e8bd'. @
4070: 20 20 20 20 20 20 57 48 45 4e 20 73 74 61 74 75 WHEN statu
4080: 73 3d 27 66 69 78 65 64 27 20 54 48 45 4e 20 27 s='fixed' THEN '
4090: 23 63 66 65 38 62 64 27 0a 20 20 40 20 20 20 20 #cfe8bd'. @
40a0: 20 20 20 20 57 48 45 4e 20 73 74 61 74 75 73 3d WHEN status=
40b0: 27 74 65 73 74 65 64 27 20 54 48 45 4e 20 27 23 'tested' THEN '#
40c0: 62 64 65 35 64 36 27 0a 20 20 40 20 20 20 20 20 bde5d6'. @
40d0: 20 20 20 57 48 45 4e 20 73 74 61 74 75 73 3d 27 WHEN status='
40e0: 64 65 66 65 72 27 20 54 48 45 4e 20 27 23 63 61 defer' THEN '#ca
40f0: 63 61 65 35 27 0a 20 20 40 20 20 20 20 20 20 20 cae5'. @
4100: 20 45 4c 53 45 20 27 23 63 38 63 38 63 38 27 20 ELSE '#c8c8c8'
4110: 45 4e 44 20 61 73 20 27 62 67 63 6f 6c 6f 72 27 END as 'bgcolor'
4120: 2c 0a 20 20 40 20 20 20 74 6e 20 41 53 20 27 23 ,. @ tn AS '#
4130: 27 2c 0a 20 20 40 20 20 20 74 79 70 65 20 41 53 ',. @ type AS
4140: 20 27 54 79 70 65 27 2c 0a 20 20 40 20 20 20 73 'Type',. @ s
4150: 74 61 74 75 73 20 41 53 20 27 53 74 61 74 75 73 tatus AS 'Status
4160: 27 2c 0a 20 20 40 20 20 20 73 64 61 74 65 28 6f ',. @ sdate(o
4170: 72 69 67 74 69 6d 65 29 20 41 53 20 27 43 72 65 rigtime) AS 'Cre
4180: 61 74 65 64 27 2c 0a 20 20 40 20 20 20 6f 77 6e ated',. @ own
4190: 65 72 20 41 53 20 27 42 79 27 2c 0a 20 20 40 20 er AS 'By',. @
41a0: 20 20 73 75 62 73 79 73 74 65 6d 20 41 53 20 27 subsystem AS '
41b0: 53 75 62 73 79 73 27 2c 0a 20 20 40 20 20 20 73 Subsys',. @ s
41c0: 64 61 74 65 28 63 68 61 6e 67 65 74 69 6d 65 29 date(changetime)
41d0: 20 41 53 20 27 43 68 61 6e 67 65 64 27 2c 0a 20 AS 'Changed',.
41e0: 20 40 20 20 20 61 73 73 69 67 6e 65 64 74 6f 20 @ assignedto
41f0: 41 53 20 27 41 73 73 69 67 6e 65 64 27 2c 0a 20 AS 'Assigned',.
4200: 20 40 20 20 20 73 65 76 65 72 69 74 79 20 41 53 @ severity AS
4210: 20 27 53 76 72 27 2c 0a 20 20 40 20 20 20 70 72 'Svr',. @ pr
4220: 69 6f 72 69 74 79 20 41 53 20 27 50 72 69 27 2c iority AS 'Pri',
4230: 0a 20 20 40 20 20 20 74 69 74 6c 65 20 41 53 20 . @ title AS
4240: 27 54 69 74 6c 65 27 0a 20 20 40 20 46 52 4f 4d 'Title'. @ FROM
4250: 20 74 69 63 6b 65 74 0a 20 20 40 20 3c 2f 70 72 ticket. @ </pr
4260: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a e></blockquote>.
4270: 20 20 40 20 3c 70 3e 54 6f 20 62 61 73 65 20 74 @ <p>To base t
4280: 68 65 20 62 61 63 6b 67 72 6f 75 6e 64 20 63 6f he background co
4290: 6c 6f 72 20 6f 6e 20 74 68 65 20 54 49 43 4b 45 lor on the TICKE
42a0: 54 2e 50 52 49 4f 52 49 54 59 20 6f 72 0a 20 20 T.PRIORITY or.
42b0: 40 20 54 49 43 4b 45 54 2e 53 45 56 45 52 49 54 @ TICKET.SEVERIT
42c0: 59 20 66 69 65 6c 64 73 2c 20 73 75 62 73 74 69 Y fields, substi
42d0: 74 75 74 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 tute the followi
42e0: 6e 67 20 63 6f 64 65 20 66 6f 72 20 74 68 65 0a ng code for the.
42f0: 20 20 40 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e @ first column
4300: 20 6f 66 20 74 68 65 20 71 75 65 72 79 3a 3c 2f of the query:</
4310: 70 3e 0a 20 20 40 20 3c 74 61 62 6c 65 20 61 6c p>. @ <table al
4320: 69 67 6e 3d 22 72 69 67 68 74 22 20 73 74 79 6c ign="right" styl
4330: 65 3d 22 6d 61 72 67 69 6e 3a 20 30 20 35 70 78 e="margin: 0 5px
4340: 3b 22 20 62 6f 72 64 65 72 3d 31 20 63 65 6c 6c ;" border=1 cell
4350: 73 70 61 63 69 6e 67 3d 30 20 77 69 64 74 68 3d spacing=0 width=
4360: 31 32 35 3e 0a 20 20 40 20 3c 74 72 20 62 67 63 125>. @ <tr bgc
4370: 6f 6c 6f 72 3d 22 23 66 32 64 63 64 63 22 3e 3c olor="#f2dcdc"><
4380: 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 td align="center
4390: 22 3e 31 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 ">1</td></tr>.
43a0: 40 20 3c 74 72 20 62 67 63 6f 6c 6f 72 3d 22 23 @ <tr bgcolor="#
43b0: 65 38 65 38 62 64 22 3e 3c 74 64 20 61 6c 69 67 e8e8bd"><td alig
43c0: 6e 3d 22 63 65 6e 74 65 72 22 3e 32 3c 2f 74 64 n="center">2</td
43d0: 3e 3c 2f 74 72 3e 0a 20 20 40 20 3c 74 72 20 62 ></tr>. @ <tr b
43e0: 67 63 6f 6c 6f 72 3d 22 23 63 66 65 38 62 64 22 gcolor="#cfe8bd"
43f0: 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 ><td align="cent
4400: 65 72 22 3e 33 3c 2f 74 64 3e 3c 2f 74 72 3e 0a er">3</td></tr>.
4410: 20 20 40 20 3c 74 72 20 62 67 63 6f 6c 6f 72 3d @ <tr bgcolor=
4420: 22 23 63 61 63 61 65 35 22 3e 3c 74 64 20 61 6c "#cacae5"><td al
4430: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 34 3c 2f ign="center">4</
4440: 74 64 3e 3c 2f 74 72 3e 0a 20 20 40 20 3c 74 72 td></tr>. @ <tr
4450: 20 62 67 63 6f 6c 6f 72 3d 22 23 63 38 63 38 63 bgcolor="#c8c8c
4460: 38 22 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 8"><td align="ce
4470: 6e 74 65 72 22 3e 35 3c 2f 74 64 3e 3c 2f 74 72 nter">5</td></tr
4480: 3e 0a 20 20 40 20 3c 2f 74 61 62 6c 65 3e 0a 20 >. @ </table>.
4490: 20 40 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c @ <blockquote><
44a0: 70 72 65 3e 0a 20 20 40 20 53 45 4c 45 43 54 0a pre>. @ SELECT.
44b0: 20 20 40 20 20 20 43 41 53 45 20 70 72 69 6f 72 @ CASE prior
44c0: 69 74 79 20 57 48 45 4e 20 31 20 54 48 45 4e 20 ity WHEN 1 THEN
44d0: 27 23 66 32 64 63 64 63 27 0a 20 20 40 20 20 20 '#f2dcdc'. @
44e0: 20 20 20 20 20 57 48 45 4e 20 32 20 54 48 45 4e WHEN 2 THEN
44f0: 20 27 23 65 38 65 38 62 64 27 0a 20 20 40 20 20 '#e8e8bd'. @
4500: 20 20 20 20 20 20 57 48 45 4e 20 33 20 54 48 45 WHEN 3 THE
4510: 4e 20 27 23 63 66 65 38 62 64 27 0a 20 20 40 20 N '#cfe8bd'. @
4520: 20 20 20 20 20 20 20 57 48 45 4e 20 34 20 54 48 WHEN 4 TH
4530: 45 4e 20 27 23 63 61 63 61 65 35 27 0a 20 20 40 EN '#cacae5'. @
4540: 20 20 20 20 20 20 20 20 45 4c 53 45 20 27 23 63 ELSE '#c
4550: 38 63 38 63 38 27 20 45 4e 44 20 61 73 20 27 62 8c8c8' END as 'b
4560: 67 63 6f 6c 6f 72 27 2c 0a 20 20 40 20 2e 2e 2e gcolor',. @ ...
4570: 0a 20 20 40 20 46 52 4f 4d 20 74 69 63 6b 65 74 . @ FROM ticket
4580: 0a 20 20 40 20 3c 2f 70 72 65 3e 3c 2f 62 6c 6f . @ </pre></blo
4590: 63 6b 71 75 6f 74 65 3e 0a 23 69 66 20 30 0a 20 ckquote>.#if 0.
45a0: 20 40 20 3c 70 3e 59 6f 75 20 63 61 6e 2c 20 6f @ <p>You can, o
45b0: 66 20 63 6f 75 72 73 65 2c 20 73 75 62 73 74 69 f course, substi
45c0: 74 75 74 65 20 64 69 66 66 65 72 65 6e 74 20 63 tute different c
45d0: 6f 6c 6f 72 73 20 69 66 20 79 6f 75 20 63 68 6f olors if you cho
45e0: 6f 73 65 2e 0a 20 20 40 20 48 65 72 65 20 69 73 ose.. @ Here is
45f0: 20 61 20 70 61 6c 65 74 74 65 20 6f 66 20 73 75 a palette of su
4600: 67 67 65 73 74 65 64 20 62 61 63 6b 67 72 6f 75 ggested backgrou
4610: 6e 64 20 63 6f 6c 6f 72 73 3a 3c 2f 70 3e 0a 20 nd colors:</p>.
4620: 20 40 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a @ <blockquote>.
4630: 20 20 40 20 3c 74 61 62 6c 65 20 62 6f 72 64 65 @ <table borde
4640: 72 3d 31 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d r=1 cellspacing=
4650: 30 20 77 69 64 74 68 3d 33 30 30 3e 0a 20 20 40 0 width=300>. @
4660: 20 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 <tr><td align="
4670: 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d center" bgcolor=
4680: 22 23 66 66 62 64 62 64 22 3e 23 66 66 62 64 62 "#ffbdbd">#ffbdb
4690: 64 3c 2f 74 64 3e 0a 20 20 40 20 20 20 20 20 3c d</td>. @ <
46a0: 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 td align="center
46b0: 22 20 62 67 63 6f 6c 6f 72 3d 22 23 66 32 64 63 " bgcolor="#f2dc
46c0: 64 63 22 3e 23 66 32 64 63 64 63 3c 2f 74 64 3e dc">#f2dcdc</td>
46d0: 3c 2f 74 72 3e 0a 20 20 40 20 3c 74 72 3e 3c 74 </tr>. @ <tr><t
46e0: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 d align="center"
46f0: 20 62 67 63 6f 6c 6f 72 3d 22 23 66 66 66 66 62 bgcolor="#ffffb
4700: 64 22 3e 23 66 66 66 66 62 64 3c 2f 74 64 3e 0a d">#ffffbd</td>.
4710: 20 20 40 20 20 20 20 20 3c 74 64 20 61 6c 69 67 @ <td alig
4720: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c n="center" bgcol
4730: 6f 72 3d 22 23 65 38 65 38 62 64 22 3e 23 65 38 or="#e8e8bd">#e8
4740: 65 38 62 64 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 e8bd</td></tr>.
4750: 20 40 20 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e @ <tr><td align
4760: 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f ="center" bgcolo
4770: 72 3d 22 23 63 30 65 62 63 30 22 3e 23 63 30 65 r="#c0ebc0">#c0e
4780: 62 63 30 3c 2f 74 64 3e 0a 20 20 40 20 20 20 20 bc0</td>. @
4790: 20 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 <td align="cent
47a0: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63 66 er" bgcolor="#cf
47b0: 65 38 62 64 22 3e 23 63 66 65 38 62 64 3c 2f 74 e8bd">#cfe8bd</t
47c0: 64 3e 3c 2f 74 72 3e 0a 20 20 40 20 3c 74 72 3e d></tr>. @ <tr>
47d0: 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 <td align="cente
47e0: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63 30 63 r" bgcolor="#c0c
47f0: 30 66 34 22 3e 23 63 30 63 30 66 34 3c 2f 74 64 0f4">#c0c0f4</td
4800: 3e 0a 20 20 40 20 20 20 20 20 3c 74 64 20 61 6c >. @ <td al
4810: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 ign="center" bgc
4820: 6f 6c 6f 72 3d 22 23 64 36 64 36 65 38 22 3e 23 olor="#d6d6e8">#
4830: 64 36 64 36 65 38 3c 2f 74 64 3e 3c 2f 74 72 3e d6d6e8</td></tr>
4840: 0a 20 20 40 20 3c 74 72 3e 3c 74 64 20 61 6c 69 . @ <tr><td ali
4850: 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f gn="center" bgco
4860: 6c 6f 72 3d 22 23 64 30 62 31 66 66 22 3e 23 64 lor="#d0b1ff">#d
4870: 30 62 31 66 66 3c 2f 74 64 3e 0a 20 20 40 20 20 0b1ff</td>. @
4880: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 <td align="ce
4890: 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 nter" bgcolor="#
48a0: 64 32 63 30 64 62 22 3e 23 64 32 63 30 64 62 3c d2c0db">#d2c0db<
48b0: 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 40 20 3c 74 /td></tr>. @ <t
48c0: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e r><td align="cen
48d0: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 62 ter" bgcolor="#b
48e0: 62 62 62 62 62 22 3e 23 62 62 62 62 62 62 3c 2f bbbbb">#bbbbbb</
48f0: 74 64 3e 0a 20 20 40 20 20 20 20 20 3c 74 64 20 td>. @ <td
4900: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 align="center" b
4910: 67 63 6f 6c 6f 72 3d 22 23 64 30 64 30 64 30 22 gcolor="#d0d0d0"
4920: 3e 23 64 30 64 30 64 30 3c 2f 74 64 3e 3c 2f 74 >#d0d0d0</td></t
4930: 72 3e 0a 20 20 40 20 3c 2f 74 61 62 6c 65 3e 0a r>. @ </table>.
4940: 20 20 40 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 @ </blockquote
4950: 3e 0a 23 65 6e 64 69 66 0a 20 20 40 20 3c 70 3e >.#endif. @ <p>
4960: 54 6f 20 73 65 65 20 74 68 65 20 54 49 43 4b 45 To see the TICKE
4970: 54 2e 44 45 53 43 52 49 50 54 49 4f 4e 20 61 6e T.DESCRIPTION an
4980: 64 20 54 49 43 4b 45 54 2e 52 45 4d 41 52 4b 53 d TICKET.REMARKS
4990: 20 66 69 65 6c 64 73 2c 20 69 6e 63 6c 75 64 65 fields, include
49a0: 0a 20 20 40 20 74 68 65 6d 20 61 73 20 74 68 65 . @ them as the
49b0: 20 6c 61 73 74 20 74 77 6f 20 63 6f 6c 75 6d 6e last two column
49c0: 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 s of the result
49d0: 73 65 74 20 61 6e 64 20 67 69 76 65 6e 20 74 68 set and given th
49e0: 65 6d 20 6e 61 6d 65 73 0a 20 20 40 20 74 68 61 em names. @ tha
49f0: 74 20 62 65 67 69 6e 20 77 69 74 68 20 61 6e 20 t begin with an
4a00: 75 6e 64 65 72 73 63 6f 72 65 2e 20 20 4c 69 6b underscore. Lik
4a10: 65 20 74 68 69 73 3a 3c 2f 70 3e 0a 20 20 40 20 e this:</p>. @
4a20: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 <blockquote><pre
4a30: 3e 0a 20 20 40 20 20 53 45 4c 45 43 54 0a 20 20 >. @ SELECT.
4a40: 40 20 20 20 20 74 6e 20 41 53 20 27 23 27 2c 0a @ tn AS '#',.
4a50: 20 20 40 20 20 20 20 74 79 70 65 20 41 53 20 27 @ type AS '
4a60: 54 79 70 65 27 2c 0a 20 20 40 20 20 20 20 73 74 Type',. @ st
4a70: 61 74 75 73 20 41 53 20 27 53 74 61 74 75 73 27 atus AS 'Status'
4a80: 2c 0a 20 20 40 20 20 20 20 73 64 61 74 65 28 6f ,. @ sdate(o
4a90: 72 69 67 74 69 6d 65 29 20 41 53 20 27 43 72 65 rigtime) AS 'Cre
4aa0: 61 74 65 64 27 2c 0a 20 20 40 20 20 20 20 6f 77 ated',. @ ow
4ab0: 6e 65 72 20 41 53 20 27 42 79 27 2c 0a 20 20 40 ner AS 'By',. @
4ac0: 20 20 20 20 73 75 62 73 79 73 74 65 6d 20 41 53 subsystem AS
4ad0: 20 27 53 75 62 73 79 73 27 2c 0a 20 20 40 20 20 'Subsys',. @
4ae0: 20 20 73 64 61 74 65 28 63 68 61 6e 67 65 74 69 sdate(changeti
4af0: 6d 65 29 20 41 53 20 27 43 68 61 6e 67 65 64 27 me) AS 'Changed'
4b00: 2c 0a 20 20 40 20 20 20 20 61 73 73 69 67 6e 65 ,. @ assigne
4b10: 64 74 6f 20 41 53 20 27 41 73 73 69 67 6e 65 64 dto AS 'Assigned
4b20: 27 2c 0a 20 20 40 20 20 20 20 73 65 76 65 72 69 ',. @ severi
4b30: 74 79 20 41 53 20 27 53 76 72 27 2c 0a 20 20 40 ty AS 'Svr',. @
4b40: 20 20 20 20 70 72 69 6f 72 69 74 79 20 41 53 20 priority AS
4b50: 27 50 72 69 27 2c 0a 20 20 40 20 20 20 20 74 69 'Pri',. @ ti
4b60: 74 6c 65 20 41 53 20 27 54 69 74 6c 65 27 2c 0a tle AS 'Title',.
4b70: 20 20 40 20 20 20 20 64 65 73 63 72 69 70 74 69 @ descripti
4b80: 6f 6e 20 41 53 20 27 5f 44 65 73 63 72 69 70 74 on AS '_Descript
4b90: 69 6f 6e 27 2c 20 20 20 2d 2d 20 57 68 65 6e 20 ion', -- When
4ba0: 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 the column name
4bb0: 62 65 67 69 6e 73 20 77 69 74 68 20 27 5f 27 0a begins with '_'.
4bc0: 20 20 40 20 20 20 20 72 65 6d 61 72 6b 73 20 41 @ remarks A
4bd0: 53 20 27 5f 52 65 6d 61 72 6b 73 27 20 20 20 20 S '_Remarks'
4be0: 20 20 20 20 20 20 20 20 2d 2d 20 74 68 65 20 64 -- the d
4bf0: 61 74 61 20 69 73 20 73 68 6f 77 6e 20 6f 6e 20 ata is shown on
4c00: 61 20 73 65 70 61 72 61 74 65 20 72 6f 77 2e 0a a separate row..
4c10: 20 20 40 20 20 46 52 4f 4d 20 74 69 63 6b 65 74 @ FROM ticket
4c20: 0a 20 20 40 20 3c 2f 70 72 65 3e 3c 2f 62 6c 6f . @ </pre></blo
4c30: 63 6b 71 75 6f 74 65 3e 0a 20 20 40 0a 20 20 40 ckquote>. @. @
4c40: 20 3c 70 3e 4f 72 2c 20 74 6f 20 73 65 65 20 70 <p>Or, to see p
4c50: 61 72 74 20 6f 66 20 74 68 65 20 64 65 73 63 72 art of the descr
4c60: 69 70 74 69 6f 6e 20 6f 6e 20 74 68 65 20 73 61 iption on the sa
4c70: 6d 65 20 72 6f 77 2c 20 75 73 65 20 74 68 65 0a me row, use the.
4c80: 20 20 40 20 3c 62 3e 77 69 6b 69 28 29 3c 2f 62 @ <b>wiki()</b
4c90: 3e 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 > function with
4ca0: 73 6f 6d 65 20 73 74 72 69 6e 67 20 6d 61 6e 69 some string mani
4cb0: 70 75 6c 61 74 69 6f 6e 2e 20 55 73 69 6e 67 20 pulation. Using
4cc0: 74 68 65 0a 20 20 40 20 3c 62 3e 74 6b 74 28 29 the. @ <b>tkt()
4cd0: 3c 2f 62 3e 20 66 75 6e 63 74 69 6f 6e 20 6f 6e </b> function on
4ce0: 20 74 68 65 20 74 69 63 6b 65 74 20 6e 75 6d 62 the ticket numb
4cf0: 65 72 20 77 69 6c 6c 20 61 6c 73 6f 20 67 65 6e er will also gen
4d00: 65 72 61 74 65 20 61 20 6c 69 6e 6b 65 64 0a 20 erate a linked.
4d10: 20 40 20 66 69 65 6c 64 2c 20 62 75 74 20 77 69 @ field, but wi
4d20: 74 68 6f 75 74 20 74 68 65 20 65 78 74 72 61 20 thout the extra
4d30: 3c 69 3e 65 64 69 74 3c 2f 69 3e 20 63 6f 6c 75 <i>edit</i> colu
4d40: 6d 6e 3a 0a 20 20 40 20 3c 2f 70 3e 0a 20 20 40 mn:. @ </p>. @
4d50: 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 <blockquote><pr
4d60: 65 3e 0a 20 20 40 20 20 53 45 4c 45 43 54 0a 20 e>. @ SELECT.
4d70: 20 40 20 20 20 20 74 6b 74 28 74 6e 29 20 41 53 @ tkt(tn) AS
4d80: 20 27 27 2c 0a 20 20 40 20 20 20 20 74 69 74 6c '',. @ titl
4d90: 65 20 41 53 20 27 54 69 74 6c 65 27 2c 0a 20 20 e AS 'Title',.
4da0: 40 20 20 20 20 77 69 6b 69 28 73 75 62 73 74 72 @ wiki(substr
4db0: 28 64 65 73 63 72 69 70 74 69 6f 6e 2c 30 2c 38 (description,0,8
4dc0: 30 29 29 20 41 53 20 27 44 65 73 63 72 69 70 74 0)) AS 'Descript
4dd0: 69 6f 6e 27 0a 20 20 40 20 20 46 52 4f 4d 20 74 ion'. @ FROM t
4de0: 69 63 6b 65 74 0a 20 20 40 20 3c 2f 70 72 65 3e icket. @ </pre>
4df0: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 </blockquote>.
4e00: 40 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 @.}..static void
4e10: 20 63 6f 6c 75 6d 6e 5f 68 65 61 64 65 72 28 69 column_header(i
4e20: 6e 74 20 72 6e 2c 63 6f 6e 73 74 20 63 68 61 72 nt rn,const char
4e30: 20 2a 7a 43 6f 6c 2c 20 69 6e 74 20 6e 43 6f 6c *zCol, int nCol
4e40: 2c 20 69 6e 74 20 6e 53 6f 72 74 65 64 2c 0a 20 , int nSorted,.
4e50: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a const char *z
4e60: 44 69 72 65 63 74 69 6f 6e 2c 20 63 6f 6e 73 74 Direction, const
4e70: 20 63 68 61 72 20 2a 7a 45 78 74 72 61 0a 29 7b char *zExtra.){
4e80: 0a 20 20 69 6e 74 20 73 65 74 20 3d 20 28 6e 43 . int set = (nC
4e90: 6f 6c 3d 3d 6e 53 6f 72 74 65 64 29 3b 0a 20 20 ol==nSorted);.
4ea0: 69 6e 74 20 64 65 73 63 20 3d 20 21 73 74 72 63 int desc = !strc
4eb0: 6d 70 28 7a 44 69 72 65 63 74 69 6f 6e 2c 22 44 mp(zDirection,"D
4ec0: 45 53 43 22 29 3b 0a 0a 20 20 2f 2a 0a 20 20 2a ESC");.. /*. *
4ed0: 2a 20 43 6c 69 63 6b 69 6e 67 20 73 61 6d 65 20 * Clicking same
4ee0: 63 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20 33 20 column header 3
4ef0: 74 69 6d 65 73 20 69 6e 20 61 20 72 6f 77 20 72 times in a row r
4f00: 65 73 65 74 73 20 61 6e 79 20 73 6f 72 74 69 6e esets any sortin
4f10: 67 2e 0a 20 20 2a 2a 20 4e 6f 74 65 20 74 68 61 g.. ** Note tha
4f20: 74 20 77 65 20 6c 69 6e 6b 20 74 6f 20 72 70 74 t we link to rpt
4f30: 76 69 65 77 2c 20 77 68 69 63 68 20 6d 65 61 6e view, which mean
4f40: 73 20 65 6d 62 65 64 64 65 64 20 72 65 70 6f 72 s embedded repor
4f50: 74 73 20 77 69 6c 6c 20 67 65 74 0a 20 20 2a 2a ts will get. **
4f60: 20 73 65 6e 74 20 74 6f 20 74 68 65 20 61 63 74 sent to the act
4f70: 75 61 6c 20 72 65 70 6f 72 74 20 76 69 65 77 20 ual report view
4f80: 70 61 67 65 20 61 73 20 73 6f 6f 6e 20 61 73 20 page as soon as
4f90: 61 20 75 73 65 72 20 74 72 69 65 73 20 74 6f 20 a user tries to
4fa0: 64 6f 0a 20 20 2a 2a 20 61 6e 79 20 73 6f 72 74 do. ** any sort
4fb0: 69 6e 67 2e 20 49 20 64 6f 6e 27 74 20 73 65 65 ing. I don't see
4fc0: 20 74 68 61 74 20 61 73 20 61 20 42 61 64 20 54 that as a Bad T
4fd0: 68 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 hing.. */. if(
4fe0: 73 65 74 20 26 26 20 64 65 73 63 29 7b 0a 20 20 set && desc){.
4ff0: 20 20 40 20 3c 74 68 20 62 67 63 6f 6c 6f 72 3d @ <th bgcolor=
5000: 22 25 73 28 42 47 31 29 22 20 63 6c 61 73 73 3d "%s(BG1)" class=
5010: 22 62 6b 67 6e 64 31 22 3e 0a 20 20 20 20 40 20 "bkgnd1">. @
5020: 20 20 3c 61 20 68 72 65 66 3d 22 72 70 74 76 69 <a href="rptvi
5030: 65 77 3f 72 6e 3d 25 64 28 72 6e 29 25 73 28 7a ew?rn=%d(rn)%s(z
5040: 45 78 74 72 61 29 22 3e 25 68 28 7a 43 6f 6c 29 Extra)">%h(zCol)
5050: 3c 2f 61 3e 3c 2f 74 68 3e 0a 20 20 7d 65 6c 73 </a></th>. }els
5060: 65 7b 0a 20 20 20 20 69 66 28 73 65 74 29 7b 0a e{. if(set){.
5070: 20 20 20 20 20 20 40 20 3c 74 68 20 62 67 63 6f @ <th bgco
5080: 6c 6f 72 3d 22 25 73 28 42 47 31 29 22 20 63 6c lor="%s(BG1)" cl
5090: 61 73 73 3d 22 62 6b 67 6e 64 31 22 3e 3c 61 0a ass="bkgnd1"><a.
50a0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 }else{.
50b0: 20 40 20 3c 74 68 3e 3c 61 0a 20 20 20 20 7d 0a @ <th><a. }.
50c0: 20 20 20 20 40 20 68 72 65 66 3d 22 72 70 74 76 @ href="rptv
50d0: 69 65 77 3f 72 6e 3d 25 64 28 72 6e 29 26 61 6d iew?rn=%d(rn)&am
50e0: 70 3b 6f 72 64 65 72 5f 62 79 3d 25 64 28 6e 43 p;order_by=%d(nC
50f0: 6f 6c 29 26 61 6d 70 3b 5c 0a 20 20 20 20 40 20 ol)&\. @
5100: 6f 72 64 65 72 5f 64 69 72 3d 25 73 28 64 65 73 order_dir=%s(des
5110: 63 3f 22 41 53 43 22 3a 22 44 45 53 43 22 29 5c c?"ASC":"DESC")\
5120: 0a 20 20 20 20 40 20 25 73 28 7a 45 78 74 72 61 . @ %s(zExtra
5130: 29 22 3e 25 68 28 7a 43 6f 6c 29 3c 2f 61 3e 3c )">%h(zCol)</a><
5140: 2f 74 68 3e 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a /th>. }.}../*.*
5150: 2a 20 54 68 65 20 73 74 61 74 65 20 6f 66 20 74 * The state of t
5160: 68 65 20 72 65 70 6f 72 74 20 67 65 6e 65 72 61 he report genera
5170: 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 tion..*/.struct
5180: 47 65 6e 65 72 61 74 65 48 54 4d 4c 20 7b 0a 20 GenerateHTML {.
5190: 20 69 6e 74 20 72 6e 3b 20 20 20 20 20 20 20 20 int rn;
51a0: 2f 2a 20 52 65 70 6f 72 74 20 6e 75 6d 62 65 72 /* Report number
51b0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 75 6e 74 */. int nCount
51c0: 3b 20 20 20 20 2f 2a 20 52 6f 77 20 6e 75 6d 62 ; /* Row numb
51d0: 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 er */.};../*.**
51e0: 54 68 65 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e The callback fun
51f0: 63 74 69 6f 6e 20 66 6f 72 20 64 62 5f 71 75 65 ction for db_que
5200: 72 79 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 ry.*/.static int
5210: 20 67 65 6e 65 72 61 74 65 5f 68 74 6d 6c 28 0a generate_html(.
5220: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 2c 20 20 void *pUser,
5230: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f /* Pointer to
5240: 20 6f 75 74 70 75 74 20 73 74 61 74 65 20 2a 2f output state */
5250: 0a 20 20 69 6e 74 20 6e 41 72 67 2c 20 20 20 20 . int nArg,
5260: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 /* Number of
5270: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 columns in this
5280: 20 72 65 73 75 6c 74 20 72 6f 77 20 2a 2f 0a 20 result row */.
5290: 20 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c 20 20 char **azArg,
52a0: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 64 61 74 /* Text of dat
52b0: 61 20 69 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 a in all columns
52c0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4e */. char **azN
52d0: 61 6d 65 20 20 20 20 2f 2a 20 4e 61 6d 65 73 20 ame /* Names
52e0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 2a of the columns *
52f0: 2f 0a 29 7b 0a 20 20 73 74 72 75 63 74 20 47 65 /.){. struct Ge
5300: 6e 65 72 61 74 65 48 54 4d 4c 20 2a 70 53 74 61 nerateHTML *pSta
5310: 74 65 20 3d 20 28 73 74 72 75 63 74 20 47 65 6e te = (struct Gen
5320: 65 72 61 74 65 48 54 4d 4c 2a 29 70 55 73 65 72 erateHTML*)pUser
5330: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 ;. int i;. int
5340: 20 74 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 tn;
5350: 2f 2a 20 54 69 63 6b 65 74 20 6e 75 6d 62 65 72 /* Ticket number
5360: 2e 20 20 28 76 61 6c 75 65 20 6f 66 20 63 6f 6c . (value of col
5370: 75 6d 6e 20 6e 61 6d 65 64 20 27 23 27 29 20 2a umn named '#') *
5380: 2f 0a 20 20 69 6e 74 20 72 6e 3b 20 20 20 20 20 /. int rn;
5390: 20 20 20 20 20 20 20 2f 2a 20 52 65 70 6f 72 74 /* Report
53a0: 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 69 6e 74 number */. int
53b0: 20 6e 63 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 ncol;
53c0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c /* Number of col
53d0: 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c umns in the tabl
53e0: 65 20 2a 2f 0a 20 20 69 6e 74 20 6d 75 6c 74 69 e */. int multi
53f0: 72 6f 77 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 row; /* Tru
5400: 65 20 69 66 20 6d 75 6c 74 69 70 6c 65 20 74 61 e if multiple ta
5410: 62 6c 65 20 72 6f 77 73 20 70 65 72 20 6c 69 6e ble rows per lin
5420: 65 20 6f 66 20 64 61 74 61 20 2a 2f 0a 20 20 69 e of data */. i
5430: 6e 74 20 6e 65 77 72 6f 77 69 64 78 3b 20 20 20 nt newrowidx;
5440: 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 66 69 /* Index of fi
5450: 72 73 74 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 rst column that
5460: 67 6f 65 73 20 6f 6e 20 61 20 73 65 70 61 72 61 goes on a separa
5470: 74 65 20 72 6f 77 20 2a 2f 0a 20 20 69 6e 74 20 te row */. int
5480: 69 42 67 20 3d 20 2d 31 3b 20 20 20 20 20 20 2f iBg = -1; /
5490: 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d * Index of colum
54a0: 6e 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 65 n that determine
54b0: 73 20 62 61 63 6b 67 72 6f 75 6e 64 20 63 6f 6c s background col
54c0: 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 or */. char *zB
54d0: 67 20 3d 20 30 3b 20 20 20 20 20 2f 2a 20 55 73 g = 0; /* Us
54e0: 65 20 74 68 69 73 20 62 61 63 6b 67 72 6f 75 6e e this backgroun
54f0: 64 20 63 6f 6c 6f 72 20 2a 2f 0a 20 20 63 68 61 d color */. cha
5500: 72 20 7a 50 61 67 65 5b 33 30 5d 3b 20 20 20 20 r zPage[30];
5510: 2f 2a 20 54 65 78 74 20 76 65 72 73 69 6f 6e 20 /* Text version
5520: 6f 66 20 74 68 65 20 74 69 63 6b 65 74 20 6e 75 of the ticket nu
5530: 6d 62 65 72 20 2a 2f 0a 0a 20 20 2f 2a 20 47 65 mber */.. /* Ge
5540: 74 20 74 68 65 20 72 65 70 6f 72 74 20 6e 75 6d t the report num
5550: 62 65 72 0a 20 20 2a 2f 0a 20 20 72 6e 20 3d 20 ber. */. rn =
5560: 70 53 74 61 74 65 2d 3e 72 6e 3b 0a 0a 20 20 2f pState->rn;.. /
5570: 2a 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 * Figure out the
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d number of colum
5590: 6e 73 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 ns, the column t
55a0: 68 61 74 20 64 65 74 65 72 6d 69 6e 65 73 20 62 hat determines b
55b0: 61 63 6b 67 72 6f 75 6e 64 0a 20 20 2a 2a 20 63 ackground. ** c
55c0: 6f 6c 6f 72 2c 20 61 6e 64 20 77 68 65 74 68 65 olor, and whethe
55d0: 72 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 72 6f r or not this ro
55e0: 77 20 6f 66 20 64 61 74 61 20 69 73 20 72 65 70 w of data is rep
55f0: 72 65 73 65 6e 74 65 64 20 62 79 20 6d 75 6c 74 resented by mult
5600: 69 70 6c 65 0a 20 20 2a 2a 20 72 6f 77 73 20 69 iple. ** rows i
5610: 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 20 20 2a n the table.. *
5620: 2f 0a 20 20 6e 63 6f 6c 20 3d 20 30 3b 0a 20 20 /. ncol = 0;.
5630: 6d 75 6c 74 69 72 6f 77 20 3d 20 30 3b 0a 20 20 multirow = 0;.
5640: 6e 65 77 72 6f 77 69 64 78 20 3d 20 2d 31 3b 0a newrowidx = -1;.
5650: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 for(i=0; i<nAr
5660: 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 g; i++){. if(
5670: 20 61 7a 4e 61 6d 65 5b 69 5d 5b 30 5d 3d 3d 27 azName[i][0]=='
5680: 62 27 20 26 26 20 73 74 72 63 6d 70 28 61 7a 4e b' && strcmp(azN
5690: 61 6d 65 5b 69 5d 2c 22 62 67 63 6f 6c 6f 72 22 ame[i],"bgcolor"
56a0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 7a 42 )==0 ){. zB
56b0: 67 20 3d 20 61 7a 41 72 67 20 3f 20 61 7a 41 72 g = azArg ? azAr
56c0: 67 5b 69 5d 20 3a 20 30 3b 0a 20 20 20 20 20 20 g[i] : 0;.
56d0: 69 42 67 20 3d 20 69 3b 0a 20 20 20 20 20 20 63 iBg = i;. c
56e0: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 7d 0a 20 ontinue;. }.
56f0: 20 20 20 69 66 28 20 67 2e 6f 6b 57 72 69 74 65 if( g.okWrite
5700: 20 26 26 20 61 7a 4e 61 6d 65 5b 69 5d 5b 30 5d && azName[i][0]
5710: 3d 3d 27 23 27 20 29 7b 0a 20 20 20 20 20 20 6e =='#' ){. n
5720: 63 6f 6c 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 col++;. }.
5730: 20 69 66 28 20 21 6d 75 6c 74 69 72 6f 77 20 29 if( !multirow )
5740: 7b 0a 20 20 20 20 20 20 69 66 28 20 61 7a 4e 61 {. if( azNa
5750: 6d 65 5b 69 5d 5b 30 5d 3d 3d 27 5f 27 20 29 7b me[i][0]=='_' ){
5760: 0a 20 20 20 20 20 20 20 20 6d 75 6c 74 69 72 6f . multiro
5770: 77 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 6e w = 1;. n
5780: 65 77 72 6f 77 69 64 78 20 3d 20 69 3b 0a 20 20 ewrowidx = i;.
5790: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 }else{.
57a0: 20 20 20 6e 63 6f 6c 2b 2b 3b 0a 20 20 20 20 20 ncol++;.
57b0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 }. }. }..
57c0: 2f 2a 20 54 68 65 20 66 69 72 73 74 20 74 69 6d /* The first tim
57d0: 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 e this routine i
57e0: 73 20 63 61 6c 6c 65 64 2c 20 6f 75 74 70 75 74 s called, output
57f0: 20 61 20 74 61 62 6c 65 20 68 65 61 64 65 72 0a a table header.
5800: 20 20 2a 2f 0a 20 20 69 66 28 20 70 53 74 61 74 */. if( pStat
5810: 65 2d 3e 6e 43 6f 75 6e 74 3d 3d 30 20 29 7b 0a e->nCount==0 ){.
5820: 20 20 20 20 40 20 3c 74 72 3e 0a 20 20 20 20 74 @ <tr>. t
5830: 6e 20 3d 20 2d 31 3b 0a 20 20 20 20 66 6f 72 28 n = -1;. for(
5840: 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b i=0; i<nArg; i++
5850: 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a ){. char *z
5860: 4e 61 6d 65 20 3d 20 61 7a 4e 61 6d 65 5b 69 5d Name = azName[i]
5870: 3b 0a 20 20 20 20 20 20 69 66 28 20 69 3d 3d 69 ;. if( i==i
5880: 42 67 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 Bg ) continue;.
5890: 20 20 20 20 20 69 66 28 20 6e 65 77 72 6f 77 69 if( newrowi
58a0: 64 78 3e 3d 30 20 26 26 20 69 3e 3d 6e 65 77 72 dx>=0 && i>=newr
58b0: 6f 77 69 64 78 20 29 7b 0a 20 20 20 20 20 20 20 owidx ){.
58c0: 20 69 66 28 20 67 2e 6f 6b 57 72 69 74 65 20 26 if( g.okWrite &
58d0: 26 20 74 6e 3e 3d 30 20 29 7b 0a 20 20 20 20 20 & tn>=0 ){.
58e0: 20 20 20 20 20 40 20 3c 74 68 3e 26 6e 62 73 70 @ <th> 
58f0: 3b 3c 2f 74 68 3e 0a 20 20 20 20 20 20 20 20 20 ;</th>.
5900: 20 74 6e 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 tn = -1;.
5910: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 }. if(
5920: 7a 4e 61 6d 65 5b 30 5d 3d 3d 27 5f 27 20 29 20 zName[0]=='_' )
5930: 7a 4e 61 6d 65 2b 2b 3b 0a 20 20 20 20 20 20 20 zName++;.
5940: 20 40 20 3c 2f 74 72 3e 3c 74 72 3e 3c 74 68 20 @ </tr><tr><th
5950: 63 6f 6c 73 70 61 6e 3d 25 64 28 6e 63 6f 6c 29 colspan=%d(ncol)
5960: 3e 25 68 28 7a 4e 61 6d 65 29 3c 2f 74 68 3e 0a >%h(zName)</th>.
5970: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 }else{.
5980: 20 20 20 20 20 69 66 28 20 7a 4e 61 6d 65 5b 30 if( zName[0
5990: 5d 3d 3d 27 23 27 20 29 7b 0a 20 20 20 20 20 20 ]=='#' ){.
59a0: 20 20 20 20 74 6e 20 3d 20 69 3b 0a 20 20 20 20 tn = i;.
59b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 }. }.
59c0: 20 20 7d 0a 20 20 20 20 69 66 28 20 67 2e 6f 6b }. if( g.ok
59d0: 57 72 69 74 65 20 26 26 20 74 6e 3e 3d 30 20 29 Write && tn>=0 )
59e0: 7b 0a 20 20 20 20 20 20 40 20 3c 74 68 3e 26 6e {. @ <th>&n
59f0: 62 73 70 3b 3c 2f 74 68 3e 0a 20 20 20 20 7d 0a bsp;</th>. }.
5a00: 20 20 20 20 40 20 3c 2f 74 72 3e 0a 20 20 7d 0a @ </tr>. }.
5a10: 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 if( azArg==0 )
5a20: 7b 0a 20 20 20 20 40 20 3c 74 72 3e 3c 74 64 20 {. @ <tr><td
5a30: 63 6f 6c 73 70 61 6e 3d 22 25 64 28 6e 63 6f 6c colspan="%d(ncol
5a40: 29 22 3e 0a 20 20 20 20 40 20 3c 69 3e 4e 6f 20 )">. @ <i>No
5a50: 72 65 63 6f 72 64 73 20 6d 61 74 63 68 20 74 68 records match th
5a60: 65 20 72 65 70 6f 72 74 20 63 72 69 74 65 72 69 e report criteri
5a70: 61 3c 2f 69 3e 0a 20 20 20 20 40 20 3c 2f 74 64 a</i>. @ </td
5a80: 3e 3c 2f 74 72 3e 0a 20 20 20 20 72 65 74 75 72 ></tr>. retur
5a90: 6e 20 30 3b 0a 20 20 7d 0a 20 20 2b 2b 70 53 74 n 0;. }. ++pSt
5aa0: 61 74 65 2d 3e 6e 43 6f 75 6e 74 3b 0a 0a 20 20 ate->nCount;..
5ab0: 2f 2a 20 4f 75 74 70 75 74 20 74 68 65 20 73 65 /* Output the se
5ac0: 70 61 72 61 74 6f 72 20 61 62 6f 76 65 20 65 61 parator above ea
5ad0: 63 68 20 65 6e 74 72 79 20 69 6e 20 61 20 74 61 ch entry in a ta
5ae0: 62 6c 65 20 77 68 69 63 68 20 68 61 73 20 6d 75 ble which has mu
5af0: 6c 74 69 70 6c 65 20 6c 69 6e 65 73 0a 20 20 2a ltiple lines. *
5b00: 2a 20 70 65 72 20 64 61 74 61 62 61 73 65 20 65 * per database e
5b10: 6e 74 72 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 ntry.. */. if(
5b20: 20 6e 65 77 72 6f 77 69 64 78 3e 3d 30 20 29 7b newrowidx>=0 ){
5b30: 0a 20 20 20 20 40 20 3c 74 72 3e 3c 74 64 20 63 . @ <tr><td c
5b40: 6f 6c 73 70 61 6e 3d 25 64 28 6e 63 6f 6c 29 3e olspan=%d(ncol)>
5b50: 3c 66 6f 6e 74 20 73 69 7a 65 3d 31 3e 26 6e 62 <font size=1>&nb
5b60: 73 70 3b 3c 2f 66 6f 6e 74 3e 3c 2f 74 64 3e 3c sp;</font></td><
5b70: 2f 74 72 3e 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4f /tr>. }.. /* O
5b80: 75 74 70 75 74 20 74 68 65 20 64 61 74 61 20 66 utput the data f
5b90: 6f 72 20 74 68 69 73 20 65 6e 74 72 79 20 66 72 or this entry fr
5ba0: 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 0a om the database.
5bb0: 20 20 2a 2f 0a 20 20 69 66 28 20 7a 42 67 3d 3d */. if( zBg==
5bc0: 30 20 29 20 7a 42 67 20 3d 20 22 77 68 69 74 65 0 ) zBg = "white
5bd0: 22 3b 0a 20 20 40 20 3c 74 72 20 62 67 63 6f 6c ";. @ <tr bgcol
5be0: 6f 72 3d 22 25 68 28 7a 42 67 29 22 3e 0a 20 20 or="%h(zBg)">.
5bf0: 74 6e 20 3d 20 30 3b 0a 20 20 7a 50 61 67 65 5b tn = 0;. zPage[
5c00: 30 5d 20 3d 20 30 3b 0a 20 20 66 6f 72 28 69 3d 0] = 0;. for(i=
5c10: 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0; i<nArg; i++){
5c20: 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61 . char *zData
5c30: 3b 0a 20 20 20 20 69 66 28 20 69 3d 3d 69 42 67 ;. if( i==iBg
5c40: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 ) continue;.
5c50: 20 7a 44 61 74 61 20 3d 20 61 7a 41 72 67 5b 69 zData = azArg[i
5c60: 5d 3b 0a 20 20 20 20 69 66 28 20 7a 44 61 74 61 ];. if( zData
5c70: 3d 3d 30 20 29 20 7a 44 61 74 61 20 3d 20 22 22 ==0 ) zData = ""
5c80: 3b 0a 20 20 20 20 69 66 28 20 6e 65 77 72 6f 77 ;. if( newrow
5c90: 69 64 78 3e 3d 30 20 26 26 20 69 3e 3d 6e 65 77 idx>=0 && i>=new
5ca0: 72 6f 77 69 64 78 20 29 7b 0a 20 20 20 20 20 20 rowidx ){.
5cb0: 69 66 28 20 74 6e 3e 30 20 26 26 20 67 2e 6f 6b if( tn>0 && g.ok
5cc0: 57 72 69 74 65 20 29 7b 0a 20 20 20 20 20 20 20 Write ){.
5cd0: 20 40 20 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 @ <td valign="t
5ce0: 6f 70 22 3e 3c 61 20 68 72 65 66 3d 22 74 6b 74 op"><a href="tkt
5cf0: 65 64 69 74 3f 74 6e 3d 25 64 28 74 6e 29 2c 25 edit?tn=%d(tn),%
5d00: 64 28 72 6e 29 22 3e 65 64 69 74 3c 2f 61 3e 3c d(rn)">edit</a><
5d10: 2f 74 64 3e 0a 20 20 20 20 20 20 20 20 74 6e 20 /td>. tn
5d20: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 = 0;. }.
5d30: 20 20 20 69 66 28 20 7a 44 61 74 61 5b 30 5d 20 if( zData[0]
5d40: 29 7b 0a 20 20 20 20 20 20 20 20 40 20 3c 2f 74 ){. @ </t
5d50: 72 3e 3c 74 72 20 62 67 63 6f 6c 6f 72 3d 22 25 r><tr bgcolor="%
5d60: 68 28 7a 42 67 29 22 3e 3c 74 64 20 63 6f 6c 73 h(zBg)"><td cols
5d70: 70 61 6e 3d 25 64 28 6e 63 6f 6c 29 3e 0a 20 20 pan=%d(ncol)>.
5d80: 20 20 20 20 20 20 40 20 25 68 28 7a 44 61 74 61 @ %h(zData
5d90: 29 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 ). }. }e
5da0: 6c 73 65 20 69 66 28 20 61 7a 4e 61 6d 65 5b 69 lse if( azName[i
5db0: 5d 5b 30 5d 3d 3d 27 23 27 20 29 7b 0a 20 20 20 ][0]=='#' ){.
5dc0: 20 20 20 74 6e 20 3d 20 61 74 6f 69 28 7a 44 61 tn = atoi(zDa
5dd0: 74 61 29 3b 0a 20 20 20 20 20 20 40 20 3c 74 64 ta);. @ <td
5de0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 61 valign="top"><a
5df0: 20 68 72 65 66 3d 22 74 6b 74 76 69 65 77 3f 74 href="tktview?t
5e00: 6e 3d 25 64 28 74 6e 29 2c 25 64 28 72 6e 29 22 n=%d(tn),%d(rn)"
5e10: 3e 25 68 28 7a 44 61 74 61 29 3c 2f 61 3e 3c 2f >%h(zData)</a></
5e20: 74 64 3e 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 td>. }else if
5e30: 28 20 7a 44 61 74 61 5b 30 5d 3d 3d 30 20 29 7b ( zData[0]==0 ){
5e40: 0a 20 20 20 20 20 20 40 20 3c 74 64 20 76 61 6c . @ <td val
5e50: 69 67 6e 3d 22 74 6f 70 22 3e 26 6e 62 73 70 3b ign="top">
5e60: 3c 2f 74 64 3e 0a 20 20 20 20 7d 65 6c 73 65 7b </td>. }else{
5e70: 0a 20 20 20 20 20 20 40 20 3c 74 64 20 76 61 6c . @ <td val
5e80: 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 20 20 20 20 ign="top">.
5e90: 20 40 20 25 68 28 7a 44 61 74 61 29 0a 20 20 20 @ %h(zData).
5ea0: 20 20 20 40 20 3c 2f 74 64 3e 0a 20 20 20 20 7d @ </td>. }
5eb0: 0a 20 20 7d 0a 20 20 69 66 28 20 74 6e 3e 30 20 . }. if( tn>0
5ec0: 26 26 20 67 2e 6f 6b 57 72 69 74 65 20 29 7b 0a && g.okWrite ){.
5ed0: 20 20 20 20 40 20 3c 74 64 20 76 61 6c 69 67 6e @ <td valign
5ee0: 3d 22 74 6f 70 22 3e 3c 61 20 68 72 65 66 3d 22 ="top"><a href="
5ef0: 74 6b 74 65 64 69 74 3f 74 6e 3d 25 64 28 74 6e tktedit?tn=%d(tn
5f00: 29 2c 25 64 28 72 6e 29 22 3e 65 64 69 74 3c 2f ),%d(rn)">edit</
5f10: 61 3e 3c 2f 74 64 3e 0a 20 20 7d 0a 20 20 40 20 a></td>. }. @
5f20: 3c 2f 74 72 3e 0a 20 20 72 65 74 75 72 6e 20 30 </tr>. return 0
5f30: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 ;.}../*.** Outpu
5f40: 74 20 74 68 65 20 74 65 78 74 20 67 69 76 65 6e t the text given
5f50: 20 69 6e 20 74 68 65 20 61 72 67 75 6d 65 6e 74 in the argument
5f60: 2e 20 20 43 6f 6e 76 65 72 74 20 74 61 62 73 20 . Convert tabs
5f70: 61 6e 64 20 6e 65 77 6c 69 6e 65 73 20 69 6e 74 and newlines int
5f80: 6f 0a 2a 2a 20 73 70 61 63 65 73 2e 0a 2a 2f 0a o.** spaces..*/.
5f90: 73 74 61 74 69 63 20 76 6f 69 64 20 6f 75 74 70 static void outp
5fa0: 75 74 5f 6e 6f 5f 74 61 62 73 28 63 6f 6e 73 74 ut_no_tabs(const
5fb0: 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 77 68 69 char *z){. whi
5fc0: 6c 65 28 20 7a 20 26 26 20 7a 5b 30 5d 20 29 7b le( z && z[0] ){
5fd0: 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20 . int i, j;.
5fe0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 7a 5b 69 5d for(i=0; z[i]
5ff0: 20 26 26 20 28 21 69 73 73 70 61 63 65 28 7a 5b && (!isspace(z[
6000: 69 5d 29 20 7c 7c 20 7a 5b 69 5d 3d 3d 27 20 27 i]) || z[i]==' '
6010: 29 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 69 66 ); i++){}. if
6020: 28 20 69 3e 30 20 29 7b 0a 20 20 20 20 20 20 63 ( i>0 ){. c
6030: 67 69 5f 70 72 69 6e 74 66 28 22 25 2e 2a 73 22 gi_printf("%.*s"
6040: 2c 20 69 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 , i, z);. }.
6050: 20 20 20 66 6f 72 28 6a 3d 69 3b 20 69 73 73 70 for(j=i; issp
6060: 61 63 65 28 7a 5b 6a 5d 29 3b 20 6a 2b 2b 29 7b ace(z[j]); j++){
6070: 7d 0a 20 20 20 20 69 66 28 20 6a 3e 69 20 29 7b }. if( j>i ){
6080: 0a 20 20 20 20 20 20 63 67 69 5f 70 72 69 6e 74 . cgi_print
6090: 66 28 22 25 2a 73 22 2c 20 6a 2d 69 2c 20 22 22 f("%*s", j-i, ""
60a0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 20 2b );. }. z +
60b0: 3d 20 6a 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a = j;. }.}../*.*
60c0: 2a 20 4f 75 74 70 75 74 20 61 20 72 6f 77 20 61 * Output a row a
60d0: 73 20 61 20 74 61 62 2d 73 65 70 61 72 61 74 65 s a tab-separate
60e0: 64 20 6c 69 6e 65 20 6f 66 20 74 65 78 74 2e 0a d line of text..
60f0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 6f 75 */.static int ou
6100: 74 70 75 74 5f 74 61 62 5f 73 65 70 61 72 61 74 tput_tab_separat
6110: 65 64 28 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 ed(. void *pUse
6120: 72 2c 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 r, /* Pointe
6130: 72 20 74 6f 20 72 6f 77 2d 63 6f 75 6e 74 20 69 r to row-count i
6140: 6e 74 65 67 65 72 20 2a 2f 0a 20 20 69 6e 74 20 nteger */. int
6150: 6e 41 72 67 2c 20 20 20 20 20 20 20 20 2f 2a 20 nArg, /*
6160: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e Number of column
6170: 73 20 69 6e 20 74 68 69 73 20 72 65 73 75 6c 74 s in this result
6180: 20 72 6f 77 20 2a 2f 0a 20 20 63 68 61 72 20 2a row */. char *
6190: 2a 61 7a 41 72 67 2c 20 20 20 20 2f 2a 20 54 65 *azArg, /* Te
61a0: 78 74 20 6f 66 20 64 61 74 61 20 69 6e 20 61 6c xt of data in al
61b0: 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 63 l columns */. c
61c0: 68 61 72 20 2a 2a 61 7a 4e 61 6d 65 20 20 20 20 har **azName
61d0: 2f 2a 20 4e 61 6d 65 73 20 6f 66 20 74 68 65 20 /* Names of the
61e0: 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 29 7b 0a 20 20 columns */.){.
61f0: 69 6e 74 20 2a 70 43 6f 75 6e 74 20 3d 20 28 69 int *pCount = (i
6200: 6e 74 2a 29 70 55 73 65 72 3b 0a 20 20 69 6e 74 nt*)pUser;. int
6210: 20 69 3b 0a 0a 20 20 69 66 28 20 2a 70 43 6f 75 i;.. if( *pCou
6220: 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 66 6f 72 nt==0 ){. for
6230: 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b (i=0; i<nArg; i+
6240: 2b 29 7b 0a 20 20 20 20 20 20 6f 75 74 70 75 74 +){. output
6250: 5f 6e 6f 5f 74 61 62 73 28 61 7a 4e 61 6d 65 5b _no_tabs(azName[
6260: 69 5d 29 3b 0a 20 20 20 20 20 20 63 67 69 5f 70 i]);. cgi_p
6270: 72 69 6e 74 66 28 22 25 63 22 2c 20 69 3c 6e 41 rintf("%c", i<nA
6280: 72 67 2d 31 20 3f 20 27 5c 74 27 20 3a 20 27 5c rg-1 ? '\t' : '\
6290: 6e 27 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 n');. }. }.
62a0: 20 2b 2b 2a 70 43 6f 75 6e 74 3b 0a 20 20 66 6f ++*pCount;. fo
62b0: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 r(i=0; i<nArg; i
62c0: 2b 2b 29 7b 0a 20 20 20 20 6f 75 74 70 75 74 5f ++){. output_
62d0: 6e 6f 5f 74 61 62 73 28 61 7a 41 72 67 5b 69 5d no_tabs(azArg[i]
62e0: 29 3b 0a 20 20 20 20 63 67 69 5f 70 72 69 6e 74 );. cgi_print
62f0: 66 28 22 25 63 22 2c 20 69 3c 6e 41 72 67 2d 31 f("%c", i<nArg-1
6300: 20 3f 20 27 5c 74 27 20 3a 20 27 5c 6e 27 29 3b ? '\t' : '\n');
6310: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b . }. return 0;
6320: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 .}../*.** Genera
6330: 74 65 20 48 54 4d 4c 20 74 68 61 74 20 64 65 73 te HTML that des
6340: 63 72 69 62 65 73 20 61 20 63 6f 6c 6f 72 20 6b cribes a color k
6350: 65 79 2e 0a 2a 2f 0a 76 6f 69 64 20 6f 75 74 70 ey..*/.void outp
6360: 75 74 5f 63 6f 6c 6f 72 5f 6b 65 79 28 63 6f 6e ut_color_key(con
6370: 73 74 20 63 68 61 72 20 2a 7a 43 6c 72 4b 65 79 st char *zClrKey
6380: 2c 20 69 6e 74 20 68 6f 72 69 7a 2c 20 63 68 61 , int horiz, cha
6390: 72 20 2a 7a 54 61 62 41 72 67 73 29 7b 0a 20 20 r *zTabArgs){.
63a0: 69 6e 74 20 69 2c 20 6a 2c 20 6b 3b 0a 20 20 63 int i, j, k;. c
63b0: 68 61 72 20 2a 7a 53 61 66 65 4b 65 79 2c 20 2a har *zSafeKey, *
63c0: 7a 54 6f 46 72 65 65 3b 0a 20 20 77 68 69 6c 65 zToFree;. while
63d0: 28 20 69 73 73 70 61 63 65 28 2a 7a 43 6c 72 4b ( isspace(*zClrK
63e0: 65 79 29 20 29 20 7a 43 6c 72 4b 65 79 2b 2b 3b ey) ) zClrKey++;
63f0: 0a 20 20 69 66 28 20 7a 43 6c 72 4b 65 79 5b 30 . if( zClrKey[0
6400: 5d 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 ]==0 ) return;.
6410: 20 40 20 3c 74 61 62 6c 65 20 25 73 28 7a 54 61 @ <table %s(zTa
6420: 62 41 72 67 73 29 3e 0a 20 20 69 66 28 20 68 6f bArgs)>. if( ho
6430: 72 69 7a 20 29 7b 0a 20 20 20 20 40 20 3c 74 72 riz ){. @ <tr
6440: 3e 0a 20 20 7d 0a 20 20 7a 54 6f 46 72 65 65 20 >. }. zToFree
6450: 3d 20 7a 53 61 66 65 4b 65 79 20 3d 20 6d 70 72 = zSafeKey = mpr
6460: 69 6e 74 66 28 22 25 68 22 2c 20 7a 43 6c 72 4b intf("%h", zClrK
6470: 65 79 29 3b 0a 20 20 77 68 69 6c 65 28 20 7a 53 ey);. while( zS
6480: 61 66 65 4b 65 79 5b 30 5d 20 29 7b 0a 20 20 20 afeKey[0] ){.
6490: 20 77 68 69 6c 65 28 20 69 73 73 70 61 63 65 28 while( isspace(
64a0: 2a 7a 53 61 66 65 4b 65 79 29 20 29 20 7a 53 61 *zSafeKey) ) zSa
64b0: 66 65 4b 65 79 2b 2b 3b 0a 20 20 20 20 66 6f 72 feKey++;. for
64c0: 28 69 3d 30 3b 20 7a 53 61 66 65 4b 65 79 5b 69 (i=0; zSafeKey[i
64d0: 5d 20 26 26 20 21 69 73 73 70 61 63 65 28 7a 53 ] && !isspace(zS
64e0: 61 66 65 4b 65 79 5b 69 5d 29 3b 20 69 2b 2b 29 afeKey[i]); i++)
64f0: 7b 7d 0a 20 20 20 20 66 6f 72 28 6a 3d 69 3b 20 {}. for(j=i;
6500: 69 73 73 70 61 63 65 28 7a 53 61 66 65 4b 65 79 isspace(zSafeKey
6510: 5b 6a 5d 29 3b 20 6a 2b 2b 29 7b 7d 0a 20 20 20 [j]); j++){}.
6520: 20 66 6f 72 28 6b 3d 6a 3b 20 7a 53 61 66 65 4b for(k=j; zSafeK
6530: 65 79 5b 6b 5d 20 26 26 20 7a 53 61 66 65 4b 65 ey[k] && zSafeKe
6540: 79 5b 6b 5d 21 3d 27 5c 6e 27 20 26 26 20 7a 53 y[k]!='\n' && zS
6550: 61 66 65 4b 65 79 5b 6b 5d 21 3d 27 5c 72 27 3b afeKey[k]!='\r';
6560: 20 6b 2b 2b 29 7b 7d 0a 20 20 20 20 69 66 28 20 k++){}. if(
6570: 21 68 6f 72 69 7a 20 29 7b 0a 20 20 20 20 20 20 !horiz ){.
6580: 63 67 69 5f 70 72 69 6e 74 66 28 22 3c 74 72 20 cgi_printf("<tr
6590: 62 67 63 6f 6c 6f 72 3d 5c 22 25 2e 2a 73 5c 22 bgcolor=\"%.*s\"
65a0: 3e 3c 74 64 3e 25 2e 2a 73 3c 2f 74 64 3e 3c 2f ><td>%.*s</td></
65b0: 74 72 3e 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 tr>\n",.
65c0: 69 2c 20 7a 53 61 66 65 4b 65 79 2c 20 6b 2d 6a i, zSafeKey, k-j
65d0: 2c 20 26 7a 53 61 66 65 4b 65 79 5b 6a 5d 29 3b , &zSafeKey[j]);
65e0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 . }else{.
65f0: 20 20 63 67 69 5f 70 72 69 6e 74 66 28 22 3c 74 cgi_printf("<t
6600: 64 20 62 67 63 6f 6c 6f 72 3d 5c 22 25 2e 2a 73 d bgcolor=\"%.*s
6610: 5c 22 3e 25 2e 2a 73 3c 2f 74 64 3e 5c 6e 22 2c \">%.*s</td>\n",
6620: 0a 20 20 20 20 20 20 20 20 69 2c 20 7a 53 61 66 . i, zSaf
6630: 65 4b 65 79 2c 20 6b 2d 6a 2c 20 26 7a 53 61 66 eKey, k-j, &zSaf
6640: 65 4b 65 79 5b 6a 5d 29 3b 0a 20 20 20 20 7d 0a eKey[j]);. }.
6650: 20 20 20 20 7a 53 61 66 65 4b 65 79 20 2b 3d 20 zSafeKey +=
6660: 6b 3b 0a 20 20 7d 0a 20 20 66 72 65 65 28 7a 54 k;. }. free(zT
6670: 6f 46 72 65 65 29 3b 0a 20 20 69 66 28 20 68 6f oFree);. if( ho
6680: 72 69 7a 20 29 7b 0a 20 20 20 20 40 20 3c 2f 74 riz ){. @ </t
6690: 72 3e 0a 20 20 7d 0a 20 20 40 20 3c 2f 74 61 62 r>. }. @ </tab
66a0: 6c 65 3e 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 57 45 le>.}.../*.** WE
66b0: 42 50 41 47 45 3a 20 2f 72 70 74 76 69 65 77 0a BPAGE: /rptview.
66c0: 2a 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 61 **.** Generate a
66d0: 20 72 65 70 6f 72 74 2e 20 20 54 68 65 20 72 6e report. The rn
66e0: 20 71 75 65 72 79 20 70 61 72 61 6d 65 74 65 72 query parameter
66f0: 20 69 73 20 74 68 65 20 72 65 70 6f 72 74 20 6e is the report n
6700: 75 6d 62 65 72 0a 2a 2a 20 63 6f 72 72 65 73 70 umber.** corresp
6710: 6f 6e 64 69 6e 67 20 74 6f 20 52 45 50 4f 52 54 onding to REPORT
6720: 46 4d 54 2e 52 4e 2e 20 20 49 66 20 74 68 65 20 FMT.RN. If the
6730: 74 61 62 6c 69 73 74 20 71 75 65 72 79 20 70 61 tablist query pa
6740: 72 61 6d 65 74 65 72 20 65 78 69 73 74 73 2c 0a rameter exists,.
6750: 2a 2a 20 74 68 65 6e 20 74 68 65 20 6f 75 74 70 ** then the outp
6760: 75 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 6c ut consists of l
6770: 69 6e 65 73 20 6f 66 20 74 61 62 2d 73 65 70 61 ines of tab-sepa
6780: 72 61 74 65 64 20 66 69 65 6c 64 73 20 69 6e 73 rated fields ins
6790: 74 65 61 64 20 6f 66 0a 2a 2a 20 61 6e 20 48 54 tead of.** an HT
67a0: 4d 4c 20 74 61 62 6c 65 2e 0a 2a 2f 0a 76 6f 69 ML table..*/.voi
67b0: 64 20 72 70 74 76 69 65 77 5f 70 61 67 65 28 76 d rptview_page(v
67c0: 6f 69 64 29 7b 0a 20 20 69 6e 74 20 63 6f 75 6e oid){. int coun
67d0: 74 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72 6e 3b t = 0;. int rn;
67e0: 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 . char *zSql;.
67f0: 20 63 68 61 72 20 2a 7a 54 69 74 6c 65 3b 0a 20 char *zTitle;.
6800: 20 63 68 61 72 20 2a 7a 4f 77 6e 65 72 3b 0a 20 char *zOwner;.
6810: 20 63 68 61 72 20 2a 7a 43 6c 72 4b 65 79 3b 0a char *zClrKey;.
6820: 20 20 69 6e 74 20 74 61 62 73 3b 0a 20 20 53 74 int tabs;. St
6830: 6d 74 20 71 3b 0a 0a 20 20 6c 6f 67 69 6e 5f 63 mt q;.. login_c
6840: 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 heck_credentials
6850: 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b 52 ();. if( !g.okR
6860: 65 61 64 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 ead ){ login_nee
6870: 64 65 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d ded(); return; }
6880: 0a 20 20 72 6e 20 3d 20 61 74 6f 69 28 50 44 28 . rn = atoi(PD(
6890: 22 72 6e 22 2c 22 30 22 29 29 3b 0a 20 20 69 66 "rn","0"));. if
68a0: 28 20 72 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 63 ( rn==0 ){. c
68b0: 67 69 5f 72 65 64 69 72 65 63 74 28 22 72 65 70 gi_redirect("rep
68c0: 6f 72 74 6c 69 73 74 22 29 3b 0a 20 20 20 20 72 ortlist");. r
68d0: 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 74 61 62 eturn;. }. tab
68e0: 73 20 3d 20 50 28 22 74 61 62 6c 69 73 74 22 29 s = P("tablist")
68f0: 21 3d 30 3b 0a 20 20 2f 2a 20 76 69 65 77 5f 61 !=0;. /* view_a
6900: 64 64 5f 66 75 6e 63 74 69 6f 6e 73 28 74 61 62 dd_functions(tab
6910: 73 29 3b 20 2a 2f 0a 20 20 64 62 5f 70 72 65 70 s); */. db_prep
6920: 61 72 65 28 26 71 2c 0a 20 20 20 20 22 53 45 4c are(&q,. "SEL
6930: 45 43 54 20 74 69 74 6c 65 2c 20 73 71 6c 63 6f ECT title, sqlco
6940: 64 65 2c 20 6f 77 6e 65 72 2c 20 63 6f 6c 73 20 de, owner, cols
6950: 46 52 4f 4d 20 72 65 70 6f 72 74 66 6d 74 20 57 FROM reportfmt W
6960: 48 45 52 45 20 72 6e 3d 25 64 22 2c 20 72 6e 29 HERE rn=%d", rn)
6970: 3b 0a 20 20 69 66 28 20 64 62 5f 73 74 65 70 28 ;. if( db_step(
6980: 26 71 29 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20 &q)!=SQLITE_ROW
6990: 29 7b 0a 20 20 20 20 63 67 69 5f 72 65 64 69 72 ){. cgi_redir
69a0: 65 63 74 28 22 72 65 70 6f 72 74 6c 69 73 74 22 ect("reportlist"
69b0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 );. return;.
69c0: 20 7d 0a 20 20 7a 54 69 74 6c 65 20 3d 20 64 62 }. zTitle = db
69d0: 5f 63 6f 6c 75 6d 6e 5f 6d 61 6c 6c 6f 63 28 26 _column_malloc(&
69e0: 71 2c 20 30 29 3b 0a 20 20 7a 53 71 6c 20 3d 20 q, 0);. zSql =
69f0: 64 62 5f 63 6f 6c 75 6d 6e 5f 6d 61 6c 6c 6f 63 db_column_malloc
6a00: 28 26 71 2c 20 31 29 3b 0a 20 20 7a 4f 77 6e 65 (&q, 1);. zOwne
6a10: 72 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 6d 61 r = db_column_ma
6a20: 6c 6c 6f 63 28 26 71 2c 20 32 29 3b 0a 20 20 7a lloc(&q, 2);. z
6a30: 43 6c 72 4b 65 79 20 3d 20 64 62 5f 63 6f 6c 75 ClrKey = db_colu
6a40: 6d 6e 5f 6d 61 6c 6c 6f 63 28 26 71 2c 20 33 29 mn_malloc(&q, 3)
6a50: 3b 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 ;. db_finalize(
6a60: 26 71 29 3b 0a 0a 20 20 69 66 28 20 50 28 22 6f &q);.. if( P("o
6a70: 72 64 65 72 5f 62 79 22 29 20 29 7b 0a 20 20 20 rder_by") ){.
6a80: 20 2f 2a 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 /*. ** If th
6a90: 65 20 75 73 65 72 20 77 61 6e 74 73 20 74 6f 20 e user wants to
6aa0: 64 6f 20 61 20 63 6f 6c 75 6d 6e 20 73 6f 72 74 do a column sort
6ab0: 2c 20 77 72 61 70 20 74 68 65 20 71 75 65 72 79 , wrap the query
6ac0: 20 69 6e 74 6f 20 61 20 73 75 62 0a 20 20 20 20 into a sub.
6ad0: 2a 2a 20 71 75 65 72 79 20 61 6e 64 20 74 68 65 ** query and the
6ae0: 6e 20 73 6f 72 74 20 74 68 65 20 72 65 73 75 6c n sort the resul
6af0: 74 73 2e 20 54 68 69 73 20 69 73 20 61 20 77 68 ts. This is a wh
6b00: 6f 6c 65 20 6c 6f 74 20 65 61 73 69 65 72 20 74 ole lot easier t
6b10: 68 61 6e 0a 20 20 20 20 2a 2a 20 74 72 79 69 6e han. ** tryin
6b20: 67 20 74 6f 20 69 6e 73 65 72 74 20 61 6e 20 4f g to insert an O
6b30: 52 44 45 52 20 42 59 20 69 6e 74 6f 20 74 68 65 RDER BY into the
6b40: 20 71 75 65 72 79 20 69 74 73 65 6c 66 2c 20 65 query itself, e
6b50: 73 70 65 63 69 61 6c 6c 79 0a 20 20 20 20 2a 2a specially. **
6b60: 20 69 66 20 74 68 65 20 71 75 65 72 79 20 69 73 if the query is
6b70: 20 61 6c 72 65 61 64 79 20 6f 72 64 65 72 65 64 already ordered
6b80: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 6e 74 .. */. int
6b90: 20 6e 46 69 65 6c 64 20 3d 20 61 74 6f 69 28 50 nField = atoi(P
6ba0: 28 22 6f 72 64 65 72 5f 62 79 22 29 29 3b 0a 20 ("order_by"));.
6bb0: 20 20 20 69 66 28 20 6e 46 69 65 6c 64 20 3e 20 if( nField >
6bc0: 30 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 0 ){. const
6bd0: 20 63 68 61 72 2a 20 7a 44 69 72 20 3d 20 50 44 char* zDir = PD
6be0: 28 22 6f 72 64 65 72 5f 64 69 72 22 2c 22 22 29 ("order_dir","")
6bf0: 3b 0a 20 20 20 20 20 20 7a 44 69 72 20 3d 20 21 ;. zDir = !
6c00: 73 74 72 63 6d 70 28 22 41 53 43 22 2c 7a 44 69 strcmp("ASC",zDi
6c10: 72 29 20 3f 20 22 41 53 43 22 20 3a 20 22 44 45 r) ? "ASC" : "DE
6c20: 53 43 22 3b 0a 20 20 20 20 20 20 7a 53 71 6c 20 SC";. zSql
6c30: 3d 20 6d 70 72 69 6e 74 66 28 22 53 45 4c 45 43 = mprintf("SELEC
6c40: 54 20 2a 20 46 52 4f 4d 20 28 25 73 29 20 4f 52 T * FROM (%s) OR
6c50: 44 45 52 20 42 59 20 25 64 20 25 73 22 2c 20 7a DER BY %d %s", z
6c60: 53 71 6c 2c 20 6e 46 69 65 6c 64 2c 20 7a 44 69 Sql, nField, zDi
6c70: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 r);. }. }..
6c80: 20 63 6f 75 6e 74 20 3d 20 30 3b 0a 20 20 69 66 count = 0;. if
6c90: 28 20 21 74 61 62 73 20 29 7b 0a 20 20 20 20 73 ( !tabs ){. s
6ca0: 74 72 75 63 74 20 47 65 6e 65 72 61 74 65 48 54 truct GenerateHT
6cb0: 4d 4c 20 73 53 74 61 74 65 3b 0a 0a 20 20 20 20 ML sState;..
6cc0: 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 50 db_multi_exec("P
6cd0: 52 41 47 4d 41 20 65 6d 70 74 79 5f 72 65 73 75 RAGMA empty_resu
6ce0: 6c 74 5f 63 61 6c 6c 62 61 63 6b 73 3d 4f 4e 22 lt_callbacks=ON"
6cf0: 29 3b 0a 20 20 20 20 73 74 79 6c 65 5f 73 75 62 );. style_sub
6d00: 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 52 61 menu_element("Ra
6d10: 77 22 2c 20 22 52 61 77 22 2c 20 0a 20 20 20 20 w", "Raw", .
6d20: 20 20 22 72 70 74 76 69 65 77 3f 74 61 62 6c 69 "rptview?tabli
6d30: 73 74 3d 31 26 25 73 22 2c 20 50 44 28 22 51 55 st=1&%s", PD("QU
6d40: 45 52 59 5f 53 54 52 49 4e 47 22 2c 22 22 29 29 ERY_STRING",""))
6d50: 3b 0a 20 20 20 20 69 66 28 20 67 2e 6f 6b 41 64 ;. if( g.okAd
6d60: 6d 69 6e 20 0a 20 20 20 20 20 20 20 7c 7c 20 28 min . || (
6d70: 67 2e 6f 6b 51 75 65 72 79 20 26 26 20 67 2e 7a g.okQuery && g.z
6d80: 4c 6f 67 69 6e 20 26 26 20 7a 4f 77 6e 65 72 20 Login && zOwner
6d90: 26 26 20 73 74 72 63 6d 70 28 67 2e 7a 4c 6f 67 && strcmp(g.zLog
6da0: 69 6e 2c 7a 4f 77 6e 65 72 29 3d 3d 30 29 20 29 in,zOwner)==0) )
6db0: 7b 0a 20 20 20 20 20 20 73 74 79 6c 65 5f 73 75 {. style_su
6dc0: 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 45 bmenu_element("E
6dd0: 64 69 74 22 2c 20 22 45 64 69 74 22 2c 20 22 72 dit", "Edit", "r
6de0: 70 74 65 64 69 74 3f 72 6e 3d 25 64 22 2c 20 72 ptedit?rn=%d", r
6df0: 6e 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 74 n);. }. st
6e00: 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d yle_submenu_elem
6e10: 65 6e 74 28 22 53 51 4c 22 2c 20 22 53 51 4c 22 ent("SQL", "SQL"
6e20: 2c 20 22 72 70 74 73 71 6c 3f 72 6e 3d 25 64 22 , "rptsql?rn=%d"
6e30: 2c 72 6e 29 3b 0a 20 20 20 20 73 74 79 6c 65 5f ,rn);. style_
6e40: 68 65 61 64 65 72 28 7a 54 69 74 6c 65 29 3b 0a header(zTitle);.
6e50: 20 20 20 20 6f 75 74 70 75 74 5f 63 6f 6c 6f 72 output_color
6e60: 5f 6b 65 79 28 7a 43 6c 72 4b 65 79 2c 20 31 2c _key(zClrKey, 1,
6e70: 20 0a 20 20 20 20 20 20 20 20 22 62 6f 72 64 65 . "borde
6e80: 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d r=0 cellpadding=
6e90: 33 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 30 20 3 cellspacing=0
6ea0: 63 6c 61 73 73 3d 5c 22 72 65 70 6f 72 74 5c 22 class=\"report\"
6eb0: 22 29 3b 0a 20 20 20 20 40 20 3c 74 61 62 6c 65 ");. @ <table
6ec0: 20 62 6f 72 64 65 72 3d 31 20 63 65 6c 6c 70 61 border=1 cellpa
6ed0: 64 64 69 6e 67 3d 32 20 63 65 6c 6c 73 70 61 63 dding=2 cellspac
6ee0: 69 6e 67 3d 30 20 63 6c 61 73 73 3d 22 72 65 70 ing=0 class="rep
6ef0: 6f 72 74 22 3e 0a 20 20 20 20 73 53 74 61 74 65 ort">. sState
6f00: 2e 72 6e 20 3d 20 72 6e 3b 0a 20 20 20 20 73 53 .rn = rn;. sS
6f10: 74 61 74 65 2e 6e 43 6f 75 6e 74 20 3d 20 30 3b tate.nCount = 0;
6f20: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 . sqlite3_exe
6f30: 63 28 67 2e 64 62 2c 20 7a 53 71 6c 2c 20 67 65 c(g.db, zSql, ge
6f40: 6e 65 72 61 74 65 5f 68 74 6d 6c 2c 20 26 73 53 nerate_html, &sS
6f50: 74 61 74 65 2c 20 30 29 3b 0a 20 20 20 20 40 20 tate, 0);. @
6f60: 3c 2f 74 61 62 6c 65 3e 0a 20 20 20 20 73 74 79 </table>. sty
6f70: 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a 20 20 7d le_footer();. }
6f80: 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 else{. sqlite
6f90: 33 5f 65 78 65 63 28 67 2e 64 62 2c 20 7a 53 71 3_exec(g.db, zSq
6fa0: 6c 2c 20 6f 75 74 70 75 74 5f 74 61 62 5f 73 65 l, output_tab_se
6fb0: 70 61 72 61 74 65 64 2c 20 26 63 6f 75 6e 74 2c parated, &count,
6fc0: 20 30 29 3b 0a 20 20 20 20 63 67 69 5f 73 65 74 0);. cgi_set
6fd0: 5f 63 6f 6e 74 65 6e 74 5f 74 79 70 65 28 22 74 _content_type("t
6fe0: 65 78 74 2f 70 6c 61 69 6e 22 29 3b 0a 20 20 7d ext/plain");. }
6ff0: 0a 7d 0a .}.