From 9da4fc96495d52fc240fb461d677d18caac7a5d2 Mon Sep 17 00:00:00 2001
From: Alexander Belopolsky
Date: Wed, 11 Oct 2017 15:46:42 -0400
Subject: [PATCH 1/2] ENH Implemented K_Table(iter) for the unknown size
iterators.
---
src/table.jl | 24 ++++++++++++++++++++++++
test/table-tests.jl | 2 ++
2 files changed, 26 insertions(+)
diff --git a/src/table.jl b/src/table.jl
index c749c0e..9a28bf9 100644
--- a/src/table.jl
+++ b/src/table.jl
@@ -105,6 +105,14 @@ Base.done{T,TS}(iter::K_Table_Iter{T,TS}, state) = state > length(iter)
function K_Table(source)
iter = TableTraits.getiterator(source)
+ _table(Base.iteratorsize(iter), iter)
+end
+
+_table(::Base.IsInfinite, iter) = error("infinite source")
+_table(::Base.HasShape, iter) = _table_prealloc(iter)
+_table(::Base.HasLength, iter) = _table_prealloc(iter)
+
+function _table_prealloc(iter)
x = K_Table(eltype(iter), length(iter))
for (i, row) in enumerate(iter)
for (j, v) in enumerate(row)
@@ -113,3 +121,19 @@ function K_Table(source)
end
x
end
+
+function _raw_eltype(T)
+ exprs = [Expr(:(::), n, eltype(t))
+ for (n, t) in zip(fieldnames(T), T.types)]
+ NamedTuples.make_tuple(exprs)
+end
+
+function _table(::Base.SizeUnknown, iter)
+ x = K_Table(eltype(iter), 0)
+ for row in iter
+ for (i, v) in enumerate(row)
+ Q.coldata(x)[i] = push!(x[i], row[i])
+ end
+ end
+ x
+end
diff --git a/test/table-tests.jl b/test/table-tests.jl
index e492961..7f7b898 100644
--- a/test/table-tests.jl
+++ b/test/table-tests.jl
@@ -1,5 +1,6 @@
using TableTraits
using NamedTuples
+import IterableTables
@testset "table tests" begin
let x = K_Table(a=[1, 2])
@@ -49,4 +50,5 @@ end
]
end
@test K_Table([@NT(a=1), @NT(a=2)]) == DataFrame(a=[1,2])
+ @test K_Table(@NT(a=i) for i in 1:3 if i != 2) == DataFrame(a=[1,3])
end
From f4913f732f48aacf9e6c913bc4eb00c269bac4ea Mon Sep 17 00:00:00 2001
From: Alexander Belopolsky
Date: Wed, 18 Oct 2017 19:09:42 -0400
Subject: [PATCH 2/2] BLD Install IterableTables package for testing.
---
.travis.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.travis.yml b/.travis.yml
index ca1a69b..6c248e7 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -47,6 +47,7 @@ install:
- source ./.travis/install.sh
before_script:
- echo '-1"kdb+ "," "sv string .z.o,.z.K,.z.k;exit 0' | $HOME/q/?32/q
+ - julia -e 'Pkg.add("IterableTables")'
- julia -e 'versioninfo()'
## uncomment the following lines to override the default test script
script: