From a9e273ad92162f76a432b5fdae9ee464fcf749b2 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Sat, 22 Dec 2007 02:53:43 +0000 Subject: initial sketch, just counting ? placeholders and laying out proxy inlets svn path=/trunk/externals/hcs/; revision=9099 --- sql_query-help.pd | 34 ++++++++++++ sql_query.c | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 186 insertions(+) create mode 100644 sql_query-help.pd create mode 100644 sql_query.c diff --git a/sql_query-help.pd b/sql_query-help.pd new file mode 100644 index 0000000..204a91e --- /dev/null +++ b/sql_query-help.pd @@ -0,0 +1,34 @@ +#N canvas 403 84 613 618 10; +#X obj 118 105 sql_query this is a test? more ?; +#X obj 362 244 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 420 276 5 0 0 0 - - -; +#X text 395 223 age; +#N canvas 402 387 450 300 sql 0; +#X obj 73 37 inlet; +#X obj 259 37 inlet; +#X obj 63 251 outlet; +#X obj 270 267 outlet; +#X obj 255 78 print COLD; +#X obj 61 82 print HOT; +#X connect 0 0 5 0; +#X connect 1 0 4 0; +#X restore 267 428 pd sql; +#X obj 223 495 print RESULTS; +#X obj 349 496 print STATUS; +#X obj 325 452 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X text 347 453 bang when done; +#X msg 120 232 Chinua; +#X msg 80 233 Mary; +#X msg 172 231 symbol Ang; +#X obj 119 322 sql_query insert into table (name \, age) values (? +\, ?); +#X connect 4 0 5 0; +#X connect 4 1 6 0; +#X connect 4 1 7 0; +#X connect 9 0 12 0; +#X connect 10 0 12 0; +#X connect 11 0 12 0; +#X connect 12 0 4 0; +#X connect 12 1 4 1; diff --git a/sql_query.c b/sql_query.c new file mode 100644 index 0000000..754e0b9 --- /dev/null +++ b/sql_query.c @@ -0,0 +1,152 @@ +/* + * object for generating SQL queries with SQL ? placeholders + * Written by Hans-Christoph Steiner + * + * Copyright (c) 2007 Free Software Foundation + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * See file LICENSE for further informations on licensing terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + */ + +#include + +#ifdef _WIN32 +#define _WIN32_WINNT 0x0400 +#include +#include +#else +#include +#endif + +#include + +//#define DEBUG(x) +#define DEBUG(x) x + +#define PLACEHOLDER '?' + +/*------------------------------------------------------------------------------ + * CLASS DEF + */ +static t_class *sql_query_class; + +typedef struct _sql_query +{ + t_object x_obj; + + t_binbuf* x_query_binbuf; + + int inlet_count; + + t_outlet* x_data_outlet; + t_outlet* x_status_outlet; +} t_sql_query; + + + +/*------------------------------------------------------------------------------ + * PROXY INLET FUNCTIONS + */ +static t_class *proxy_inlet_class = NULL; + +typedef struct _proxy_inlet +{ + t_pd pd; + void *owner; + unsigned int id; +} t_proxy_inlet; + +static void proxy_inlet_new(t_proxy_inlet *p, void *owner, unsigned int id) +{ + p->pd = proxy_inlet_class; + p->owner = owner; + p->id = id; +} + +static void proxy_inlet_anything(t_proxy_inlet *x, t_symbol *s, int argc, t_atom *argv) +{ + int i; + char buf[MAXPDSTRING]; + post("proxy_inlet_anything: %s", s -> s_name); +} + +static void proxy_inlet_setup(void) +{ + post("proxy_inlet_setup"); + proxy_inlet_class = (t_class *)class_new(gensym("#__PROXY_INLET__"), + 0, + 0, + sizeof(t_proxy_inlet), + 0, + A_GIMME, + 0); + class_addanything(proxy_inlet_class, (t_method)proxy_inlet_anything); +} + +/*------------------------------------------------------------------------------ + * STANDARD CLASS FUNCTIONS + */ + +static void *sql_query_free(t_sql_query *x) +{ + binbuf_free(x->x_query_binbuf); +} + +static void *sql_query_new(t_symbol *s, int argc, t_atom *argv) +{ + DEBUG(post("sql_query_new");); + char *buf; + int bufsize; + char *current = NULL; + unsigned int total_inlets = 0; + t_sql_query *x = (t_sql_query *)pd_new(sql_query_class); + + x->x_query_binbuf = binbuf_new(); + binbuf_add(x->x_query_binbuf, argc, argv); + binbuf_gettext(x->x_query_binbuf, &buf, &bufsize); + buf[bufsize] = 0; + + current = strchr(buf, PLACEHOLDER); + while (current != NULL) + { + post("found placeholder %c", PLACEHOLDER); + total_inlets++; + current = strchr(current + 1, PLACEHOLDER); + } + post("creating %d inlets", total_inlets); + x->x_data_outlet = outlet_new(&x->x_obj, 0); + x->x_status_outlet = outlet_new(&x->x_obj, 0); + + return (x); +} + +void sql_query_setup(void) +{ + DEBUG(post("sql_query_setup");); + sql_query_class = class_new(gensym("sql_query"), + (t_newmethod)sql_query_new, + (t_newmethod)sql_query_free, + sizeof(t_sql_query), + 0, + A_GIMME, + 0); + + /* add inlet datatype methods */ +// class_addbang(sql_query_class, (t_method) sql_query_bang); +// class_addanything(sql_query_class, (t_method) sql_query_anything); +} + -- cgit v1.2.1