Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MethodError: no method matching isdone #66

Closed
xgdgsc opened this issue Jan 16, 2019 · 9 comments
Closed

MethodError: no method matching isdone #66

xgdgsc opened this issue Jan 16, 2019 · 9 comments

Comments

@xgdgsc
Copy link

xgdgsc commented Jan 16, 2019

I get errors like this when trying to insert values.

MethodError: no method matching isdone(::NamedTuple{(:symbol, :col1, :col2, :col3),Tuple{String,Float64,Float64,Float64}}, ::Int64, ::Int64)
You may have intended to import Base.isdone

And in the example doc page at https://github.com/invenia/LibPQ.jl/blob/master/docs/src/index.md , using NamedTuples would result error because it has been in Base. Maybe it could be clearer if you update the doc and provide an example of data to insert at the Insertion section.

@xgdgsc
Copy link
Author

xgdgsc commented Mar 20, 2019

I still get the MethodError of isdone as intially commented using 0.7.0 version of this package and julia 1.1.0, what could be the reason?

@iamed2
Copy link
Collaborator

iamed2 commented Mar 20, 2019

Could you give a stack trace for the error?

@xgdgsc
Copy link
Author

xgdgsc commented Mar 21, 2019

datat = (time = 63240480000000, symbol = "000001", macd = 0.13217593007179484, diff = 0.11147362266779684, dea = 0.020702307403998005)
Data.stream!(
    datat,
    LibPQ.Statement,
    conn,
    "INSERT INTO macd (time, symbol, macd, diff, dea) VALUES (\$1, \$2, \$3, \$4, \$5);",
)
MethodError: no method matching isdone(::NamedTuple{(:time, :symbol, :macd, :diff, :dea),Tuple{Int64,String,Float64,Float64,Float64}}, ::Int64, ::Int64)
You may have intended to import Base.isdone
Closest candidates are:
  isdone(::Any, ::Any, ::Any, !Matched::Any, !Matched::Any) at /home/gsc/.julia/packages/DataStreams/saxcP/src/DataStreams.jl:152
  isdone(!Matched::Array{T,1} where T<:NamedTuple, ::Any, ::Any) at /home/gsc/.julia/packages/DataStreams/saxcP/src/namedtuples.jl:6
  isdone(!Matched::Array{T,1} where T<:NamedTuple, ::Any, ::Any, !Matched::Any, !Matched::Any) at /home/gsc/.julia/packages/DataStreams/saxcP/src/namedtuples.jl:4
  ...

Stacktrace:
 [1] isdone(::NamedTuple{(:time, :symbol, :macd, :diff, :dea),Tuple{Int64,String,Float64,Float64,Float64}}, ::Int64, ::Int64, ::Int64, ::Int64) at /home/gsc/.julia/packages/DataStreams/saxcP/src/DataStreams.jl:152
 [2] macro expansion at /home/gsc/.julia/packages/DataStreams/saxcP/src/query.jl:628 [inlined]
 [3] stream!(::NamedTuple{(:time, :symbol, :macd, :diff, :dea),Tuple{Int64,String,Float64,Float64,Float64}}, ::DataStreams.Data.Query{0x01,Tuple{DataStreams.Data.QueryColumn{0x01,Int64,1,1,:time,nothing,()},DataStreams.Data.QueryColumn{0x01,Char,2,2,:symbol,nothing,()},DataStreams.Data.QueryColumn{0x01,Float64,3,3,:macd,nothing,()},DataStreams.Data.QueryColumn{0x01,Float64,4,4,:diff,nothing,()},DataStreams.Data.QueryColumn{0x01,Float64,5,5,:dea,nothing,()}},(),nothing,nothing}, ::Type{DataStreams.Data.Row}, ::LibPQ.Statement, ::DataStreams.Data.Schema{true,Tuple{Int64,Char,Float64,Float64,Float64}}, ::Int64) at /home/gsc/.julia/packages/DataStreams/saxcP/src/query.jl:618
 [4] #stream!#113(::Bool, ::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::Function, ::NamedTuple{(:time, :symbol, :macd, :diff, :dea),Tuple{Int64,String,Float64,Float64,Float64}}, ::DataStreams.Data.Query{0x01,Tuple{DataStreams.Data.QueryColumn{0x01,Int64,1,1,:time,nothing,()},DataStreams.Data.QueryColumn{0x01,Char,2,2,:symbol,nothing,()},DataStreams.Data.QueryColumn{0x01,Float64,3,3,:macd,nothing,()},DataStreams.Data.QueryColumn{0x01,Float64,4,4,:diff,nothing,()},DataStreams.Data.QueryColumn{0x01,Float64,5,5,:dea,nothing,()}},(),nothing,nothing}, ::Type{LibPQ.Statement}, ::LibPQ.Connection, ::Vararg{Any,N} where N) at /home/gsc/.julia/packages/DataStreams/saxcP/src/query.jl:588
 [5] (::getfield(DataStreams.Data, Symbol("#kw##stream!")))(::NamedTuple{(:append,),Tuple{Bool}}, ::typeof(DataStreams.Data.stream!), ::NamedTuple{(:time, :symbol, :macd, :diff, :dea),Tuple{Int64,String,Float64,Float64,Float64}}, ::DataStreams.Data.Query{0x01,Tuple{DataStreams.Data.QueryColumn{0x01,Int64,1,1,:time,nothing,()},DataStreams.Data.QueryColumn{0x01,Char,2,2,:symbol,nothing,()},DataStreams.Data.QueryColumn{0x01,Float64,3,3,:macd,nothing,()},DataStreams.Data.QueryColumn{0x01,Float64,4,4,:diff,nothing,()},DataStreams.Data.QueryColumn{0x01,Float64,5,5,:dea,nothing,()}},(),nothing,nothing}, ::Type{LibPQ.Statement}, ::LibPQ.Connection, ::Vararg{Any,N} where N) at ./none:0
 [6] #stream!#111(::Bool, ::Dict{Int64,Function}, ::Function, ::Array{Any,1}, ::Array{Any,1}, ::Nothing, ::Nothing, ::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::typeof(DataStreams.Data.stream!), ::NamedTuple{(:time, :symbol, :macd, :diff, :dea),Tuple{Int64,String,Float64,Float64,Float64}}, ::Type{LibPQ.Statement}, ::LibPQ.Connection, ::Vararg{Any,N} where N) at /home/gsc/.julia/packages/DataStreams/saxcP/src/query.jl:538
 [7] stream!(::NamedTuple{(:time, :symbol, :macd, :diff, :dea),Tuple{Int64,String,Float64,Float64,Float64}}, ::Type{LibPQ.Statement}, ::LibPQ.Connection, ::String) at /home/gsc/.julia/packages/DataStreams/saxcP/src/query.jl:516
 [8] top-level scope at In[40]:1

