diff options
Diffstat (limited to 'src/mod_vcard_sql.erl')
-rw-r--r-- | src/mod_vcard_sql.erl | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/src/mod_vcard_sql.erl b/src/mod_vcard_sql.erl index 6b604161..5c195fbf 100644 --- a/src/mod_vcard_sql.erl +++ b/src/mod_vcard_sql.erl @@ -263,10 +263,11 @@ make_matchspec(LServer, Data) -> filter_fields([], Match, LServer) -> case ejabberd_sql:use_new_schema() of true -> - SServer = ejabberd_sql:escape(LServer), + SQLType = ejabberd_option:sql_type(LServer), + SServer = ejabberd_sql:to_string_literal(SQLType, LServer), case Match of - <<"">> -> [<<"where server_host='">>, SServer, <<"'">>]; - _ -> [<<" where server_host='">>, SServer, <<"' and ">>, Match] + <<"">> -> [<<"where server_host=">>, SServer]; + _ -> [<<" where server_host=">>, SServer, <<" and ">>, Match] end; false -> case Match of @@ -278,26 +279,26 @@ filter_fields([{SVar, [Val]} | Ds], Match, LServer) when is_binary(Val) and (Val /= <<"">>) -> LVal = mod_vcard:string2lower(Val), NewMatch = case SVar of - <<"user">> -> make_val(Match, <<"lusername">>, LVal); - <<"fn">> -> make_val(Match, <<"lfn">>, LVal); - <<"last">> -> make_val(Match, <<"lfamily">>, LVal); - <<"first">> -> make_val(Match, <<"lgiven">>, LVal); - <<"middle">> -> make_val(Match, <<"lmiddle">>, LVal); - <<"nick">> -> make_val(Match, <<"lnickname">>, LVal); - <<"bday">> -> make_val(Match, <<"lbday">>, LVal); - <<"ctry">> -> make_val(Match, <<"lctry">>, LVal); + <<"user">> -> make_val(LServer, Match, <<"lusername">>, LVal); + <<"fn">> -> make_val(LServer, Match, <<"lfn">>, LVal); + <<"last">> -> make_val(LServer, Match, <<"lfamily">>, LVal); + <<"first">> -> make_val(LServer, Match, <<"lgiven">>, LVal); + <<"middle">> -> make_val(LServer, Match, <<"lmiddle">>, LVal); + <<"nick">> -> make_val(LServer, Match, <<"lnickname">>, LVal); + <<"bday">> -> make_val(LServer, Match, <<"lbday">>, LVal); + <<"ctry">> -> make_val(LServer, Match, <<"lctry">>, LVal); <<"locality">> -> - make_val(Match, <<"llocality">>, LVal); - <<"email">> -> make_val(Match, <<"lemail">>, LVal); - <<"orgname">> -> make_val(Match, <<"lorgname">>, LVal); - <<"orgunit">> -> make_val(Match, <<"lorgunit">>, LVal); + make_val(LServer, Match, <<"llocality">>, LVal); + <<"email">> -> make_val(LServer, Match, <<"lemail">>, LVal); + <<"orgname">> -> make_val(LServer, Match, <<"lorgname">>, LVal); + <<"orgunit">> -> make_val(LServer, Match, <<"lorgunit">>, LVal); _ -> Match end, filter_fields(Ds, NewMatch, LServer); filter_fields([_ | Ds], Match, LServer) -> filter_fields(Ds, Match, LServer). -make_val(Match, Field, Val) -> +make_val(LServer, Match, Field, Val) -> Condition = case str:suffix(<<"*">>, Val) of true -> Val1 = str:substr(Val, 1, byte_size(Val) - 1), @@ -307,8 +308,9 @@ make_val(Match, Field, Val) -> "%">>, [Field, <<" LIKE '">>, SVal, <<"' ESCAPE '^'">>]; _ -> - SVal = ejabberd_sql:escape(Val), - [Field, <<" = '">>, SVal, <<"'">>] + SQLType = ejabberd_option:sql_type(LServer), + SVal = ejabberd_sql:to_string_literal(SQLType, Val), + [Field, <<" = ">>, SVal] end, case Match of <<"">> -> Condition; |