Work at SourceForge, help us to make it a better place! We have an immediate need for a Support Technician in our San Francisco or Denver office.

Close

[r8763]: incubator / ooSQLite / examples / printTableWithNulls.rex Maximize Restore History

Download this file

printTableWithNulls.rex    123 lines (106 with data), 4.9 kB

#!/usr/bin/rexx
/*----------------------------------------------------------------------------*/
/*                                                                            */
/* Copyright (c) 2012-2012 Rexx Language Association. All rights reserved.    */
/*                                                                            */
/* This program and the accompanying materials are made available under       */
/* the terms of the Common Public License v1.0 which accompanies this         */
/* distribution. A copy is also available at the following address:           */
/* http://www.oorexx.org/license.html                                         */
/*                                                                            */
/* Redistribution and use in source and binary forms, with or                 */
/* without modification, are permitted provided that the following            */
/* conditions are met:                                                        */
/*                                                                            */
/* Redistributions of source code must retain the above copyright             */
/* notice, this list of conditions and the following disclaimer.              */
/* Redistributions in binary form must reproduce the above copyright          */
/* notice, this list of conditions and the following disclaimer in            */
/* the documentation and/or other materials provided with the distribution.   */
/*                                                                            */
/* Neither the name of Rexx Language Association nor the names                */
/* of its contributors may be used to endorse or promote products             */
/* derived from this software without specific prior written permission.      */
/*                                                                            */
/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS        */
/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT          */
/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS          */
/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT   */
/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,      */
/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED   */
/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,        */
/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY     */
/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING    */
/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS         */
/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.               */
/*                                                                            */
/*----------------------------------------------------------------------------*/

/**
 *  printTableWtihNulls.rex
 *
 * This program is called from some of the other examples to print out the
 * values of a table where the table can contain SQL NULL values.
 *
 * It is an error to run this from the command line.
 *
 * For example, the insertNull.rex and insertNullTwo.rex examples call this
 * program as a function.  To see the output from this example, execute one of
 * those 2 examples.
 *
 */
 use strict arg db, table

  if \ db~isA(.ooSQLiteConnection) then do
    say "Incorrect usage of 'printTableWithNulls'."
    say "  This function can not be run from the command line."
    say "  This function is called correctly from some of the example programs."
    return .false
  end

  -- Print out the data in the table. We use a generic algorithm here where the
  -- number of the columns is unknown to begin with.  This will sometimes
  -- truncate the data in a column if it is too long.

  sql = "SELECT * FROM" table";"
  stmt = .ooSQLiteStmt~new(db, sql)
  if stmt~initCode \== stmt~OK then do
    say 'Error in SQL:' sql
    say '  rc:' stmt~lastErrCode 'msg:' stmt~lastErrMsg
    say
    return .false
  end

  n = stmt~columnCount

  header = ''
  do i = 1 to n
    header ||= stmt~columnName(i)~left(17)
  end
  say header
  say '='~copies(80)

  -- In this approach a NULL in a column will be printed as NULL
  do while stmt~step == stmt~ROW
    row = ''
    do i = 1 to n
      row ||= stmt~columnText(i)~left(17)
    end
    say row
  end
  say

  -- Print out the data in the table again.
  stmt~reset

  header = ''
  do i = 1 to n
    header ||= stmt~columnName(i)~left(17)
  end
  say header
  say '='~copies(80)

  -- In this approach a NULL is the table will be set to the .nil object.
  do while stmt~step == stmt~ROW
    row = ''

    do i = 1 to n
      if stmt~columnType(i) == stmt~NULL then f = .nil
      else f = stmt~columnText(i)

      row ||= left(f, 17)
    end

    say row
  end
  say

  stmt~finalize

  return .true

::requires 'ooSQLite.cls'