#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

#include <stdio.h>


#include <mysql.h>

void test ( MYSQL * mysql ) {

    MYSQL_STMT * statement;
    int          error;
    my_bool update_max_length;
    MYSQL_RES   * meta_datas;
    
    int nb_fields;

    update_max_length = 1;

//  #define QUERY_STRING "select v_bigint from `all_types`"
//  #define QUERY_STRING "select v_varchar from `all_types`"
//  #define QUERY_STRING "select v_bit from `all_types`"
//  #define QUERY_STRING "select v_longtext from `all_types`"
//  #define QUERY_STRING "select v_longblob from `all_types`"
    #define QUERY_STRING "select v_numeric from `all_types`"


    fprintf ( stderr, "Testing query: '%s'\n", QUERY_STRING );

    fprintf ( stderr, "mysql_stmt_init...\n" );


    if ( ( statement = mysql_stmt_init ( mysql ) ) == NULL ) {
        fprintf ( stderr, "Cannot allocate sql statement\n" );
        exit(-1);
    }

    fprintf ( stderr, "mysql_stmt_prepare...\n" );

    if ( error = mysql_stmt_prepare ( statement, QUERY_STRING, strlen ( QUERY_STRING ) ) ) {
        fprintf ( stderr, "Error executing mysql_stmt_prepare\n" );
        exit (1);
    }


    fprintf ( stderr, "mysql_stmt_attr_set...\n" );

    mysql_stmt_attr_set ( statement, STMT_ATTR_UPDATE_MAX_LENGTH, &update_max_length );


    fprintf ( stderr, "mysql_stmt_execute...\n" );

    if ( error = mysql_stmt_execute ( statement ) ) {
        fprintf ( stderr,  "Error executing mysql_stmt_execute\n" );
        exit(-1);
    }


    fprintf ( stderr, "mysql_stmt_store_result...\n" );

    if ( error = mysql_stmt_store_result ( statement  ) ) {
        fprintf ( stderr, "Error executing mysql_stmt_store_result\n" );
        exit(-1);
    }

    fprintf ( stderr, "mysql_stmt_result_metadata...\n" );

    if ( ! ( meta_datas = mysql_stmt_result_metadata ( statement )) ) {
        fprintf ( stderr, "Error executing mysql_stmt_result_metadata\n" );
        exit(-1);
    }

    nb_fields = mysql_num_fields ( meta_datas );


    fprintf ( stderr, "Testing query: DONE\n"  );



}



void setup_connection ( MYSQL * conn ) {

    static char set_names[] = "set names utf8";
    int         error;
    int         nb_errors;

    nb_errors = 0;

    if ( error = mysql_real_query ( conn, set_names, strlen ( set_names )) ) {
        fprintf ( stderr, "Error set names\n" );
        exit (-1);
    }
}




int main ( int argc, char ** argv ) {

    char         host[] = DB_STRING ("localhost");
    char         user[] = DB_STRING ("root");
    char         password[] = DB_STRING ("dnjpad");
    char         database[] = DB_STRING ("db_types");
    int           port = 0;
    char       * unix_socket = NULL;
    unsigned long connection_flags = 0;
    MYSQL         conn;

    mysql_init (&conn);
    mysql_options (&conn, MYSQL_READ_DEFAULT_GROUP, "db_types");

    if ( !mysql_real_connect(&conn, host, user, password, database, port, unix_socket, connection_flags) ) {
        fprintf(stderr, "Failed to connect to database '%s': Error: %s\n", database, mysql_error(&conn));
        exit (1);
    }

    setup_connection (&conn );

    fprintf(stderr, "Successfully connected to database\n");


    test ( &conn );



    return( 0);
}

