@@ -41,21 +41,27 @@ macro select(args...)
41
41
elseif typeof (arg) == QuoteNode
42
42
# select by name
43
43
prev = :( merge ($ prev, QueryOperators. NamedTupleUtilities. select (_, Val ($ (arg)))) )
44
+ elseif arg isa Expr && arg. head== :call && length (arg. args)== 3 && arg. args[1 ]== Symbol (" :" )
45
+ arg = string (arg)
46
+ # select by range, with multiple syntaxes supported
47
+ m_range = match (r" ^:([^,:]+) *: *:([^,:]+)" , arg)
48
+ m_range_ind = match (r" ^([0-9]+) *: *([0-9]+)" , arg)
49
+
50
+ if m_range_ind != = nothing
51
+ a = parse (Int, m_range_ind[1 ])
52
+ b = parse (Int, m_range_ind[2 ])
53
+ prev = :( merge ($ prev, QueryOperators. NamedTupleUtilities. range (_, Val (keys (_)[$ a]), Val (keys (_)[$ b]))) )
54
+ else
55
+ prev = :( merge ($ prev, QueryOperators. NamedTupleUtilities. range (_, Val ($ (QuoteNode (Symbol (m_range[1 ])))), Val ($ (QuoteNode (Symbol (m_range[2 ])))))) )
56
+ end
44
57
else
45
58
arg = string (arg)
46
59
# select by element type
47
- m_type = match (r" :\( :(.+) \ )" , arg)
60
+ m_type = match (r" ::(.+)" , arg)
48
61
# remove by name
49
62
m_rem = match (r" ^-:(.+)" , arg)
50
63
# remove by predicate functions
51
64
m_rem_pred = match (r" ^-\( *(startswith|endswith|occursin)\(\" (.+)\"\) +" , arg)
52
- # select by range, with multiple syntaxes supported
53
- m_range = match (r" ^:([^,:]+) *: *:([^,:]+)" , arg)
54
- m_range_ind = match (r" ^([0-9]+) *: *([0-9]+)" , arg)
55
- if m_range == nothing && m_range_ind == nothing
56
- m_range = match (r" ^rangeat\( :([^,]+), *:([^,]+)\) " , arg)
57
- m_range_ind = match (r" ^rangeat\( ([0-9]+), *([0-9]+)\) " , arg)
58
- end
59
65
# select by predicate functions
60
66
m_pred = match (r" ^(startswith|endswith|occursin)\(\" (.+)\"\) " , arg)
61
67
is_neg_pred = false
@@ -66,7 +72,7 @@ macro select(args...)
66
72
67
73
# TODO : eltype
68
74
if m_type != = nothing
69
- prev = :( merge ($ prev, QueryOperators. NamedTupleUtilities. oftype (_, parse (DataType, @datatype ( $ m_type[1 ])))) )
75
+ prev = :( merge ($ prev, QueryOperators. NamedTupleUtilities. oftype (_, Val ( $ ( eval ( Symbol ( m_type[1 ])) )))) )
70
76
elseif m_rem != = nothing
71
77
prev = ifelse (prev == NamedTuple (), :_ , prev)
72
78
prev = :( QueryOperators. NamedTupleUtilities. remove ($ prev, Val ($ (QuoteNode (Symbol (m_rem[1 ]))))) )
@@ -79,14 +85,6 @@ macro select(args...)
79
85
elseif m_rem_pred[1 ] == " occursin"
80
86
prev = :( QueryOperators. NamedTupleUtilities. not_occursin ($ prev, Val ($ (QuoteNode (Symbol (m_rem_pred[2 ]))))) )
81
87
end
82
- elseif m_range != = nothing || m_range_ind != = nothing
83
- if m_range_ind != = nothing
84
- a = parse (Int, m_range_ind[1 ])
85
- b = parse (Int, m_range_ind[2 ])
86
- prev = :( merge ($ prev, QueryOperators. NamedTupleUtilities. range (_, Val (keys (_)[$ a]), Val (keys (_)[$ b]))) )
87
- else
88
- prev = :( merge ($ prev, QueryOperators. NamedTupleUtilities. range (_, Val ($ (QuoteNode (Symbol (m_range[1 ])))), Val ($ (QuoteNode (Symbol (m_range[2 ])))))) )
89
- end
90
88
elseif m_pred != = nothing
91
89
if is_neg_pred == false
92
90
if m_pred[1 ] == " startswith"
@@ -188,7 +186,3 @@ macro mutate(args...)
188
186
189
187
return :( Query. @map ( $ prev ) ) |> esc
190
188
end
191
-
192
- macro datatype (str)
193
- :($ (Symbol (str)))
194
- end
0 commit comments