Skip to content

Commit 8cdbccc

Browse files
committed
todo: floats are losing precision, need to be fixed, issue is when 8byte long floats need to be stored in sql
1 parent e80dfee commit 8cdbccc

File tree

4 files changed

+9
-45
lines changed

4 files changed

+9
-45
lines changed

lib/tds/types.ex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1022,11 +1022,11 @@ defmodule Tds.Types do
10221022
String.length(p)
10231023
end
10241024
if precision <= 7 + 1 do
1025-
<<0x04, value::little-float-size(32)>>
1025+
<<0x04, value::little-float-32>>
10261026
else
10271027
# up to 15 digits of precision https://docs.microsoft.com/en-us/sql/t-sql/data-types/float-and-real-transact-sql
1028-
<<0x08, value::little-float-size(64)>>
1029-
end
1028+
<<0x08, value::little-float-64>>
1029+
end
10301030
end
10311031

10321032
@doc """

lib/tds/utils.ex

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
defmodule Tds.Utils do
22
require Logger
3-
#alias Tds.Connection
43

54
def to_hex_list(x) when is_list(x) do
65
Enum.map x, &( Base.encode16(<<&1>>))
@@ -58,43 +57,8 @@ defmodule Tds.Utils do
5857
end
5958
end
6059

61-
6260
def reply(reply, {_, _} = from) do
6361
GenServer.reply(from, reply)
6462
true
6563
end
66-
67-
# Connection.next is undefined
68-
# def ready(%{queue: queue} = s) do
69-
# queue =
70-
# case :queue.out(queue) do
71-
# {{:value, {_, _, ref}}, q} ->
72-
# Process.demonitor(ref)
73-
# q
74-
# {:empty, q} ->
75-
# q
76-
# end
77-
# Connection.next(%{s | statement: "", queue: queue, state: :ready})
78-
# end
79-
80-
# def pow10(num,0), do: num
81-
# def pow10(num,pow) when pow > 0 do
82-
# pow10(10*num, pow - 1)
83-
# end
84-
85-
# def pow10(num,pow) when pow < 0 do
86-
# pow10(num/10, pow + 1)
87-
# end
88-
89-
# def pow(_, 0), do: 1
90-
# def pow(a, 1), do: a
91-
92-
# def pow(a, n) when rem(n, 2) === 0 do
93-
# tmp = pow(a, div(n, 2))
94-
# tmp * tmp
95-
# end
96-
97-
# def pow(a, n) do
98-
# a * pow(a, n-1)
99-
# end
10064
end

test/tds_issues.exs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
defmodule TdsTest do
2-
use ExUnit.Case, async: true
3-
require Logger
1+
defmodule TdsIssuesTest do
42
import Tds.TestHelper
3+
require Logger
4+
use ExUnit.Case, async: true
55

66
@tag timeout: 50000
77

@@ -30,7 +30,7 @@ defmodule TdsTest do
3030
%Tds.Parameter{name: "@3", value: {{2016, 12, 20}, {23, 59, 23, 0}}}])
3131

3232
assert :ok == res
33-
assert [[val]] = query("SELECT [total] FROM hades_sealed_cfdis WHERE id in (select max(id) from hades_sealed_cfdis)", [])
33+
assert [[val]] == IO.inspect(query("SELECT [total] FROM hades_sealed_cfdis WHERE id in (select max(id) from hades_sealed_cfdis)", []))
3434
end
3535
Enum.flat_map(1..17, &([1/&1, -1/&1]))
3636
|> Enum.each(f)

test/test_helper.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
ExUnit.start()
2-
31
defmodule Tds.TestHelper do
42
require Logger
53
defmacro query(statement, params, opts \\ []) do
@@ -39,3 +37,5 @@ end
3937

4038
Application.get_env(:tds, :opts)
4139
|> Tds.TestHelper.sqlcmd("IF NOT EXISTS(SELECT * FROM sys.databases where name = 'test') BEGIN CREATE DATABASE [test]; END;")
40+
41+
ExUnit.start()

0 commit comments

Comments
 (0)