|
15 | 15 | primary_key/2, |
16 | 16 | is_auto_increment/3, |
17 | 17 | %primary_key_with_auto_increment_and_type/2, |
18 | | - auto_increment/2, |
19 | | - get_field_type/3, |
| 18 | + %auto_increment/2, |
| 19 | + field_type/3, |
20 | 20 | maybe_replace_tokens/2 |
21 | 21 | ]). |
22 | 22 |
|
@@ -255,56 +255,50 @@ encode(Val) -> |
255 | 255 | % _ -> undefined |
256 | 256 | % end. |
257 | 257 |
|
258 | | -auto_increment(DB, Table) -> |
259 | | - Field = primary_key(DB, Table), |
260 | | - io:format("Primary Key: ~p -> ~p~n", [Table, Field]), |
261 | | - ID = case get_field_type(DB, Table, Field) of |
262 | | - {uuid, _} -> |
263 | | - auto_increment_uuid(); |
264 | | - {text, MaxLength} -> |
265 | | - auto_increment_string(MaxLength); |
266 | | - {integer, {Min, Max}} -> |
267 | | - auto_increment_integer(Min, Max) |
268 | | - end, |
269 | | - io:format("Auto-Generated ID: ~p~n",[ID]), |
270 | | - FullTable = sql_bridge_utils:to_string(DB) ++ "." ++ sql_bridge_utils:to_string(Table), |
271 | | - case sql_bridge:exists(FullTable, Field, ID) of |
272 | | - true -> auto_increment(DB, Table); |
273 | | - false -> ID |
274 | | - end. |
275 | | - |
276 | | -auto_increment_uuid() -> |
277 | | - uuid:uuid_to_string(uuid:get_v4_urandom()). |
278 | | - |
279 | | -auto_increment_string(MaxLength) -> |
280 | | - [rand_char() || _ <- lists:seq(1, MaxLength)]. |
281 | | - |
282 | | -rand_char() -> |
283 | | - case rand:uniform(62) of |
284 | | - 10 -> $0; |
285 | | - X when X < 10 -> |
286 | | - X + $0; |
287 | | - X when X =< 36 -> |
288 | | - X - 11 + $a; |
289 | | - X -> |
290 | | - X - 37 + $A |
291 | | - end. |
292 | | - |
293 | | -auto_increment_integer(Min, Max) -> |
294 | | - Diff = Max - Min, |
295 | | - rand:uniform(Diff) + Min. |
296 | | - |
297 | | - |
298 | | --type field_type() :: text | uuid | integer. |
299 | | --type string_length() :: integer(). |
300 | | --type integer_range() :: {integer(), integer()}. |
301 | | --type field_details() :: undefined | string_length() | integer_range(). |
302 | | - |
303 | | - |
304 | | --spec get_field_type(DB :: sql_bridge:db(), |
| 258 | +%%auto_increment(DB, Table) -> |
| 259 | +%% Field = primary_key(DB, Table), |
| 260 | +%% io:format("Primary Key: ~p -> ~p~n", [Table, Field]), |
| 261 | +%% ID = case get_field_type(DB, Table, Field) of |
| 262 | +%% {uuid, _} -> |
| 263 | +%% auto_increment_uuid(); |
| 264 | +%% {text, MaxLength} -> |
| 265 | +%% auto_increment_string(MaxLength); |
| 266 | +%% {integer, {Min, Max}} -> |
| 267 | +%% auto_increment_integer(Min, Max) |
| 268 | +%% end, |
| 269 | +%% io:format("Auto-Generated ID: ~p~n",[ID]), |
| 270 | +%% FullTable = sql_bridge_utils:to_string(DB) ++ "." ++ sql_bridge_utils:to_string(Table), |
| 271 | +%% case sql_bridge:exists(FullTable, Field, ID) of |
| 272 | +%% true -> auto_increment(DB, Table); |
| 273 | +%% false -> ID |
| 274 | +%% end. |
| 275 | +%% |
| 276 | +%%auto_increment_uuid() -> |
| 277 | +%% uuid:uuid_to_string(uuid:get_v4_urandom()). |
| 278 | +%% |
| 279 | +%%auto_increment_string(MaxLength) -> |
| 280 | +%% [rand_char() || _ <- lists:seq(1, MaxLength)]. |
| 281 | +%% |
| 282 | +%%rand_char() -> |
| 283 | +%% case rand:uniform(62) of |
| 284 | +%% 10 -> $0; |
| 285 | +%% X when X < 10 -> |
| 286 | +%% X + $0; |
| 287 | +%% X when X =< 36 -> |
| 288 | +%% X - 11 + $a; |
| 289 | +%% X -> |
| 290 | +%% X - 37 + $A |
| 291 | +%% end. |
| 292 | +%% |
| 293 | +%%auto_increment_integer(Min, Max) -> |
| 294 | +%% Diff = Max - Min, |
| 295 | +%% rand:uniform(Diff) + Min. |
| 296 | + |
| 297 | +-spec field_type(DB :: sql_bridge:db(), |
305 | 298 | Table :: sql_bridge:table(), |
306 | | - Field :: sql_bridge:field()) -> undefined | {field_type(), field_details()}. |
307 | | -get_field_type(DB, Table, Field) -> |
| 299 | + Field :: sql_bridge:field()) -> undefined | sql_bridge:field_type(). |
| 300 | + |
| 301 | +field_type(DB, Table, Field) -> |
308 | 302 | [T1, T2, T3] = sql_bridge_utils:create_placeholders(3), |
309 | 303 | SQL = [<<"select column_type from information_schema.columns ">>, |
310 | 304 | <<" where table_schema=">>, T1, |
@@ -348,19 +342,20 @@ parse_field_type(FieldType) -> |
348 | 342 | end. |
349 | 343 |
|
350 | 344 | int_range(TypeUnsigned) -> |
351 | | - case TypeUnsigned of |
352 | | - {<<"tinyint">>, <<"unsigned">>} -> {0, 255}; |
353 | | - {<<"smallint">>, <<"unsigned">>} -> {0, 65535}; |
354 | | - {<<"mediumint">>, <<"unsigned">>} -> {0, 16777215}; |
355 | | - {<<"int">>, <<"unsigned">>} -> {0, 4294967295}; |
356 | | - {<<"bigint">>, <<"unsigned">>} -> {0, 18446744073709551615}; |
357 | | - |
358 | | - {<<"tinyint">>, _} -> {-128, 127}; |
359 | | - {<<"smallint">>, _} -> {-32768, 32767}; |
360 | | - {<<"mediumint">>, _} -> {-8388608, 8388607}; |
361 | | - {<<"int">>, _} -> {-2147483648, 2147483647}; |
362 | | - {<<"bigint">>, _} -> {-9223372036854775808, 9223372036854775807} |
363 | | - end. |
| 345 | + AType = case TypeUnsigned of |
| 346 | + {<<"tinyint">>, <<"unsigned">>} -> uint1; |
| 347 | + {<<"smallint">>, <<"unsigned">>} -> uint2; |
| 348 | + {<<"mediumint">>, <<"unsigned">>} -> uint3; |
| 349 | + {<<"int">>, <<"unsigned">>} -> uint4; |
| 350 | + {<<"bigint">>, <<"unsigned">>} -> uint8; |
| 351 | + |
| 352 | + {<<"tinyint">>, _} -> int1; |
| 353 | + {<<"smallint">>, _} -> int2; |
| 354 | + {<<"mediumint">>, _} -> int3; |
| 355 | + {<<"int">>, _} -> int4; |
| 356 | + {<<"bigint">>, _} -> int8 |
| 357 | + end, |
| 358 | + sql_bridge_utils:int_ranges(AType). |
364 | 359 |
|
365 | 360 |
|
366 | 361 | primary_key(DB, Table) -> |
|
0 commit comments