summaryrefslogtreecommitdiff
path: root/src/c
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2008-09-04 10:27:21 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2008-09-04 10:27:21 -0400
commit711796ea5b4bf5d36b644eafa1b198ed3e4e1798 (patch)
tree1d82726bd8dceb4d03b600f40b3f72a8323eec20 /src/c
parentab29ac3337d2be88ae3288652e999873be1dcf14 (diff)
Change sqlify[int|float|string] to annotate with SQL types
Diffstat (limited to 'src/c')
-rw-r--r--src/c/urweb.c37
1 files changed, 33 insertions, 4 deletions
diff --git a/src/c/urweb.c b/src/c/urweb.c
index 57caa03d..c37393f2 100644
--- a/src/c/urweb.c
+++ b/src/c/urweb.c
@@ -591,10 +591,33 @@ lw_Basis_string lw_Basis_strdup(lw_context ctx, lw_Basis_string s1) {
}
+char *lw_Basis_sqlifyInt(lw_context ctx, lw_Basis_int n) {
+ int len;
+ char *r;
+
+ lw_check_heap(ctx, INTS_MAX + 6);
+ r = ctx->heap_front;
+ sprintf(r, "%lld::int8%n", n, &len);
+ ctx->heap_front += len+1;
+ return r;
+}
+
+char *lw_Basis_sqlifyFloat(lw_context ctx, lw_Basis_float n) {
+ int len;
+ char *r;
+
+ lw_check_heap(ctx, FLOATS_MAX + 8);
+ r = ctx->heap_front;
+ sprintf(r, "%g::float8%n", n, &len);
+ ctx->heap_front += len+1;
+ return r;
+}
+
+
lw_Basis_string lw_Basis_sqlifyString(lw_context ctx, lw_Basis_string s) {
char *r, *s2;
- lw_check_heap(ctx, strlen(s) * 2 + 4);
+ lw_check_heap(ctx, strlen(s) * 2 + 10);
r = s2 = ctx->heap_front;
*s2++ = 'E';
@@ -622,8 +645,14 @@ lw_Basis_string lw_Basis_sqlifyString(lw_context ctx, lw_Basis_string s) {
}
}
- *s2++ = '\'';
- *s2++ = 0;
- ctx->heap_front = s2;
+ strcpy(s2, "'::text");
+ ctx->heap_front = s2 + 8;
return r;
}
+
+char *lw_Basis_sqlifyBool(lw_context ctx, lw_Basis_bool b) {
+ if (b == lw_Basis_False)
+ return "FALSE";
+ else
+ return "TRUE";
+}