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