/*******************************************************
**
** A sample program that demonstrates the use of Static embedded SQL.
** Before compiling this program, be sure you have created a table
** called video and inserted some tuples in it. 
**
********************************************************/
#include <stdio.h>

/* sqlca: is the sql communications area. All error codes
   are returned from db2 in that structure which is filled
   each time an interaction with db2 takes place.
*/

EXEC SQL INCLUDE SQLCA;          /* SQL communication area structure */

EXEC SQL BEGIN DECLARE SECTION;  /* declare host variables    */
 char db_name[8];                /* database name             */
 char video_title[30];           /* title of the video        */
 short video_id;                 /* serial number             */
 char director[20];              /* director name             */
EXEC SQL END DECLARE SECTION;

/* These lines are redundant here because the default
   action is to continue. They just show the kind of
   errors that could arise and one way to control them.
*/

EXEC SQL WHENEVER SQLWARNING CONTINUE;  /* sqlca.sqlcode > 0    */
EXEC SQL WHENEVER SQLERROR CONTINUE;    /* sqlca.sqlcode < 0    */
EXEC SQL WHENEVER NOT FOUND CONTINUE;   /* sqlca.sqlcode = 100  */
                                        /* sqlca.sqlcode = 0 (no error) */

void main() {

strcpy(db_name, "csc343h");

/* C variables are preceded by a colon when they are passed to DB2 */

EXEC SQL CONNECT TO :db_name;

if (sqlca.sqlcode != 0) {
        printf("Connect failed!: reason %ld\n", sqlca.sqlcode);
        exit(1);
}

/* cursor delcaration. Have to declare a cursor each time you
   want tuples back from db2
*/

EXEC SQL DECLARE c1 CURSOR FOR
        SELECT video_title
        FROM video;

/* you have to open the cursor in order to get tuples back */

EXEC SQL OPEN c1;

do {

  /* fetch tuples from the cursor. This will execute the statement
     the cursor implements and will return the results */

  EXEC SQL FETCH c1 into :video_title;
  if (SQLCODE != 0) break;	/* SQLCODE refers to sqlca.sqlcode */

  /* host variables should have ':' prefix when they are used in DB2 commands */

  printf("%s\n",video_title);

} while (1);
EXEC SQL CLOSE c1;
EXEC SQL CONNECT RESET;
}
