~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to examples/simple.c

  • Committer: Jay Pipes
  • Date: 2009-01-30 04:01:12 UTC
  • mto: This revision was merged to the branch mainline in revision 830.
  • Revision ID: jpipes@serialcoder-20090130040112-svbn774guj98pwi4
To remain in compatibility with MySQL, added ability to interpret
decimal arguments as datetime strings for temporal functions.

Fixed YEAR(), MONTH(), DAYOFMONTH(), DAYOFYEAR(), HOUR(), MINUTE(), SECOND(), and MICROSECOND()
to accept decimal parameters and interpret them the same way as MySQL.

Fixed an issue with the TemporalFormat::matches() method which was 
incorrectly assuming all microsecond arguments were specified as 6 digits.
Added power of 10 multiplier to usecond calculation. This fixes issues with
failures in type_date and func_sapdb test cases.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * Drizzle Client & Protocol Library
3
 
 *
4
 
 * Copyright (C) 2008 Eric Day (eday@oddments.org)
5
 
 * All rights reserved.
6
 
 *
7
 
 * Redistribution and use in source and binary forms, with or without
8
 
 * modification, are permitted provided that the following conditions are
9
 
 * met:
10
 
 *
11
 
 *     * Redistributions of source code must retain the above copyright
12
 
 * notice, this list of conditions and the following disclaimer.
13
 
 *
14
 
 *     * Redistributions in binary form must reproduce the above
15
 
 * copyright notice, this list of conditions and the following disclaimer
16
 
 * in the documentation and/or other materials provided with the
17
 
 * distribution.
18
 
 *
19
 
 *     * The names of its contributors may not be used to endorse or
20
 
 * promote products derived from this software without specific prior
21
 
 * written permission.
22
 
 *
23
 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24
 
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25
 
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26
 
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27
 
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28
 
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29
 
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30
 
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31
 
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32
 
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33
 
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
 
 *
35
 
 */
36
 
 
37
 
 
38
 
#include <stdio.h>
39
 
#include <stdlib.h>
40
 
#include <string.h>
41
 
#include <unistd.h>
42
 
#include <netdb.h>
43
 
#include <getopt.h>
44
 
 
45
 
#include <libdrizzle/drizzle_client.h>
46
 
 
47
 
int main(int argc, char *argv[])
48
 
{
49
 
  int c;
50
 
  const char *db= "INFORMATION_SCHEMA";
51
 
  const char *host= NULL;
52
 
  bool mysql= false;
53
 
  in_port_t port= 0;
54
 
  const char *query= "SELECT TABLE_SCHEMA,TABLE_NAME FROM TABLES";
55
 
  drizzle_verbose_t verbose= DRIZZLE_VERBOSE_NEVER;
56
 
  drizzle_st drizzle;
57
 
  drizzle_con_st *con= (drizzle_con_st*)malloc(sizeof(drizzle_con_st));
58
 
  drizzle_result_st result;
59
 
  drizzle_return_t ret;
60
 
  int x;
61
 
  char **row;
62
 
 
63
 
  while ((c = getopt(argc, argv, "d:h:mp:q:v")) != -1)
64
 
  {
65
 
    switch(c)
66
 
    {
67
 
    case 'd':
68
 
      db= optarg;
69
 
      break;
70
 
 
71
 
    case 'h':
72
 
      host= optarg;
73
 
      break;
74
 
 
75
 
    case 'm':
76
 
      mysql= true;
77
 
      break;
78
 
 
79
 
    case 'p':
80
 
      port= (in_port_t)atoi(optarg);
81
 
      break;
82
 
 
83
 
    case 'q':
84
 
      query= optarg;
85
 
      break;
86
 
 
87
 
    case 'v':
88
 
      verbose++;
89
 
      break;
90
 
 
91
 
    default:
92
 
      printf("usage: %s [-d <db>] [-h <host>] [-m] [-p <port>] [-q <query>] "
93
 
             "[-v]\n", argv[0]);
94
 
      printf("\t-d <db>    - Database to use for query\n");
95
 
      printf("\t-h <host>  - Host to listen on\n");
96
 
      printf("\t-m         - Use the MySQL protocol\n");
97
 
      printf("\t-p <port>  - Port to listen on\n");
98
 
      printf("\t-q <query> - Query to run\n");
99
 
      printf("\t-v         - Increase verbosity level\n");
100
 
      return 1;
101
 
    }
102
 
  }
103
 
 
104
 
  if (drizzle_create(&drizzle) == NULL)
105
 
  {
106
 
    printf("drizzle_create:NULL\n");
107
 
    return 1;
108
 
  }
109
 
 
110
 
  drizzle_set_verbose(&drizzle, verbose);
111
 
 
112
 
  if (drizzle_con_create(&drizzle, con) == NULL)
113
 
  {
114
 
    printf("drizzle_con_create:NULL\n");
115
 
    return 1;
116
 
  }
117
 
 
118
 
  if (mysql)
119
 
    drizzle_con_add_options(con, DRIZZLE_CON_MYSQL);
120
 
 
121
 
  drizzle_con_set_tcp(con, host, port);
122
 
  drizzle_con_set_db(con, db);
123
 
 
124
 
  (void)drizzle_query_str(con, &result, query, &ret);
125
 
  if (ret != DRIZZLE_RETURN_OK)
126
 
  {
127
 
    printf("drizzle_query:%s\n", drizzle_con_error(con));
128
 
    return 1;
129
 
  }
130
 
 
131
 
  ret= drizzle_result_buffer(&result);
132
 
  if (ret != DRIZZLE_RETURN_OK)
133
 
  {
134
 
    printf("drizzle_result_buffer:%s\n", drizzle_con_error(con));
135
 
    return 1;
136
 
  }
137
 
 
138
 
  while ((row= (char **)drizzle_row_next(&result)) != NULL)
139
 
  {
140
 
    for (x= 0; x < drizzle_result_column_count(&result); x++)
141
 
      printf("%s%s", x == 0 ? "" : ":", row[x] == NULL ? "NULL" : row[x]);
142
 
    printf("\n");
143
 
  }
144
 
 
145
 
  drizzle_result_free(&result);
146
 
  drizzle_con_free(con);
147
 
  drizzle_free(&drizzle);
148
 
 
149
 
  free(con);
150
 
  return 0;
151
 
}