cmis_server 1.0.3
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 +7 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +51 -0
- data/app/assets/javascripts/cmis_server/application.js +13 -0
- data/app/assets/stylesheets/cmis_server/application.css +15 -0
- data/app/controllers/cmis_server/application_controller.rb +19 -0
- data/app/controllers/cmis_server/atom_pub/base_controller.rb +23 -0
- data/app/controllers/cmis_server/atom_pub/bulk_controller.rb +302 -0
- data/app/controllers/cmis_server/atom_pub/content_controller.rb +178 -0
- data/app/controllers/cmis_server/atom_pub/entries_controller.rb +41 -0
- data/app/controllers/cmis_server/atom_pub/folder_collection_controller.rb +70 -0
- data/app/controllers/cmis_server/atom_pub/query_controller.rb +138 -0
- data/app/controllers/cmis_server/atom_pub/repository_controller.rb +75 -0
- data/app/controllers/cmis_server/atom_pub/secondary_types_controller.rb +149 -0
- data/app/controllers/cmis_server/atom_pub/service_documents_controller.rb +34 -0
- data/app/controllers/cmis_server/atom_pub/types_controller.rb +229 -0
- data/app/controllers/cmis_server/atom_pub/uri_templates_controller.rb +58 -0
- data/app/controllers/concerns/cmis_server/atom_pub/repository_scopable.rb +18 -0
- data/app/helpers/cmis_server/application_helper.rb +31 -0
- data/app/models/cmis_server/application_record.rb +5 -0
- data/app/services/cmis_server/bulk_update_service.rb +69 -0
- data/app/services/cmis_server/content_stream_service.rb +75 -0
- data/app/services/cmis_server/discovery_service.rb +31 -0
- data/app/services/cmis_server/navigation_service.rb +43 -0
- data/app/services/cmis_server/object_service.rb +176 -0
- data/app/services/cmis_server/repository_service.rb +40 -0
- data/app/services/cmis_server/secondary_type_service.rb +120 -0
- data/app/services/cmis_server/type_management_service.rb +117 -0
- data/app/views/cmis_server/atom_pub/bulk_update_feed.atom.builder +47 -0
- data/app/views/cmis_server/atom_pub/entries/_cmis_document_links.atom_entry.builder +0 -0
- data/app/views/cmis_server/atom_pub/entries/_cmis_folder_links.atom_entry.builder +3 -0
- data/app/views/cmis_server/atom_pub/entries/_object_entry.atom_entry.builder +64 -0
- data/app/views/cmis_server/atom_pub/entries/_property.atom_entry.builder +8 -0
- data/app/views/cmis_server/atom_pub/entries/object_entry.atom_entry.builder +1 -0
- data/app/views/cmis_server/atom_pub/entries/type_entry.atom_entry.builder +59 -0
- data/app/views/cmis_server/atom_pub/feeds/_feed_entry.atom_feed.builder +1 -0
- data/app/views/cmis_server/atom_pub/feeds/feed.atom_feed.builder +30 -0
- data/app/views/cmis_server/atom_pub/service_documents/_uri_template.atom_service.builder +5 -0
- data/app/views/cmis_server/atom_pub/service_documents/_workspace.atom_service.builder +89 -0
- data/app/views/cmis_server/atom_pub/service_documents/service_document.atom_service.builder +1 -0
- data/app/views/cmis_server/atom_pub/shared/_collection.xml.builder +7 -0
- data/app/views/cmis_server/atom_pub/shared/atom_entry_layout.atom_entry.builder +0 -0
- data/app/views/cmis_server/atom_pub/type_entry.atom.builder +69 -0
- data/app/views/cmis_server/atom_pub/types_feed.atom.builder +91 -0
- data/app/views/layouts/cmis_server/application.atom_entry.builder +2 -0
- data/app/views/layouts/cmis_server/application.atom_feed.builder +3 -0
- data/app/views/layouts/cmis_server/application.atom_service.builder +10 -0
- data/app/views/layouts/cmis_server/application.html.erb +14 -0
- data/config/routes.rb +49 -0
- data/lib/cmis_server/atom_pub/entry_parser.rb +72 -0
- data/lib/cmis_server/base_objects/base_type.rb +128 -0
- data/lib/cmis_server/base_objects/document.rb +68 -0
- data/lib/cmis_server/base_objects/folder.rb +104 -0
- data/lib/cmis_server/base_objects/item.rb +25 -0
- data/lib/cmis_server/base_types.rb +123 -0
- data/lib/cmis_server/cmis_object.rb +190 -0
- data/lib/cmis_server/configuration.rb +43 -0
- data/lib/cmis_server/constants.rb +8 -0
- data/lib/cmis_server/content_stream.rb +52 -0
- data/lib/cmis_server/context.rb +11 -0
- data/lib/cmis_server/document_object.rb +12 -0
- data/lib/cmis_server/document_type.rb +67 -0
- data/lib/cmis_server/engine.rb +60 -0
- data/lib/cmis_server/exceptions.rb +185 -0
- data/lib/cmis_server/folder_object.rb +18 -0
- data/lib/cmis_server/folder_type.rb +34 -0
- data/lib/cmis_server/id.rb +18 -0
- data/lib/cmis_server/item_adapter.rb +26 -0
- data/lib/cmis_server/item_object.rb +15 -0
- data/lib/cmis_server/item_type.rb +7 -0
- data/lib/cmis_server/object_adapter.rb +79 -0
- data/lib/cmis_server/property.rb +29 -0
- data/lib/cmis_server/property_definition.rb +118 -0
- data/lib/cmis_server/query/parser.output +2250 -0
- data/lib/cmis_server/query/parser.racc +222 -0
- data/lib/cmis_server/query/parser.racc.rb +1039 -0
- data/lib/cmis_server/query/parser.rex +114 -0
- data/lib/cmis_server/query/parser.rex.rb +238 -0
- data/lib/cmis_server/query/statement.rb +395 -0
- data/lib/cmis_server/query.rb +2 -0
- data/lib/cmis_server/renderable_collection.rb +45 -0
- data/lib/cmis_server/renderable_object.rb +49 -0
- data/lib/cmis_server/repository.rb +91 -0
- data/lib/cmis_server/secondary_type.rb +11 -0
- data/lib/cmis_server/type.rb +62 -0
- data/lib/cmis_server/type_registry.rb +115 -0
- data/lib/cmis_server/version.rb +4 -0
- data/lib/cmis_server.rb +22 -0
- data/lib/tasks/cmis_server_tasks.rake +4 -0
- data/test/cmis_server_test.rb +7 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +29 -0
- data/test/dummy/config/application.rb +26 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +41 -0
- data/test/dummy/config/environments/production.rb +79 -0
- data/test/dummy/config/environments/test.rb +42 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/to_time_preserves_timezone.rb +10 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/integration/navigation_test.rb +8 -0
- data/test/services/bulk_update_service_test.rb +121 -0
- data/test/services/content_stream_service_test.rb +176 -0
- data/test/services/secondary_type_service_test.rb +174 -0
- data/test/services/type_management_service_test.rb +146 -0
- data/test/test_helper.rb +16 -0
- metadata +326 -0
@@ -0,0 +1,222 @@
|
|
1
|
+
class CmisServer::Query::Parser
|
2
|
+
|
3
|
+
rule
|
4
|
+
# dynamic sql
|
5
|
+
|
6
|
+
query_statement
|
7
|
+
: simple_table order_by_clause {result = CmisServer::Query::Statement::CmisQuery.new(val[0], val[1])}
|
8
|
+
|
9
|
+
simple_table
|
10
|
+
: SELECT select_list from_clause where_clause {result = CmisServer::Query::Statement::Select.new(val[1],val[2],val[3])}
|
11
|
+
|
12
|
+
select_list
|
13
|
+
: asterisk { result = CmisServer::Query::Statement::All.new }
|
14
|
+
| select_sublist { result = CmisServer::Query::Statement::SelectList.new(val[0]) }
|
15
|
+
|
16
|
+
select_sublist
|
17
|
+
: derived_column comma select_sublist { result = Array(val[0]) + Array(val[2]) }
|
18
|
+
| derived_column
|
19
|
+
|
20
|
+
derived_column
|
21
|
+
: qualifier period asterisk { result = CmisServer::Query::Statement::All.new(val[0]) }
|
22
|
+
| value_expression AS column_name { result = CmisServer::Query::Statement::As.new(val[0], val[2]) }
|
23
|
+
| value_expression column_name { result = CmisServer::Query::Statement::As.new(val[0], val[1]) }
|
24
|
+
| value_expression
|
25
|
+
|
26
|
+
value_expression
|
27
|
+
: numeric_value_function
|
28
|
+
| column_reference
|
29
|
+
|
30
|
+
numeric_value_function
|
31
|
+
: SCORE left_paren right_paren { result = CmisServer::Query::Statement::Score.new }
|
32
|
+
|
33
|
+
column_reference
|
34
|
+
: qualifier period column_name { result = CmisServer::Query::Statement::QualifiedColumn.new(val[0], val[2]) }
|
35
|
+
| column_name
|
36
|
+
|
37
|
+
|
38
|
+
from_clause
|
39
|
+
: FROM table_reference { result = CmisServer::Query::Statement::FromClause.new(val[1]) }
|
40
|
+
|
41
|
+
table_reference
|
42
|
+
: table_name AS correlation_name {result = CmisServer::Query::Statement::As.new(val[0], val[2]) }
|
43
|
+
| table_name correlation_name {result = CmisServer::Query::Statement::As.new(val[0], val[2]) }
|
44
|
+
| table_name
|
45
|
+
| joined_table
|
46
|
+
|
47
|
+
joined_table
|
48
|
+
: left_paren joined_table right_paren
|
49
|
+
| table_reference JOIN table_reference join_specification { result = CmisServer::Query::Statement::InnerJoin.new(val[0], val[3], val[4]) } #Default
|
50
|
+
| table_reference join_type JOIN table_reference join_specification { result = val[1].new(val[0], val[3], val[4]) }
|
51
|
+
|
52
|
+
join_type
|
53
|
+
: INNER { result = CmisServer::Query::Statement::InnerJoin}
|
54
|
+
| LEFT OUTER { result = CmisServer::Query::Statement::LeftOuterJoin }
|
55
|
+
| LEFT { result = CmisServer::Query::Statement::LeftJoin }
|
56
|
+
|
57
|
+
join_specification
|
58
|
+
: ON column_reference equals_operator column_reference {result = CmisServer::Query::Statement::Equals.new(val[1], val[3])}
|
59
|
+
|
60
|
+
where_clause
|
61
|
+
: #No_action
|
62
|
+
| WHERE search_condition { result = CmisServer::Query::Statement::WhereClause.new(val[1]) }
|
63
|
+
|
64
|
+
search_condition
|
65
|
+
: search_condition OR boolean_term { result = CmisServer::Query::Statement::Or.new(val[0], val[2]) }
|
66
|
+
| boolean_term
|
67
|
+
|
68
|
+
boolean_term
|
69
|
+
: boolean_term AND boolean_factor { result = CmisServer::Query::Statement::And.new(val[0], val[2]) }
|
70
|
+
| boolean_factor
|
71
|
+
|
72
|
+
boolean_factor
|
73
|
+
: NOT boolean_test { result = CmisServer::Query::Statement::Not.new(val[1]) }
|
74
|
+
| boolean_test
|
75
|
+
|
76
|
+
boolean_test
|
77
|
+
: boolean_primary
|
78
|
+
|
79
|
+
boolean_primary
|
80
|
+
: predicate
|
81
|
+
| left_paren search_condition right_paren { result = val[1] }
|
82
|
+
|
83
|
+
predicate
|
84
|
+
: quantified_comparison_predicate
|
85
|
+
| comparison_predicate
|
86
|
+
| folder_predicate
|
87
|
+
| in_predicate
|
88
|
+
| like_predicate
|
89
|
+
| null_predicate
|
90
|
+
| quantified_in_predicate
|
91
|
+
#TODO | text_search_predicate
|
92
|
+
|
93
|
+
comparison_predicate
|
94
|
+
: value_expression equals_operator literal { result = CmisServer::Query::Statement::Equals.new(val[0], val[2]) }
|
95
|
+
| value_expression not_equals_operator literal { result = CmisServer::Query::Statement::Not.new(CmisServer::Query::Statement::Equals.new(val[0], val[2])) }
|
96
|
+
| value_expression less_than_operator literal { result = CmisServer::Query::Statement::Less.new(val[0], val[2]) }
|
97
|
+
| value_expression greater_than_operator literal { result = CmisServer::Query::Statement::Greater.new(val[0], val[2]) }
|
98
|
+
| value_expression less_than_or_equals_operator literal { result = CmisServer::Query::Statement::LessOrEquals.new(val[0], val[2]) }
|
99
|
+
| value_expression greater_than_or_equals_operator literal { result = CmisServer::Query::Statement::GreaterOrEquals.new(val[0], val[2]) }
|
100
|
+
|
101
|
+
in_predicate
|
102
|
+
: column_reference NOT IN left_paren in_value_list right_paren { result = CmisServer::Query::Statement::Not.new(CmisServer::Query::Statement::In.new(val[0], val[4])) }
|
103
|
+
| column_reference IN left_paren in_value_list right_paren { result = CmisServer::Query::Statement::In.new(val[0], val[3]) }
|
104
|
+
|
105
|
+
in_value_list
|
106
|
+
: in_value_list comma literal { result = Array(val[0]) + Array(val[2]) }
|
107
|
+
| literal
|
108
|
+
|
109
|
+
null_predicate
|
110
|
+
: column_reference IS NOT NULL { result = CmisServer::Query::Statement::Not.new(CmisServer::Query::Statement::Is.new(val[0], CmisServer::Query::Statement::Null.new)) }
|
111
|
+
| column_reference IS NULL { result = CmisServer::Query::Statement::Is.new(val[0], CmisServer::Query::Statement::Null.new) }
|
112
|
+
|
113
|
+
like_predicate
|
114
|
+
: column_reference NOT LIKE general_literal { result = CmisServer::Query::Statement::Not.new(CmisServer::Query::Statement::Like.new(val[0], val[3])) }
|
115
|
+
| column_reference LIKE general_literal { result = CmisServer::Query::Statement::Like.new(val[0], val[2]) }
|
116
|
+
|
117
|
+
quantified_comparison_predicate
|
118
|
+
: literal equals_operator ANY column_reference { result = CmisServer::Query::Statement::QuantifiedComparison.new(val[0], val[3]) }
|
119
|
+
|
120
|
+
quantified_in_predicate
|
121
|
+
: ANY column_reference NOT IN left_paren in_value_list right_paren { result = CmisServer::Query::Statement::Not.new(CmisServer::Query::Statement::QuantifiedIn.new(val[1], val[5])) }
|
122
|
+
| ANY column_reference IN left_paren in_value_list right_paren { result = CmisServer::Query::Statement::QuantifiedIn.new(val[1], val[4]) }
|
123
|
+
|
124
|
+
folder_predicate
|
125
|
+
: depth_selector left_paren qualifier comma folder_id right_paren { result = val[0].new(val[4], val[2]) }
|
126
|
+
| depth_selector left_paren folder_id right_paren { result = val[0].new(val[2], nil) }
|
127
|
+
|
128
|
+
depth_selector
|
129
|
+
: IN_FOLDER { result = CmisServer::Query::Statement::InFolder }
|
130
|
+
| IN_TREE { result = CmisServer::Query::Statement::InTree }
|
131
|
+
|
132
|
+
literal
|
133
|
+
: boolean_literal
|
134
|
+
| datetime_literal
|
135
|
+
| signed_numeric_literal
|
136
|
+
| general_literal
|
137
|
+
|
138
|
+
order_by_clause
|
139
|
+
: #No action
|
140
|
+
| ORDER BY sort_specification_list { result = CmisServer::Query::Statement::OrderBy.new(val[2]) }
|
141
|
+
|
142
|
+
sort_specification_list
|
143
|
+
: sort_specification comma sort_specification { result = Array(val[0]) + Array(val[2]) }
|
144
|
+
| sort_specification
|
145
|
+
|
146
|
+
sort_specification
|
147
|
+
: sort_key ordering_specification { result = val[1].new(val[0]) }
|
148
|
+
|
149
|
+
sort_key
|
150
|
+
: column_reference
|
151
|
+
|
152
|
+
ordering_specification
|
153
|
+
: { result = CmisServer::Query::Statement::Ascending } # defaultf
|
154
|
+
| ASC { result = CmisServer::Query::Statement::Ascending }
|
155
|
+
| DESC { result = CmisServer::Query::Statement::Descending }
|
156
|
+
|
157
|
+
qualifier
|
158
|
+
: table_name
|
159
|
+
|
160
|
+
correlation_name
|
161
|
+
: qualifier
|
162
|
+
|
163
|
+
folder_id
|
164
|
+
: identifier {result = CmisServer::Query::Statement::FolderId.new(val[0])}
|
165
|
+
|
166
|
+
table_name
|
167
|
+
: identifier {result = CmisServer::Query::Statement::Table.new(val[0])}
|
168
|
+
|
169
|
+
column_name
|
170
|
+
: identifier {result = CmisServer::Query::Statement::Column.new(val[0])}
|
171
|
+
|
172
|
+
general_literal
|
173
|
+
: quote character_string_literal quote { result = CmisServer::Query::Statement::String.new(val[1]) }
|
174
|
+
| quote quote { result = CmisServer::Query::Statement::String.new('') }
|
175
|
+
|
176
|
+
datetime_literal
|
177
|
+
: TIMESTAMP date_string { result = CmisServer::Query::Statement::Date.new(val[1]) }
|
178
|
+
|
179
|
+
signed_numeric_literal
|
180
|
+
| sign unsigned_numeric_literal { result = val[0].new(val[1]) }
|
181
|
+
| unsigned_numeric_literal
|
182
|
+
|
183
|
+
unsigned_numeric_literal
|
184
|
+
: exact_numeric_literal
|
185
|
+
| approximate_numeric_literal
|
186
|
+
|
187
|
+
exact_numeric_literal
|
188
|
+
: unsigned_integer period unsigned_integer { result = CmisServer::Query::Statement::Float.new("#{val[0]}.#{val[2]}".to_f) }
|
189
|
+
| unsigned_integer period { result = CmisServer::Query::Statement::Float.new(val[0]) }
|
190
|
+
| period unsigned_integer { result = CmisServer::Query::Statement::Float.new("0.#{val[1]}".to_f) }
|
191
|
+
| unsigned_integer { result = CmisServer::Query::Statement::Integer.new(val[0]) }
|
192
|
+
|
193
|
+
approximate_numeric_literal
|
194
|
+
: mantissa E exponent { result = CmisServer::Query::Statement::ApproximateFloat.new(val[0], val[2]) }
|
195
|
+
|
196
|
+
mantissa
|
197
|
+
: exact_numeric_literal
|
198
|
+
|
199
|
+
exponent
|
200
|
+
: signed_integer
|
201
|
+
|
202
|
+
signed_integer
|
203
|
+
: sign unsigned_integer { result = val[0].new(CmisServer::Query::Statement::Integer.new(val[1])) }
|
204
|
+
| unsigned_integer { result = CmisServer::Query::Statement::Integer.new(val[0]) }
|
205
|
+
|
206
|
+
sign
|
207
|
+
: plus_sign { result = CmisServer::Query::Statement::UnaryPlus }
|
208
|
+
| minus_sign { result = CmisServer::Query::Statement::UnaryMinus }
|
209
|
+
|
210
|
+
boolean_literal
|
211
|
+
: TRUE { result = CmisServer::Query::Statement::True.new }
|
212
|
+
| FALSE { result = CmisServer::Query::Statement::False.new }
|
213
|
+
|
214
|
+
|
215
|
+
---- header ----
|
216
|
+
require File.dirname(__FILE__) + '/parser.rex.rb'
|
217
|
+
|
218
|
+
---- inner ----
|
219
|
+
|
220
|
+
def self.parse(sql)
|
221
|
+
new.scan_str(sql)
|
222
|
+
end
|