@iamed2
Copy link
Collaborator

iamed2 commented Mar 21, 2019

Ah, DataStreams requires your data to be either a Vector of NamedTuples or a NamedTuple of Vectors. The easiest thing in your case is to just do:

Data.stream!(
    [datat],
    LibPQ.Statement,
    conn,
    "INSERT INTO macd (time, symbol, macd, diff, dea) VALUES (\$1, \$2, \$3, \$4, \$5);",
)

@xgdgsc
Copy link
Author

xgdgsc commented Apr 1, 2019

Thanks. It works!

@iamed2
Copy link
Collaborator

iamed2 commented Apr 1, 2019

Great!

@xgdgsc
Copy link
Author

xgdgsc commented Apr 8, 2019

When there is only one datat of NamedTuple it works. If there is an array of NamedTuples it would through me an error like:

MethodError: no method matching schema(::Array{Any,1})
Closest candidates are:
  schema(::S, !Matched::DataStreams.Data.Query{code,columns,e,limit,offset}) where {code, S, columns, e, limit, offset} at /home/gsc/.julia/packages/DataStreams/saxcP/src/query.jl:217
  schema(::S, !Matched::DataStreams.Data.Query{code,columns,e,limit,offset}, !Matched::Any) where {code, S, columns, e, limit, offset} at /home/gsc/.julia/packages/DataStreams/saxcP/src/query.jl:217
  schema(!Matched::LibPQ.Result) at /home/gsc/.julia/packages/LibPQ/LODsS/src/datastreams.jl:4
  ...

Stacktrace:
 [1] #stream!#111(::Bool, ::Dict{Int64,Function}, ::Function, ::Array{Any,1}, ::Array{Any,1}, ::Nothing, ::Nothing, ::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::typeof(DataStreams.Data.stream!), ::Array{Any,1}, ::Type{LibPQ.Statement}, ::LibPQ.Connection, ::Vararg{Any,N} where N) at /home/gsc/.julia/packages/DataStreams/saxcP/src/query.jl:534
 [2] stream!(::Array{Any,1}, ::Type{LibPQ.Statement}, ::LibPQ.Connection, ::String) at /home/gsc/.julia/packages/DataStreams/saxcP/src/query.jl:516
 [3] top-level scope at ./In[114]:22

when I run

Data.stream!(
                data_list,
                LibPQ.Statement,
                conn,
                "INSERT INTO " * dbName * string(param) * " (time, symbol, sma) 
                VALUES (\$1, \$2, \$3) ON CONFLICT (time, symbol) DO NOTHING;")

When I declare data_list as data_list = Vector(undef, 0). What is the correct way to use it as " Vector of NamedTuples " ?

@iamed2
Copy link
Collaborator

iamed2 commented Apr 8, 2019

The eltype of the Vector needs to be a specific NamedTuple type, e.g. you'll need

Vector{NamedTuple{(:time, :symbol, :macd, :diff, :dea),Tuple{Int64,String,Float64,Float64,Float64}}}(undef, 0)

@xgdgsc
Copy link
Author

xgdgsc commented Apr 8, 2019

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants