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: