#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h> 

int main(int argc, char* argv[]) {
  sqlite3 *sqlDBconn;
  sqlite3_stmt *sqlDBprepared ;
  int sqlRC ;
  int sqlNumCols ;
  int sqlRowNum ;
  int sqlColNum ;
  const char *sqlDBname = "social.sqlite3" ;
  const char *sqlDBquery = 
    "SELECT A.name, B.name "
    "FROM Highschooler A, Highschooler B, Friend F "
    "WHERE A.ID = F.ID1 AND B.ID = F.ID2 AND A.name < B.name ;" ;

  if((sqlRC=sqlite3_open(sqlDBname, &sqlDBconn)) != SQLITE_OK) {
    fprintf(stderr, "Failure opening %s: %s\n",
	    sqlDBname, sqlite3_errmsg(sqlDBconn)) ;
    exit(0);
  }

  if((sqlRC=sqlite3_prepare_v2(
               sqlDBconn,
               sqlDBquery,
	       -1,    // Forget the "small performance advantage"
	       &sqlDBprepared,
	       (const char **)NULL)) != SQLITE_OK) {
    fprintf(stderr, "Failure preparing %s: %s\n",
	    sqlDBquery, sqlite3_errmsg(sqlDBconn)) ;
    exit(0);
  }
  
  while ((sqlRC=sqlite3_step(sqlDBprepared)) == SQLITE_ROW) {
    const char *friend1, *friend2 ;
    friend1 = sqlite3_column_text(sqlDBprepared, 0) ;
    friend2 = sqlite3_column_text(sqlDBprepared, 1) ;
    fprintf(stdout, "Friends:   %-10s & %-10s\n", friend1, friend2) ;
    sqlRowNum++ ;
  }

  sqlite3_finalize(sqlDBprepared) ;
}
