ddbcli 0.3.8 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +13 -11
- data/ddbcli.gemspec +1 -1
- data/etc/ddbcli-demo.gif +0 -0
- data/lib/ddbcli/cli/help.rb +11 -1
- data/lib/ddbcli/ddb-driver.rb +60 -39
- data/lib/ddbcli/ddb-parser.tab.rb +753 -568
- data/lib/ddbcli/ddb-parser.y +87 -12
- data/lib/ddbcli/version.rb +1 -1
- metadata +5 -4
data/lib/ddbcli/ddb-parser.y
CHANGED
@@ -82,6 +82,11 @@ rule
|
|
82
82
|
struct(:USE, :endpoint_or_region => val[1])
|
83
83
|
}
|
84
84
|
|
85
|
+
| USE STRING
|
86
|
+
{
|
87
|
+
struct(:USE, :endpoint_or_region => val[1])
|
88
|
+
}
|
89
|
+
|
85
90
|
create_stmt : CREATE TABLE IDENTIFIER '(' create_definition ')' capacity_clause
|
86
91
|
{
|
87
92
|
struct(:CREATE, val[4].merge(:table => val[2], :capacity => val[6]))
|
@@ -395,6 +400,18 @@ rule
|
|
395
400
|
{
|
396
401
|
struct(:UPDATE_ALL, :table => val[2], :action => val[3], :attrs => val[4], :conds => val[5], :limit => val[6])
|
397
402
|
}
|
403
|
+
| UPDATE IDENTIFIER delete_or_del identifier_list update_where_clause
|
404
|
+
{
|
405
|
+
attrs = {}
|
406
|
+
val[3].each {|i| attrs[i] = true }
|
407
|
+
struct(:UPDATE, :table => val[1], :action => val[2], :attrs => attrs, :conds => val[4])
|
408
|
+
}
|
409
|
+
| UPDATE ALL IDENTIFIER delete_or_del identifier_list scan_where_clause limit_clause
|
410
|
+
{
|
411
|
+
attrs = {}
|
412
|
+
val[4].each {|i| attrs[i] = true }
|
413
|
+
struct(:UPDATE_ALL, :table => val[2], :action => val[3], :attrs => attrs, :conds => val[5], :limit => val[6])
|
414
|
+
}
|
398
415
|
|
399
416
|
set_or_add : SET
|
400
417
|
{
|
@@ -405,6 +422,15 @@ rule
|
|
405
422
|
:ADD
|
406
423
|
}
|
407
424
|
|
425
|
+
delete_or_del : DELETE
|
426
|
+
{
|
427
|
+
:DELETE
|
428
|
+
}
|
429
|
+
| DEL
|
430
|
+
{
|
431
|
+
:DELETE
|
432
|
+
}
|
433
|
+
|
408
434
|
attr_to_update_list : attr_to_update
|
409
435
|
{
|
410
436
|
[val[0]]
|
@@ -414,7 +440,7 @@ rule
|
|
414
440
|
val[0] + [val[2]]
|
415
441
|
}
|
416
442
|
|
417
|
-
attr_to_update : IDENTIFIER EQ
|
443
|
+
attr_to_update : IDENTIFIER EQ value
|
418
444
|
{
|
419
445
|
[val[0], val[2]]
|
420
446
|
}
|
@@ -485,10 +511,51 @@ rule
|
|
485
511
|
struct(:NEXT)
|
486
512
|
}
|
487
513
|
|
488
|
-
value_or_null : value | NULL
|
489
|
-
|
490
514
|
value : single_value
|
491
515
|
| value_list
|
516
|
+
| list
|
517
|
+
| map
|
518
|
+
| BOOL
|
519
|
+
| NULL
|
520
|
+
|
521
|
+
list : '[' ']'
|
522
|
+
| '[' list_items ']'
|
523
|
+
{
|
524
|
+
val[1]
|
525
|
+
}
|
526
|
+
|
527
|
+
list_items : value
|
528
|
+
{
|
529
|
+
[val[0]]
|
530
|
+
}
|
531
|
+
| list_items ',' value
|
532
|
+
{
|
533
|
+
val[0] + [val[2]]
|
534
|
+
}
|
535
|
+
|
536
|
+
map : '{' '}'
|
537
|
+
{
|
538
|
+
{}
|
539
|
+
}
|
540
|
+
| '{' map_items '}'
|
541
|
+
{
|
542
|
+
val[1]
|
543
|
+
}
|
544
|
+
|
545
|
+
map_items : map_item
|
546
|
+
| map_items ',' map_item
|
547
|
+
{
|
548
|
+
val[0].merge(val[2])
|
549
|
+
}
|
550
|
+
|
551
|
+
map_item : IDENTIFIER ':' value
|
552
|
+
{
|
553
|
+
{val[0] => val[2]}
|
554
|
+
}
|
555
|
+
| STRING ':' value
|
556
|
+
{
|
557
|
+
{val[0] => val[2]}
|
558
|
+
}
|
492
559
|
|
493
560
|
single_value : NUMBER_VALUE
|
494
561
|
| STRING_VALUE
|
@@ -509,29 +576,29 @@ rule
|
|
509
576
|
|
510
577
|
number_list : NUMBER_VALUE
|
511
578
|
{
|
512
|
-
[val[0]]
|
579
|
+
Set[val[0]]
|
513
580
|
}
|
514
581
|
| number_list ',' NUMBER_VALUE
|
515
582
|
{
|
516
|
-
val[0] + [val[2]]
|
583
|
+
val[0] + Set[val[2]]
|
517
584
|
}
|
518
585
|
|
519
586
|
string_list : STRING_VALUE
|
520
587
|
{
|
521
|
-
[val[0]]
|
588
|
+
Set[val[0]]
|
522
589
|
}
|
523
590
|
| string_list ',' STRING_VALUE
|
524
591
|
{
|
525
|
-
val[0] + [val[2]]
|
592
|
+
val[0] + Set[val[2]]
|
526
593
|
}
|
527
594
|
|
528
595
|
binary_list : BINARY_VALUE
|
529
596
|
{
|
530
|
-
[val[0]]
|
597
|
+
Set[val[0]]
|
531
598
|
}
|
532
599
|
| binary_list ',' BINARY_VALUE
|
533
600
|
{
|
534
|
-
val[0] + [val[2]]
|
601
|
+
val[0] + Set[val[2]]
|
535
602
|
}
|
536
603
|
|
537
604
|
identifier_list : IDENTIFIER
|
@@ -547,6 +614,7 @@ rule
|
|
547
614
|
|
548
615
|
require 'strscan'
|
549
616
|
require 'ddbcli/ddb-binary'
|
617
|
+
require 'set'
|
550
618
|
|
551
619
|
module DynamoDB
|
552
620
|
|
@@ -566,6 +634,7 @@ KEYWORDS = %w(
|
|
566
634
|
CONTAINS
|
567
635
|
COUNT
|
568
636
|
DELETE
|
637
|
+
DEL
|
569
638
|
DESCRIBE
|
570
639
|
DESC
|
571
640
|
DROP
|
@@ -668,14 +737,20 @@ def scan
|
|
668
737
|
yield [:STRING_VALUE, tok.slice(1...-1).gsub(/""/, '"')]
|
669
738
|
elsif (tok = @ss.scan /\d+(?:\.\d+)?/)
|
670
739
|
yield [:NUMBER_VALUE, (tok =~ /\./ ? tok.to_f : tok.to_i)]
|
671
|
-
elsif (tok = @ss.scan /[,\(\)
|
740
|
+
elsif (tok = @ss.scan /[,\(\)\*\/\[\]\{\}:]/)
|
672
741
|
yield [tok, tok]
|
673
742
|
elsif (tok = @ss.scan /\|(?:.*)/)
|
674
743
|
yield [:RUBY_SCRIPT, tok.slice(1..-1)]
|
744
|
+
elsif (tok = @ss.scan /\|(?:.*)/)
|
745
|
+
yield [:RUBY_SCRIPT, tok.slice(1..-1)]
|
675
746
|
elsif (tok = @ss.scan /\!(?:.*)/)
|
676
747
|
yield [:SHELL_SCRIPT, tok.slice(1..-1)]
|
677
|
-
elsif (tok = @ss.scan %r|[-.0-9a-z_
|
678
|
-
|
748
|
+
elsif (tok = @ss.scan %r|[-.0-9a-z_]*|i)
|
749
|
+
if ['true', 'false'].include?(tok)
|
750
|
+
yield [:BOOL, 'true' == tok]
|
751
|
+
else
|
752
|
+
yield [:IDENTIFIER, tok]
|
753
|
+
end
|
679
754
|
else
|
680
755
|
raise_error(tok, @prev_tokens, @ss)
|
681
756
|
end
|
data/lib/ddbcli/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ddbcli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Genki Sugawara
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -81,6 +81,7 @@ files:
|
|
81
81
|
- Rakefile
|
82
82
|
- bin/ddbcli
|
83
83
|
- ddbcli.gemspec
|
84
|
+
- etc/ddbcli-demo.gif
|
84
85
|
- etc/pack_to_one_script.rb
|
85
86
|
- lib/ddbcli.rb
|
86
87
|
- lib/ddbcli/cli/evaluate.rb
|
@@ -103,7 +104,7 @@ files:
|
|
103
104
|
- spec/select_spec.rb
|
104
105
|
- spec/spec_helper.rb
|
105
106
|
- spec/update_spec.rb
|
106
|
-
homepage: https://
|
107
|
+
homepage: https://github.com/winebarrel/ddbcli
|
107
108
|
licenses:
|
108
109
|
- MIT
|
109
110
|
metadata: {}
|
@@ -123,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
123
124
|
version: '0'
|
124
125
|
requirements: []
|
125
126
|
rubyforge_project:
|
126
|
-
rubygems_version: 2.
|
127
|
+
rubygems_version: 2.4.1
|
127
128
|
signing_key:
|
128
129
|
specification_version: 4
|
129
130
|
summary: ddbcli is an interactive command-line client of Amazon DynamoDB.
|