Mercurial > urweb
comparison src/mysql.sml @ 1656:3e7c7e200713
Fix handling of quotes in generating C literals
author | Adam Chlipala <adam@chlipala.net> |
---|---|
date | Mon, 02 Jan 2012 17:08:39 -0500 |
parents | 8128fcb2d4a4 |
children | ac141fbb313a |
comparison
equal
deleted
inserted
replaced
1655:b694f9153faa | 1656:3e7c7e200713 |
---|---|
344 val unix_socket = ref NONE | 344 val unix_socket = ref NONE |
345 | 345 |
346 fun stringOf r = case !r of | 346 fun stringOf r = case !r of |
347 NONE => string "NULL" | 347 NONE => string "NULL" |
348 | SOME s => box [string "\"", | 348 | SOME s => box [string "\"", |
349 string (String.toCString s), | 349 string (Prim.toCString s), |
350 string "\""] | 350 string "\""] |
351 in | 351 in |
352 app (fn s => | 352 app (fn s => |
353 case String.fields (fn ch => ch = #"=") s of | 353 case String.fields (fn ch => ch = #"=") s of |
354 [name, value] => | 354 [name, value] => |
477 string (Int.toString i), | 477 string (Int.toString i), |
478 string " = stmt;", | 478 string " = stmt;", |
479 newline, | 479 newline, |
480 | 480 |
481 string "if (mysql_stmt_prepare(stmt, \"", | 481 string "if (mysql_stmt_prepare(stmt, \"", |
482 string (String.toCString s), | 482 string (Prim.toCString s), |
483 string "\", ", | 483 string "\", ", |
484 string (Int.toString (size s)), | 484 string (Int.toString (size s)), |
485 string ")) {", | 485 string ")) {", |
486 newline, | 486 newline, |
487 box [string "char msg[1024];", | 487 box [string "char msg[1024];", |
976 box [string "uw_push_cleanup(ctx, (void (*)(void *))mysql_stmt_close, stmt);", | 976 box [string "uw_push_cleanup(ctx, (void (*)(void *))mysql_stmt_close, stmt);", |
977 newline] | 977 newline] |
978 else | 978 else |
979 box [], | 979 box [], |
980 string "if (mysql_stmt_prepare(stmt, \"", | 980 string "if (mysql_stmt_prepare(stmt, \"", |
981 string (String.toCString query), | 981 string (Prim.toCString query), |
982 string "\", ", | 982 string "\", ", |
983 string (Int.toString (size query)), | 983 string (Int.toString (size query)), |
984 string ")) {", | 984 string ")) {", |
985 newline, | 985 newline, |
986 box [string "char msg[1024];", | 986 box [string "char msg[1024];", |
1187 string (ErrorMsg.spanToString loc), | 1187 string (ErrorMsg.spanToString loc), |
1188 string ": error binding parameters\");", | 1188 string ": error binding parameters\");", |
1189 newline, | 1189 newline, |
1190 | 1190 |
1191 queryCommon {loc = loc, cols = cols, doCols = doCols, query = box [string "\"", | 1191 queryCommon {loc = loc, cols = cols, doCols = doCols, query = box [string "\"", |
1192 string (String.toCString query), | 1192 string (Prim.toCString query), |
1193 string "\""]}, | 1193 string "\""]}, |
1194 | 1194 |
1195 if nested then | 1195 if nested then |
1196 box [string "uw_pop_cleanup(ctx);", | 1196 box [string "uw_pop_cleanup(ctx);", |
1197 newline] | 1197 newline] |
1281 box [string "stmt = mysql_stmt_init(conn->conn);", | 1281 box [string "stmt = mysql_stmt_init(conn->conn);", |
1282 newline, | 1282 newline, |
1283 string "if (stmt == NULL) uw_error(ctx, FATAL, \"Out of memory allocating prepared statement\");", | 1283 string "if (stmt == NULL) uw_error(ctx, FATAL, \"Out of memory allocating prepared statement\");", |
1284 newline, | 1284 newline, |
1285 string "if (mysql_stmt_prepare(stmt, \"", | 1285 string "if (mysql_stmt_prepare(stmt, \"", |
1286 string (String.toCString dml), | 1286 string (Prim.toCString dml), |
1287 string "\", ", | 1287 string "\", ", |
1288 string (Int.toString (size dml)), | 1288 string (Int.toString (size dml)), |
1289 string ")) {", | 1289 string ")) {", |
1290 newline, | 1290 newline, |
1291 box [string "char msg[1024];", | 1291 box [string "char msg[1024];", |
1475 string (ErrorMsg.spanToString loc), | 1475 string (ErrorMsg.spanToString loc), |
1476 string ": error binding parameters\");", | 1476 string ": error binding parameters\");", |
1477 newline, | 1477 newline, |
1478 | 1478 |
1479 dmlCommon {loc = loc, dml = box [string "\"", | 1479 dmlCommon {loc = loc, dml = box [string "\"", |
1480 string (String.toCString dml), | 1480 string (Prim.toCString dml), |
1481 string "\""], mode = mode}] | 1481 string "\""], mode = mode}] |
1482 | 1482 |
1483 fun nextval {loc, seqE, seqName} = | 1483 fun nextval {loc, seqE, seqName} = |
1484 box [string "uw_conn *conn = uw_get_db(ctx);", | 1484 box [string "uw_conn *conn = uw_get_db(ctx);", |
1485 newline, | 1485 newline, |
1519 str ch | 1519 str ch |
1520 else | 1520 else |
1521 (ErrorMsg.error | 1521 (ErrorMsg.error |
1522 "Non-printing character found in SQL string literal"; | 1522 "Non-printing character found in SQL string literal"; |
1523 "")) | 1523 "")) |
1524 (String.toCString s) ^ "'" | 1524 (Prim.toCString s) ^ "'" |
1525 | 1525 |
1526 fun p_cast (s, _) = s | 1526 fun p_cast (s, _) = s |
1527 | 1527 |
1528 fun p_blank _ = "?" | 1528 fun p_blank _ = "?" |
1529 | 1529 |