SQL 用の文字列エスケープ処理を行う: sql_quoting()
char *sql_quoting(char *src
, SQL_quoting_qualifier_t qualifier
, char quote_char
, char escape_code
, char *dst
, size_t dst_sz
)
src には SQL エスケープ処理を行う文字列のアドレスを指定します。
qualifier には SQL エスケープ処理の詳細をビットの論理輪で指定できます。指定できる処理詳細は以下のようになります。
- SQL_quoting_default:
デフォルトの処理動作を行います。
文字列中の引用符 (quote_char と同じ文字コード) は 2 回つづけて出力されます。
制御文字コード ('\n', '\r') はエスケープ処理しません。
SQL パターン・マッチ文字 ('%', '_') はエスケープ処理しません。
出力結果の文字列は引用符文字で囲まれません。
- SQL_quoting_with_backslash:
文字列中の引用符をバックスラッシュ文字 '\\' あるいは escape_code に指定された文字でエスケープ処理します。
- SQL_quoting_escape_control_codes:
MySQL などを使用している場合に、文字列中の制御文字コード ('\n', '\r') をバックスラッシュ文字あるいは escape_code に指定された文字でエスケープ処理します。
- SQL_quoting_escape_pattern_codes:
文字列中の SQL パターン・マッチ文字 ('%', '_') をバックスラッシュ文字あるいは escape_code に指定された文字でエスケープ処理します。
- SQL_quoting_enclose_result:
出力文字列を quote_char で指定された引用符文字 (' または ") で囲みます。
- SQL_quoting_do_not_escape_quots:
出力文字列を静的な埋め込みSQLに使用する場合に指定します。引用符 (' か ") をエスケープしません。
- SQL_quoting_escape_vertical_bar:
MS Jet エンジンを使用 (.MDB 拡張子ファイルを使用している) 場合に垂直バー (|) をエスケープするために指定します。
quote_char には SQL ステートメントで使用する文字列リテラルの終端文字を一重引用符 ' あるいは二重引用符 " のいずれかで指定します。
dst にはエスケープ処理の結果文字列を出力するバッファのアドレスを指定します。
escape_code は qualifier の SQL_quoting_escape_pattern_codes ビットが ON になっている場合に、SQL LIKE 演算子の ESCAPE 句に指定する文字コードを指定します。SQL LIKE 演算パターンマッチ文字 '%' と '_' およびエスケープ文字それ自身の直前に escape_code に指定された文字が挿入されます。qualifier に SQL_quoting_escape_vertical_bar ビットも ON にすると、垂直バー '|' の直前にも escape_code に指定された文字が挿入されます。qualifier の SQL_quoting_escape_pattern_codes ビットが ON になっていて escape_code が nil 文字 '\0' であった場合は、バックスラッシュ文字 '\\' がエスケープ文字になります。指定できる文字コードは '\0', '%', '_', '\'', '"', '|' 以外の文字コード (qualifier の SQL_quoting_escape_vertical_bar ビットが OFF であれば、'|' は指定可能) です。
dst_sz には dst の指すバッファのサイズを指定します。
正常終了した場合、dst と同じアドレスが戻り値になります。なんらかのエラーが発生した場合は NULL が戻り値になります。発生したエラーの詳細は以下のように errno に出力されます。
- EINVAL (= 22) : 不正な引数が渡された場合
- EMSGSIZE (= 122) : 出力先のバッファ・サイズが不足している場合