On 2/9/12, rod <crimson.blu...@gmail.com> wrote:
> My apologies if this question should be directed to some other list.
>
> I'm looking for a better way to printout the:
> Column Headers,
> followed by the table contents -
> in comma separated value (tsv) format
> from a SELECT statement:
>
>
> So far I have two solutions, neither seems elegant enough.
>
> The second solution makes use of a test of count

I'm excited, I may have solved my problem.  By setting a trace I am
able to reset a variable called counter to  -0-  every time a new sql
statment is compiled.  In addition I also save the sql  statement to
be evaluated  to a variable called  ::last_sql via:

# this trace is executed at the end of the compiling of an sql statement
sql trace {set ::count 0; set ::last_sql }

Then this proc will print the headers if  ::count=0  (ie only prior to
processing the the first row of the select results.


proc fqry {row {sep "\t"} {header 1}} {
# you can't pass the value in the array to the proc
# you need to upvar it to another var
        upvar $row g_row
        set val {}
        set col {}
        set col_name {}
        foreach {col_name } $g_row(*) {
                lappend val $g_row($col_name)
                lappend col $col_name
                set len [string length $col_name]
                set dash [string repeat - $len]
                lappend hd $dash
}
#always prints the vals; only print headers and "-------"'s  if counter==0

if {$::count==0 && $header } {puts [join $col $sep]; puts $hd}
        puts [join $val $sep]
incr ::count
}


Usage:

%sql eval "Select  col2, col4, col6 as Results from table 1"  q_array
{fqry q_array}


Q)  Does this seem like the way to accomplish this???  Are there other
typical uses of trace that I should be aware of prior to expanding on
this solution.
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to