aboutsummaryrefslogtreecommitdiff
path: root/sql_query.c
diff options
context:
space:
mode:
Diffstat (limited to 'sql_query.c')
-rw-r--r--sql_query.c152
1 files changed, 152 insertions, 0 deletions
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 <hans@at.or.at>
+ *
+ * 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 <m_pd.h>
+
+#ifdef _WIN32
+#define _WIN32_WINNT 0x0400
+#include <windows.h>
+#include <stdio.h>
+#else
+#include <stdlib.h>
+#endif
+
+#include <string.h>
+
+//#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);
+}
+