alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

HSQLDB example source code file (plcontrolflow.sql)

This example HSQLDB source code file (plcontrolflow.sql) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - HSQLDB tags/keywords

a, failed, inside-deep-nest, l1, l1, l11, l2, l2, l3, l3, negative, pre-deep-nest, r, r

The HSQLDB plcontrolflow.sql source code

/*
 * $Id$
 *
 * Tests PL control flow.  if, foreach statements, etc.
 */

*if (*UNSET)
    \q Failed boolean test of an unset variable
*end if
*if (astring)
   * y = something
*end if
*if (*X)
    \q Failed boolean test of a simple string constant
*end if
*if (0)
    \q Failed boolean test of zero constant
*end if
*if (! x)
/* Note that there must be white space to separate the two tokens above. */
    \q Failed boolean test of a plain constant
*end if


/* Nested if tests */
* if (1)
    * L1 = true
    * if (2)
        * L2 = true
    * end if
    * L11 = true
* end if
*if (! *L1)
    \q Pre-nest failure
*end if
*if (! *L2)
    \q Inside-nest failure
*end if
*if (! *L11)
    \q Post-nest failure
*end if
* L1 =
* L2 =
* L11 =
* if (1)
    * L1 = true
    * if (2)
        * L2 = true
    * end if
    * L11 = true
* end if
*if (! *L1)
    \q Pre-nest failure
*end if
*if (! *L2)
    \q Inside-nest failure
*end if
*if (! *L11)
    \q Post-nest failure
*end if
/* Test deep nesting of IFs, including negatives. */
* if (1)
    * L1 = true
    * if (0)
        * N2 = true
    * end if
    * if (2)
        * L2 = true
        * if (3)
            * L3 = true
            * if (4)
                * L4 = true
                * if (0)
                    * N5 = true
                * end if
                * if (5)
                    * L5 = true
                    * if (0)
                        * N6 = true
                    * end if
                    * if (6)
                        * L6 = true
                        * if (0)
                            * N7 = true
                        * end if
                    * end if
                    * L51 = true
                * end if
            * end if
            * if (0)
                * N4 = true
            * end if
            * L31 = true
        * end if
        * if (0)
            * N3 = true
        * end if
    * end if
    * L11 = true
* end if
*if (! *L1)
    \q Pre-deep-nest failure 1
*end if
*if (! *L2)
    \q Inside-deep-nest failure 2
*end if
*if (! *L11)
    \q Post-deep-nest failure 11
*end if
*if (! *L3)
    \q Pre-deep-nest failure 3
*end if
*if (! *L4)
    \q Inside-deep-nest failure 4
*end if
*if (! *L31)
    \q Post-deep-nest failure 31
*end if
*if (! *L5)
    \q Pre-deep-nest failure 5
*end if
*if (! *L6)
    \q Inside-deep-nest failure 6
*end if
*if (! *L51)
    \q Post-deep-nest failure 51
*end if
*if (*N2)
    \q Negative deep-nest failure 2
*end if
*if (*N3)
    \q Negative deep-nest failure 3
*end if
*if (*N4)
    \q Negative deep-nest failure 4
*end if
*if (*N5)
    \q Negative deep-nest failure 5
*end if
*if (*N6)
    \q Negative deep-nest failure 6
*end if
*if (*N7)
    \q Negative deep-nest failure 7
*end if

/* Nested foreach tests */
/* Initialize Results  to I */
* R = I
*foreach L1 (A B C)
  *foreach L2 (1 2 3 4)
      *foreach L3 (a b)
	      * R = *{R}:*{L1}*{L2}*{L3}
	  *end foreach
  *end foreach
*end foreach
*if (*R != I:A1a:A1b:A2a:A2b:A3a:A3b:A4a:A4b:B1a:B1b:B2a:B2b:B3a:B3b:B4a:B4b:C1a:C1b:C2a:C2b:C3a:C3b:C4a:C4b)
    \q nested foreach result unexpected: *{R}
*end if
/* Initialize Results  to I */
* R = I
*foreach L1 (A B C)
  *if (*L1 != A)
	  *foreach L2 (1 2 3 4)
		  *if (*L2 != 3)
			  *foreach L3 (a b c)
				  *if (*L3 != b)
					  * R = *{R}:*{L1}*{L2}*{L3}
				  *end if
			  *end foreach
		  *end if
	  *end foreach
  *end if
*end foreach
*if (*R != I:B1a:B1c:B2a:B2c:B4a:B4c:C1a:C1c:C2a:C2c:C4a:C4c)
    \q nested conditional foreach result unexpected: *{R}
*end if

/* Test break and continue */
/* Initialize Results  to I */
* R = I
*foreach L1 (A B C)
  *foreach L2 (1 2 3 4)
      *foreach L3 (a b)
          *if (*L3 == a)
            *continue
          *end if
	      * R = *{R}:*{L1}*{L2}*{L3}
	  *end foreach
      *if (*L2 == 3)
        *break foreach
      *end if
  *end foreach
*end foreach
*if (*R != I:A1b:A2b:A3b:B1b:B2b:B3b:C1b:C2b:C3b)
    \q nested foreach result unexpected: *{R}
*end if

/* If something doesn't work right, could get into infinite loop below. */
* accum=L
*while (1)
   * accum = *{accum}P
   * subcum = M
   *while (*subcum < MQQ)
       * subcum = *{subcum}Q
   *end while
   * accum = *{accum}*{subcum}
   *if (*accum == LPMQQPMQQ)
       *break while
    *end if
*end while

*if (*accum != LPMQQPMQQ)
    \p Wrong value accumulated by nested while loops (*{accum})
*end if

Other HSQLDB examples (source code examples)

Here is a short list of links related to this HSQLDB plcontrolflow.sql source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.