/
changelog.txt
864 lines (749 loc) · 63.4 KB
/
changelog.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
Esper Changelog
===================
Changes in version 4.3.0
------------------------
Major API or EPL changes
- We have made a change to NULL-value comparison, to closely follow SQL standards, as follows: In version 4.3, the expression "property = NULL" always returns null, use "property is NULL" instead. Version 4.2 and earlier returned true/false.
For more information, please see http://jira.codehaus.org/browse/ESPER-569
- Support for filter expressions as part of aggregation functions, for example "select count(*, color='black'), count(*) as percentBlack from Marbels"
- Support for interval algebra methods, e.g. before, after, coincides, during, includes, meets etc.
- Support for a new expression-driven data window "win:expr". Use for dynamically shrinking and expanding time or length windows, or for custom expiry logic based on work days, for example.
- Support for specifying a consumption policy on pattern filters. Useful when a pattern references the same filter multiple times and the application requires a filter to consume or prioritize one filter over another.
- Support for the transpose(...) function. For use in the select-clause to transpose an expression result object to a stream.
- Support for {} array operator to provide input to enumeration methods.
- Support for subqueries that return multiple result columns to be used in an expression definition.
- Support for @Audit to output nested expression results.
- New example "Trivia Geeks Club".
Minor changes
- Fixed issue ESPER-569 Null-value comparison for "not/equals"-operator (!=, =) not fully consistent with SQL standard
- Fixed issue ESPER-570 3-way inner join and using outer-join notation not working when where-clause added
- Fixed issue ESPER-571 NPE for fully-aggregated and ungrouped query with having clause that selects a non-aggregated property
- Fixed issue ESPER-572 Short-circuit evaluation not always performed for filters
- Fixed issue ESPER-573 Improve statement checking for on-merge "not matched" clause to not allow access to named window properties when subquery
- Fixed issue ESPER-574 Timer:interval pattern observer when a subquery is the parameter throws NPE
- Fixed issue ESPER-576 Expose API to dynamically register new views
- Fixed issue ESPER-577 Allow chained method invocation on cast() result
- Fixed issue ESPER-578 Allowing transposing the result of an aggregation function to a stream
- Fixed issue ESPER-579 Memory leak if creating and removing a large numbers of different event types
- Fixed issue ESPER-582 Error parsing reserved keyword "last" inside a function call
- Fixed issue ESPER-583 Support for filtering aggregation functions
- Fixed issue ESPER-584 Filter expression with relational op and constant not matching
- Fixed issue ESPER-585 On-merge not dispatching if input stream is also from named window
- Fixed issue ESPER-586 Crontab-schedule when use with list-parameter and zero give incorrect results
Changes in version 4.2.0
------------------------
Major API or EPL changes
- Support for enumeration methods, which work with lambda expressions to perform common tasks on subquery results, named windows, event properties or inputs that are or can be projected to a collection of events, scalar values or objects.
- Support for date-time methods for date and time manipulation and querying, such as for adding or subtracting time periods, setting or rounding calendar fields and querying fields.
- Support for @Audit annotation which instructs the engine to output detailed debug-level information about the statements processing, such as pattern instance counts, expression result values, property values and more.
- Support for Virtual Data Window, an extension point for (large) external data stores to become accessible same as a named window.
- Support for the 'new' operator, which populates a new data structure by evaluating column names and assignment expressions, useful when an expression should return multiple results, for performing a transformation or inside enumeration method lambda expressions.
- Support for constructor injection for event objects populated by insert into.
- Support for the on-merge clause to allow multiple actions (multiple then-clauses), to allow insert-into a stream other then the currently-merged named window and adding support for an optional where-clause for each action.
- Support for mapped and indexed properties to allow an expression as a map key or index.
- Support for expression declarations. Expressions that are common to multiple places in an EPL statement can be moved to a named expression declaration and reused within the statement without duplicating the expression itself.
- Improvement for query planning and indexing for joins, subqueries, on-merge/select/update/delete, fire-and-forget queries and create-index to support btree indexes for use with ranges, inverted ranges and relational operator (>, <, >=, <=) queries.
- Improvements to statement metrics reporting in regards to event counts and reporting for named windows.
- Improvements to query plan output.
- Reduced memory use for hash indexes on single columns.
Minor changes
- Fixed issue ESPER-549 NullPointerException upon failing to resolve UDF and when configuring a non-default auto-import
- Fixed issue ESPER-550 Where-clause expression validation not taking expression return type into account
- Fixed issue ESPER-551 Custom exception handler that rethrows runtime exceptions may cause wrong callback for next event
- Fixed issue ESPER-552 NPE logged delivering null-value results to Subscriber update method
- Fixed issue ESPER-555 Improve error message for UDF functions and subscribers that expect primitive typed parameters and receive null
- Fixed issue ESPER-556 Method-invocation-join when not unidirectional in combination with max/min aggregation function produces warning
- Fixed issue ESPER-557 On-merge statement creation throws StringIndexOutOfBoundsException when using alias for named window but not for property
- Fixed issue ESPER-558 Incorrect having-clause validation "non-aggregated properties in the 'having' clause must occur in the 'group-by' clause"
- Fixed issue ESPER-559 Output-first With Having-Clause not honoring output interval reliably
- Fixed issue ESPER-560 Updated (or deleted) event in a Named Window is not delivered to a consuming statement
- Fixed issue ESPER-561 Invoking instance method of an object returned by static method invocation returns cache of static method
- Fixed issue ESPER-562 On-select with aggregation and group-by not releasing memory after completion of a triggering event
- Fixed issue ESPER-563 Small memory leak creating large number of failed-validation statements
- Fixed issue ESPER-564 Subquery of identical event stream does not include most recent event in window aggregate
- Fixed issue ESPER-566 First Aggregation Function Returns Wrong (Growing) Result When Used in Correlated Subquery
- Fixed issue ESPER-568 Duplicate remove stream events posted from intersection-data window when used with on-update (named window only)
Changes in version 4.1.0
------------------------
Major API or EPL changes
- Support for on-merge which provides an atomic update-insert-delete (aka. upsert or merge) operation for use with named windows
- Support for subqueries against named windows to share existing indexes on the named window (both implicitly-created or via create-index)
- Support for configuration option to enable output of query plan to log destination (aka. explain-plan)
- Support for a new 'typeof' function that returns the event type name, for use with variant streams and event type super-types (POJO extends and implements, map super-types)
- Support for XML event type update at runtime via ConfigurationOperations
- Support for an extended time interval grammar that now supports 'weeks', 'months' and 'years' keywords
- Support for additional means to control external time
- Support for loading an XML schema from a string
- Support for a new form of the followed-by (->) operator: The form "-[max]> allows specifying an upper limit on the number of pattern instances
- We refactored the pattern engine to reduce memory use of pattern instances significantly
Minor changes
- Fixed issue ESPER-502 NullPointerException in OutputProcessViewDistinctOrAfter.process() and update() methods
- Fixed issue ESPER-503 Incorrect warning logged using @Hint('reclaim_group_aged=2') with std:groupwin grouped data windows
- Fixed issue ESPER-505 Reference Documation 4.0.0; Table 6.5; duplicety of operator
- Fixed issue ESPER-506 NullPointerException on an inner join of named window with aggregation and group-by
- Fixed issue ESPER-509 Documentation bug in subscriber use: "start" and "end" are "updateStart" and "updateEnd"
- Fixed issue ESPER-510 Support for event array for event objects populated by insert into
- Fixed issue ESPER-511 Make CurrentTimeEvent and TimerControlEvent Serializable
- Fixed issue ESPER-512 EventBean getUnderlying method when both subscriber and listener are used returns Class and not the underlying object
- Fixed issue ESPER-513 On-Update set Error starting statement: Property 'u.v2' is not available for write access [on com.espertech.esper.support.bean.SupportBean update MyWindow as u set v1=string, u.v2=string]
- Fixed issue ESPER-516 Insert into stream defined by a schema created as a map schema with property type being an event type not compiling
- Fixed issue ESPER-517 Error message "IllegalStateException: Event named ''a' not found in event pattern result set" is inaccurate
- Fixed issue ESPER-518 NPE in fire-and-forget query against two named windows with group-by and aggregations when named windows are empty
- Fixed issue ESPER-519 Fire-and-Forget join on 2 named windows with where-clause filtering on one window's rows returns incorrect result
- Fixed issue ESPER-520 Possible memory leak using @Hint('reclaim_group_aged=xxx') with time windows
- Fixed issue ESPER-521 Insert into stream defined by a schema created as a map schema with property type being an event type not populating when inserted from a map schema stream
- Fixed issue ESPER-522 Provide time control event for advancing the system clock by a batch of ticks
- Fixed issue ESPER-523 Scheduling service SPI to provide nearest time and statement info
- Fixed issue ESPER-526 Unidirectional inner join between two named windows when started late (named windows have data) produces too many rows for first result delivery
- Fixed issue ESPER-527 memory leak is possible for unbound/unlimited keys used with every-distinct
- Fixed issue ESPER-528 Unidirectional left outer join between same streams (self join) when used with staggered time-window and grouped view causes out of memory
- Fixed issue ESPER-529 create-schema to allow dot characters in property names
- Fixed issue ESPER-533 NullpointerException in Pattern And-state with timer:interval and "not"
- Fixed issue ESPER-535 "Previous" function when used under single-row plug-in function or user-defined function not compiling in match-recognize
- Fixed issue ESPER-536 NPE using Output Limiting clause with an EPStatementObjectModel - ExprTimePeriod
- Fixed issue ESPER-537 NullpointerException in Create-Window with Model-after Syntax when a nested property does not exist
- Fixed issue ESPER-538 Support for auto-event name in insert-into (populate underlying event)
- Fixed issue ESPER-539 Support for insert-into to specifiy the fully-qualified class name
- Fixed issue ESPER-543 Multiple engine instances same thread sending and receiving problem
- Fixed issue ESPER-546 "Last" aggregation function with on-select returns inconsistent results
Changes in version 4.0.0
------------------------
Major API or EPL changes
- Requires a Java 6 runtime (JDK6 or JRE6)
- The following dependent jar files are upgraded:
Required: ANTLR version upgrade from 3.1.1 to 3.2
Optional: LOG4J upgrade from 1.2.15 to 1.2.16
- The bound-repeat syntax in the repeat-until pattern operator changed syntax:
The old syntax of separating range value by dots "[low .. high]" is no longer supported. Use the colon ":" character instead of "..".
- The meaning of the index paramater to the "nth" aggregation function has changed:
To be consistent with "prev" and "last" functions an index of zero now returns the current row.
For Example: "nth(value, 0)" returns the current row and "nth(value, 1)" returns the previous-row value.
- The semantics for "output first" have changed: For statements that have a "group-by" clause the "output first" now outputs the first events per group.
- The "first" aggregation function has been renamed to "firstever".
- The "last" aggregation function has been renamed to "lastever". This makes a difference as data window deletes are reflected by the new "last" aggregation function and are not reflected by "lastever".
- We introduced new aggregation functions that track the data window : "first", "last" and "window" with a convenient syntax for access to all attributes.
- We introduced new single-row function for data window access: "prevtail", "prevwindow" and "prevcount" functions.
- The data window "std:groupby" for grouped data windows has been renamed to "std:groupwin" to avoid confusion with the group-by clause.
- Support for registering an exception handler that is called when any continous-query statement exception occurs.
- Support for all statistics views and the size view to accept additional expressions as parameters for returning values pertaining to the last-applied event.
- Support for chained method invocations on events in streams, library static methods and single-row functions.
- Support for registering single-row functions by function name.
- Support for dot-syntax in the form of "(expression).method(...).method(...)" which includes support for duck typing, obtaining array size and calling get(index) on an array or collection.
- Support for subqueries to select multiple columns.
- Support for correlated aggregation in subqueries.
- Support for selecting multiple columns in a subquery.
- Support for contained-event syntax on events selected from a named window.
- Support for expressions in the [] bound repeat in patterns.
- Support for grouped data windows to remove groups that haven't changed for a given time period, as specified via hint.
- To be congruent to the JDBC 4 specification, the SQL query metadata now uses the value returned by the JDBC driver result set metadata for "getColumnLabel" as the column name or if that is null the value returned by "getColumnName".
- For plug-in aggregation functions, the parameter to the "validate" method has changed and is now a validation context that provides additional information. The "validateMultiParameter" method has been removed.
- We added a new example demonstrating runtime configuration.
Minor changes
- Fixed issue ESPER-471 Static method called 'join' (reserved keyword) not allowed
- Fixed issue ESPER-481 Create-Window with explicit column-types does not support column types that are an event type (documentation bug/improvement)
- Fixed issue ESPER-489 Plug-in loader destroy order should be reverse of creation order
- Fixed issue ESPER-493 "IllegalStateException" for an aggregation query without group-by and without aggregations in the select clause
- Fixed issue ESPER-455 Aggregation when used with "prev" in where clause may return an incorrect result.
- Fixed issue ESPER-466 First-length and first-unique combined to intersection (multiple data windows) to reduce insert stream
- Fixed issue ESPER-495 Support XPath attribute node list result casted to string array
- Fixed issue ESPER-487 Custom aggregation functions - pass indicator whether running windowed and allow access to child expressions
- Fixed issue ESPER-496 On-select with stream wildcard and aggregation produces event-per-group and not event-per-row
Changes in version 3.5.0
------------------------
Major API changes
- None
New Features
- Support for EPL modules and deployment services.
- Support for "create schema": Declare an event type via EPL statement.
- Support for "for delivery" option: Grouped-delivery means any listeners/subscribers receive one invocation per group, discrete delivery an invocation per event.
- Support for expressions in parameters to SQL statements.
- Preemptive processing of events inserted into named windows. This helps to make behavior of queries with named windows more intuitive.
- Support for a new pattern guard "timer:withinmax". It takes a time period and maximum-count and ends the pattern subexpression when either the stopwatch or counter match.
- Support for a new pattern guard post-fix operator "while": Similar to a while loop, ends the pattern subexpression when an expression turns false.
Minor changes
- Fixed issue ESPER-388 Provide option to auto-remove event type when all statements referencing a type are destroyed
- Fixed issue ESPER-392 Nested properties with keywords can not be escaped with ticks
- Fixed issue ESPER-460 Added ResultSet to context provided to SQLOutputRowConversion and SQLColumnTypeConversion
- Fixed issue ESPER-463 Nested properties can not be escaped with ticks
- Fixed issue ESPER-464 Add an engine-level configuration parameter for default AccessorStyle
- Fixed issue ESPER-468 IllegalArgumentException while parsing "B until not B" pattern
- Fixed issue ESPER-469 Using java.sql.Date with renderer returns PropertyAccessException
- Fixed issue ESPER-470 Spring JMS input adapter ack's message before unmarshal
- Fixed issue ESPER-472 ClassCastException while sending TimeControlEvent into isolated runtime
- Fixed issue ESPER-473 Custom marshaller for Spring JMS adapter that returns DOM object results in an unrecognized event
- Many other documentation and performance improvements
Changes in version 3.4.0
------------------------
Major API changes
- None
New Features
- Support for variables of type Object (any type), class or EventType
- Support for creating an explicit index on a named window for best on-demand query performance (aka. fire-and-forget queries)
- New socket input adapter
- New HTTP input and output adapter
- New database output adapter for queueable insert, update, delete (DML) and upsert keyed-insert/update
Minor changes
- Minor change to the SODA object model API to strictly follow the JavaBean standard
- For the PluginLoader API the "init" method now takes a context object that contains initialization parameters
- Fixed issue ESPER-445 Improve performance of match-recognize when large number of intermediate events
- Fixed issue ESPER-451 Memory leak in pattern with or-operator and permanently false subexpressions
- Fixed issue ESPER-430 PlugInProjectionExpression should allow more than one expression
- Fixed issue ESPER-453 Repeated Max and Min on Named Window Aggregations
- Fixed issue ESPER-457 ClassCastException when using subscriber to join statement with wildcard-select and distinct
- Fixed issue ESPER-446 Benchmark throws exception for weighted average sample
- Fixed issue ESPER-449 Create window fails for syntax providing column names and types explicitly and multiple data windows
- Fixed issue ESPER-450 Row-based and/or column-based conversion function for SQL query results
- Fixed issue ESPER-403 First-unique data window used with named window causes on-delete to misbehave
- Fixed issue ESPER-429 Replace "childNodeType" with "parameterType" in section 12.2.3
- Reorganized EsperIO to individual jar files; Deprecated opentick adapter
- Many other documentation and performance improvements
Changes in version 3.3.0
------------------------
Major API changes
- None
New Features
- Support for subqueries to occur in filter expressions (stream or pattern)
- Support for subqueries in split-stream and on-set and on-select
- Support for on-update
- New aggregation functions: rate, last, first, nth, leaving
- The "prev" and "prior" functions now accept a stream name
- Optimization of min and max aggregation function for use with or without data window
- Support for annotations in statement object model
- Variables that are created via "create variable" and that are no longer referenced are removed
Minor changes
- Fixed issue ESPER-389 startAllStatements() starts rules in unpredictable order
- Fixed issue ESPER-393 Stream name alias not available for use in where-clause
- Fixed issue ESPER-396 Unbound stream and aggregating/grouping by unlimited key (i.e. timestamp) configurable state drop
- Fixed issue ESPER-398 Escape syntax for quote and double quote not working
- Fixed issue ESPER-402 Pattern with two NOT-operators connected by AND-operator throws ConcurrentModificationException (1 thread)
- Fixed issue ESPER-404 Statement resources not cleaned up after statement destroy keeping last event
- Fixed issue ESPER-405 Equals operator on object types in expressions should support inheritance
- Fixed issue ESPER-406 OutOfMemory : StatementMetrics not cleaned up after statement destroyed
- Fixed issue ESPER-409 Order-by clause not applied when pattern delivers multiple result rows for single incoming event
- Fixed issue ESPER-411 Operands of expression passed the wrong way round in patterns
- Fixed issue ESPER-414 In some scenario, createEPL fails with IllegalStateException vs EPException
- Fixed issue ESPER-415 statement object model fails on every-distinct
- Fixed issue ESPER-416 statement name provided by API does not overrides annotation provided name
- Fixed issue ESPER-432 Dangling meta character in regexp hangs the engine
- Fixed issue ESPER-418 Statement fails to compile if the statement only has a where-clause and uses an alias
- Fixed issue ESPER-419 Group-by with "output last" output rate limiting and wildcard select outputs last event and not last event per group
- Fixed issue ESPER-420 Group-by with wildcard-select may present wrong value for non-aggregated and non-grouped properties
- Fixed issue ESPER-421 Case-when throws NullPointerException when condition returns null
- Fixed issue ESPER-424 Self-join and order-by incorrect order
- Fixed issue ESPER-431 20-stream join hangs query optimizer
Changes in version 3.2.0
------------------------
Major API changes
- None
New Features
- Support to the proposed SQL standard "match_recognize", a regular expression-based event pattern matching language
- Support for isolated service providers, which allow to control event visibility and time-related behavior on a statement level, i.e. suspend, preload or catch-up statements
- Support for "update istream" which allows declarative modification of event properties of events entering a stream.
- Support for "distinct" in the select clause
- Support for "output after" syntax to discard of events until time period passed
- Support for "limit" clause for on-select and on-insert
Minor changes
- Fixed issue ESPER-386 "Output when" with variables fails when multiple statements refer to same variable
- Fixed issue ESPER-385 NPE thrown on removeAllListeners for destroyed statement
- Fixed issue ESPER-382 ConcurrentModificationException for named window select/insert/delete
- Fixed issue ESPER-376 Restriction in element not parsing to right type for XSD-backed event type
- Fixed issue ESPER-375 Contained event selection for certain XML creates ClassCastException
- Fixed issue ESPER-373 NPE in output rate limiting using SODA
- Fixed issue ESPER-371 Using Esper 3.1.1, a POJO type of float isn't supported in the statements
- Fixed issue ESPER-370 Exception compiling pattern with repeat operator and filter using repeated property within the repeat operator itself
- Fixed issue ESPER-368 XML schema property plus XPath with the same property name produce incorrect result if schema and XPath typing don't match
- Fixed issue ESPER-367 OutOfMemory issue when a group-by expression returns an unlimited number of values
- Fixed issue ESPER-366 Missing export of package com.espertech.esper.event.property
- Fixed issue ESPER-365 Import EPL built in annotation by default
- Fixed issue ESPER-362 Error "Iteration over a unidirectional join is not supported" at statement start in a stream to window join
- Documentation and performance improvements
Changes in version 3.1.0
------------------------
Major API changes
- The behavior of "timer:within" when used within an "every" in a pattern has changed: The sub-expression qualified by "timer-within" upon expiry
of the timer now evaluates to permanently false, while previously it simple stopped. This allows the "every" operator to restart such sub-expression.
For example, the expression:
every(A -> (B where timer:within(5 sec)))
... When no B event arrives after an A event, the "every" restarts the subexpression looking for the next A followed by B within 5 sec.
- The PluginLoader interface for writing adapters has a new required method that must be implemented to allow plugins to initialize after complete Esper engine initialization.
- The provider URI of the default engine instance is now "default" instead of null.
This is for consistency with the default engine qualifier for optional use in stream and property name qualification, which is also "default".
Therefore EPServiceProviderManager.getDefaultProvider().getURI() returns "default", and passing null to the EPServiceProviderManager still returns the default instance.
New Features
- A new "every-distinct" operator has been introduced to the pattern language. Very similar to the "every" operator, this operator
suppresses duplicate results received from sub-expressions based on a set of expressions returning distinct-values.
- The EPL language now understands annotations following the annotation syntax standard.
An annotation is an addition made to information in a statement. Esper provides certain built-in annotations for
defining statement name (@Name), adding a statement description (@Description) or for tagging statements.
Applications can provide their own annotation classes that the EPL compiler can populate.
- The engine now provides a way to prioritize and preempt processing of an event when multiple statements must process the event,
via the @Priority and @Drop annotations.
- The insert-into clause can now directly populate an underlying event object from a select clause.
- We have extended the on-insert syntax by a new split-stream syntax. This allows to list multiple insert-into, select clauses and where-clauses
thereby making it easy to split or duplicate an event stream into multiple further event streams.
Minor changes
- Fixed Issue ESPER-350 Timer-Within should evaluate to permanently false allowing every to restart the expression
- Fixed Issue ESPER-349 Exception barrier to lock taken missing from filter processing potentially causing deadlock after an exception occurs
- Fixed Issue ESPER-348 XML event type fails to be configured with XSD on Java 6
- Fixed Issue ESPER-347 NullPointer with time_batch and START_EAGER with named window
- Fixed Issue ESPER-346 NullPointerException in on-select with aggregation and empty window
- Fixed Issue ESPER-345 NPE is thrown when evaluating statement with 'OR' in its having-clause.
- Fixed Issue ESPER-344 Pattern cleanup incomplete causing memory leaks
- Fixed Issue ESPER-343 Esper shouldn't log ExprValidationException
- Fixed Issue ESPER-341 Variable used with XML no-schema event in same statement creates ambigous property exception
- Fixed Issue ESPER-340 Lost of precision using BigDecimal for arithematic operation
- Fixed Issue ESPER-339 Parse error when using "every" in combination with repeat
- Fixed Issue ESPER-336 pluginloader stop not properly called - issue with EPserviceProviderManager.getProvider("existing")
- Fixed Issue ESPER-335 pluginloader stop called after engine runtime destroy
- Fixed Issue ESPER-334 PluginLoader reentrancy on Configuration
- Fixed Issue ESPER-333 Pattern followed-by expression to detect when no subexpressions are alive and indicate permanently false so "every" can restart
- Fixed Issue ESPER-332 NullPointerException in on-select with having clause for timer excution
- Fixed Issue ESPER-331 Runtime exception barrier for listener and subscriber
- Fixed Issue ESPER-328 Aggregation function nested created NPE in Timer thread
Changes in version 3.0.0
------------------------
Major API changes
- Please see http://docs.codehaus.org/display/ESPER/Migrating+Esper+2.x+to+3.0
The summary of changes are:
- Upgraded version of dependent jar files
- Moved EventType, EventBean and related exception classes from package com.espertech.esper.event to com.espertech.esper.client
- Several minor rename of methods in the Configuration API related to event type name retiring "alias" as a word in method names
- EPL division expressions yield double-type results
- EPL view and pattern parameters strongly distinquish between string constant and property name
- EPL join statements for certain stream types now require a data window declaration
- EPL when using multiple data windows defaults to intersection semantics
- Extension API for views, pattern objects and event representations have additional or slighly changed signatures
New Features
- The view parameters and pattern object parameters are now expressions. Thereby they gain certain new features:
- Variables may be used to parameterize views or pattern objects;
- Prepared statements may use substitution parameters to parameterize views and pattern objects;
- Pattern objects may be parameterized by prior events;
- The syntax for views namespace.name('property') is no longer supported.
- New syntax to support contained-event selection, for use with coarse-grained events that contain finer-grained events or rows.
This allows convenient extraction and analysis of information from business-level composite events.
- Added XML and JSON renderers for output events
- When using multiple data windows for the same stream in EPL, the default policy is intersection of data windows, and a union-policy is also available via keyword.
This allows concise declaration and combination of multiple expiry policies and well-defined semantics.
- We have made substantial internal enhancements to the type system to simplify and support transposing from any type of stream to an event property in a further stream.
- Enhanced the XML DOM event to support: The changes gained features to transposing XPath expression results between statements and including arrays,
as well as transposing property expression results. The changes also correct a problem in which an expression "index[1]" accessed the firs element in a collection and not the second.
- Added a new method for statements to add a listener with replay in one transaction, by name "addListenerWithReplay".
- The EPL now returns a double-type result for division expressions where both operands to a division were non-FP types, such as "1/2", i.e. double 0.5.
This follows SQL standards and makes EPL easier to read and use. Esper 2.x returned an integer value following Java standards (i.e. zero).
- The EPL does no longer assume keep-all semantics if no data window is specified for a filter-based or pattern-based stream in a join.
EPL now requires a data window to be explicitly defined to applicable streams.
- Added support for SQL-standard ANY, SOME and ALL keywords in group comparison.
- Added advanced threading options to configuration for use with inbound, outbound and execution threading at engine-level.
- Improved support for Java-object event representation with parameterized types (Java generics), List and Iterable properties.
- Added support for escaping property names and event type names in case an overlap occurs with keywords.
- New configuration options to change the caching behavior for UDF invocations.
Minor changes
- Removed "stat:cube" view.
- Removed "indicator.jmx" package.
- Removed "emit" method from EPRuntime and EmittedListener.
- Removed examples LinearRoad, RSI and ATM.
- The Maven build no longer compiles the grammar. The grammar is now compiled via "esper/grammar/antlrtool.bat" or "antlrtool.sh". The resulting parser is
part of the source code base.
- Added new examples for named window and OHLC; We restructured the examples directory structure and added Eclipse projects.
- Fixed issue ESPER-326 Prepared On-Demand Query on named window returns incorrect count(*)
- Fixed issue ESPER-324 EPServiceStateListener exposes EPServiceProviderImpl
- Fixed issue ESPER-323 Timer thread caught unhandled exception: null
- Fixed issue ESPER-321 stat:linest has more derived properties than what documented
- Fixed issue ESPER-320 Pass explicit null value to user-defined function fails to start statement
- Fixed issue ESPER-318 Replace the term "alias" for event types with the term "name"
- Fixed issue ESPER-317 current_timestamp does not behave properly when accessed from getter API
- Fixed issue ESPER-316 XML DOM-backed events transpose properties that are DOM-subtrees to a new stream
- Fixed issue ESPER-314 Esper XML represented events - need clarification
- Fixed issue ESPER-313 using last | snapshot in output...when statement causes parsing error
- Fixed issue ESPER-312 NullPointerException in group-by query with only a count(*) in the having-clause and no other agg functions
- Fixed issue ESPER-311 Publish current statement results to listener upon listener-add and atomically
- Fixed issue ESPER-310 Safe iterator on unidirectional join not releasing lock
- Fixed issue ESPER-309 Named window model-after for Map-event types incompatible with insert of Map type
- Fixed issue ESPER-305 escape char parsing
- Fixed issue ESPER-304 impossible to get properties of events when a listener and a subscriber are added to a statement
- Fixed issue ESPER-303 Pooled DB connection obtained and returned even on cache hit
- Fixed issue ESPER-276 NullPointerException reported when enabling metrics reporting but still working
- Fixed issue ESPER-251 Named window with underlying event as a property and insert-into from pattern requires self-property in select clause
Changes in version 2.3
------------------------
Major API changes
- Added API for on-demand queries
New Features
- Support for array-type properties in Maps; Support for map type name as a property type
- Listener API for receiving callbacks upon statement creation and state change as well as service state
- Allow event types to be removed at runtime; Allow detection of which statements reference types
- Added OSGi manifest to jar files
- Support for language-locale dependent sorting of String value
- Event type name added to EventType interface
- Added route methods for other event representations
- Added user object support to EPStatement
Minor changes
- Fixed issue ESPER-270 Property name order not always reflecting select clause order for getPropertyNames
- Fixed issue ESPER-274 Strange exception using median collection
- Fixed issue ESPER-275 Identifiers that are scientific notation numbers don't cause a parser error
- Fixed issue ESPER-276 NullPointerException reported when enabling metrics reporting but still working
- Fixed issue ESPER-280 isVariantStreamExists throws nptr
- Fixed issue ESPER-281 On-Select with Insert-Into throws NPE if no data selected from named window
- Fixed issue ESPER-282 Memory leak in grouped data window when combined with weighted-avg view
- Fixed issue ESPER-285 Correlation and Linest stats view within groupby problem
- Fixed issue ESPER-286 Map inheritance event type processes first derived event only for queries against supertype events
- Fixed issue ESPER-287 Improve startup performance for large numbers of statements with the same filter property
- Fixed issue ESPER-288 Write-only property of POJO event shows up in property name list
- Fixed issue ESPER-290 FIX adapter not documented
- Fixed issue ESPER-291 Delivery to observer failes with NPE if custom view posts null insert and remove stream
- Fixed issue ESPER-292 esper_reference.pdf : Figure 3.4. is incorrect
- Fixed issue ESPER-294 Pattern problem in 'every' operator not restarting a false sub-expression.
- Fixed issue ESPER-295 Time window onto a unique window not working
- Fixed issue ESPER-296 EPL 'not like' expressions in prepared statements lose negation
- Fixed issue ESPER-297 Detect dead database connection and retry
- Fixed issue ESPER-299 Need to pass context classloader to CGLib
- Fixed issue ESPER-300 IndexOutOfBoundsException in TimeBatchViewFactory
- Fixed issue ESPER-301 Time batch view documentation incorrectly shows reference point as optional with flow control keywords
Changes in version 2.2.0
------------------------
Major API changes
- Two new reserved keywords: LIMIT and OFFSET; Added for support of the SQL-standard row limit clause.
- Bug fix for ESPER-264 that impacts joins that utilize the "unidirectional" keyword and that perform aggregation
New Features
- Support for repeat and repeat-until in pattern matching
- Enhancements for the create-syntax for named windows:
- Allows an additional SQL table-like definition syntax
- Allows constants in the model-after syntax
- Allows the window to be modelled after another named window, and populated from another named window at creation time
- Changed "as" to become an optional keyword
- Added support for BigDecimal and BigInteger in all aspects of EPL
- Added metrics reporting: Instrumentation to provide key engine and statement-level performance indicators as event streams
- Added support for row limiting
- Added four new data window views for for first-event type expiry policies: std:firstevent, std:firstunique, win:firstlength, win:firsttime
- Enhanced output limit clause to support crontab-like schedule
- Enhanced output limit clause to support output when an variable or expression turns true
- Enhanced plug-in aggregation functions to accept multiple parameters
- Support for the "inner" keyword for use in outer joins
- Support for variables to be parameters to an SQL join and method join
- Support for polling via iterator from a statement that contains only SQL queries or method invocations (alone or in a join, aka. no-stream pull API)
- Removed limitation on the number of historical streams (SQL and method) in joins, now supporting an unlimited number of historical streams, full iterator support
- Support for Map inheritance: map event types may now be declared to inherit from one or more Map supertypes
- Support for changing Map event types at runtime by adding properties to an existing type
- Optimization for certain filter-only statements to more efficiently process
- Added JMS text message marshaller and unmarshallers for Fix (Fix is a standard financial interchange format)
Minor changes
- Fixed issue ESPER-270 Property name order not always reflecting select clause order for getPropertyNames
- Fixed issue ESPER-269 User-define method with dot in parameter generates property not found
- Fixed issue ESPER-268 User-defined function reports runtime errors through the stack
- Fixed issue ESPER-264 Unidirectional keyword with aggregation posts lifetime-cumulative results rather then join-current cumulative results
- Fixed issue ESPER-263 Add boolean ConfigurationOperations.isVariantStreamExists(String variantStreamName)
- Fixed issue ESPER-258 Extension points for esperio
- Fixed issue ESPER-257 Esperio beans input to support subset of beans properties in input CSV
- Fixed issue ESPER-256 It would be really useful for CSVInputAdapter to have a row count so we can tell how many rows it has processed
- Fixed issue ESPER-254 Iterating over joins that join by polling execution (database or method joins)
- Fixed issue ESPER-250 Custom aggregation function provided by static inner class not possible
- Fixed issue ESPER-249 Enhance TimeBatchView with FORCE_UPDATE, START_EAGER keywords
- Fixed issue ESPER-247 Cast function for String to Int conversion returns null
- Fixed issue ESPER-246 Unique-view incorrectly posts remove stream data for shared state under view sharing conditions
- Fixed issue ESPER-243 Swallowing InterruptedException in EPServiceProviderImpl
- Fixed issue ESPER-241 Predefined variant types not supporting dynamic event types
- Fixed issue ESPER-239 Esperio - memory leak in AdapterCoordinatorImpl
Changes in version 2.1.0
------------------------
Major API changes
- New API to plug-in of a custom event type
- Added additional sendEvent method that accepts alias name and event object, plus EventSender instance to skip type lookup
New Features
- Added support for variant event streams, into which events of disparate event types can be inserted and treated as the same type
- Added support for update events (aka. version or revision events)
- Added support for streaming XML using Apache Axiom
- Added support for EsperIO CSV adapter to send bean events
- Allowed normalization of subevents into resultant stream
- Allowed DOM-type property of XML events transpose into new stream for use with XPath and nested syntax
Minor changes
- Properties can now be prefixed by the engine URI and the event type alias used in the from-clause; Event streams can be prefixed by the engine URI (SQL compatibility)
- Added full support for nano/microsecond resolution
- Allowed access to statement's XPathFactory instance to supply XPathFunctionResolver, etc.
- Added support for an escape syntax for event property names that contain dots
- Allowed esperio to use external timer
- Added support to specify a time period in output rate limiting
- Added support for the "in" operator to accept array properties, collection (set, list) property or map property for contains-value semantics
- Now uses thread ClassLoader for compatilibility with OSGi
- Provide additional XPath return value types to cast to
- Allow certain keywords to be used as column alias, such as "select count(*) as count from foo"
- Fixed issue ESPER-197 EsperIO/CSV reported to be slow
- Fixed issue ESPER-208 Esperio runs out of stack space when processing largeCSV file and not using engine thread
- Fixed issue ESPER-209 Stop of consumer statements of named windows may not entirely deregister consumer
- Fixed issue ESPER-213 ConcurrentModificationException creating consuming statements to a single named window under threading
- Fixed issue ESPER-214 ClassCastException in named window dispatch for timer thread when multiple insert-into
- Fixed issue ESPER-219 Documentation for plug-in views not specifying implicit contract towards object references
- Fixed issue ESPER-220 TimeBatchView.computeWaitMSec can give incorrect results for low "interval"
- Fixed issue ESPER-221 Named window with batch expiry policy causes late consumers to post incorrect data or throw IllegalArgumentException
- Fixed issue ESPER-227 No documentation on time-batch view parameter for reference point
- Fixed issue ESPER-228 PDF document page number not showing
Changes in version 2.0.0
------------------------
Major API changes
- All package names have changed from "net.esper" to "com.espertech.esper"
- We have renamed EQL to EPL: All method names and other references to EQL have been renamed to EPL, i.e. createEQL to createEPL
- We have made changes to engine output to make the output more useful and consistent between different types of queries,
and to make the engine more performant. Please see http://docs.codehaus.org/display/ESPER/Migrating+Esper+1.x+to+Esper+2.x for details.
- We have upgraded 3rd party library dependencies to new versions
- We have switched the schema to 2.0, made it namespace-aware and available online
New Features
- New strongly-typed and fast output event delivery to subscriber objects via method call
- Performance improvement: statements without listeners or subscriber (iterator or output-snapshot statements that use insert-into) now compute much faster
- We have upgraded to ANTLR Version 3 to gain excellent error handling, incremental parsing, easy-to-read grammar and a smaller runtime jar
- We have changed view parameter syntax such that event properties do no longer need to appear in quotes
- Added support for nano/microsecond timer resolution (ESPER-191)
- Added API for setting variable values (ESPER-181)
- Added support for map return types in from-clause method invocations
- Added support for a "unidirectional" keyword in joins/outer join to control join direction
- Added support for multiple event properties in unique view (std:unique)
- Added support for use of aggregation functions in subselect
- Fixed issue ESPER-136 Improve error messages when encountering reserved keywords
- Fixed issue ESPER-138 Allow Map event type to contain nested Map values
- Fixed issue ESPER-145 Ignore start or stop commands on already started or stopped EPStatements.
- Fixed issue ESPER-178 Problem selecting "sum" as a property of event posted by stat:uni view
- Fixed issue ESPER-179 Iterator on select statement selecting from a named window may return incomplete results
- Fixed issue ESPER-180 Null aggregation results outer joining a named window on filled named window
- Fixed issue ESPER-183 Replace LinkedLists with ArrayDeque where possible
- Fixed issue ESPER-184 NPE when using regexp or like on null pojo properties
- Fixed issue ESPER-185 Remove limitation whereas grouped-by properties cannot also occur within aggregation functions
- Fixed issue ESPER-186 Iterator not honoring order by clause for grouped join query with output-rate clause
- Fixed issue ESPER-187 Join of two or more named windows on late start may not return correct aggregation state on iterate
- Fixed issue ESPER-188 Output snapshot buffers events until output condition is reached
- Fixed issue ESPER-188 Output snapshot buffers events until output condition is reached
- Fixed issue ESPER-192 Support non-String type auto-discovery in EsperIO
- Fixed issue ESPER-194 Nullpointer when using Jcl104-over-slf4j
- Fixed issue ESPER-195 Not considering having-clause in un-aggregated and un-grouped query (no-join only)
Minor API Changes:
- Changes to configuration classes:
Moved the classes ExpiryTimeCacheDesc, LRUCacheDesc, DataCacheDesc, CacheReferenceType out inner classes of ConfigurationDBRef to
ConfigurationExpiryTimeCache, ConfigurationLRUCache, ConfigurationDataCache, ConfigurationCacheReferenceType
since the classes were applicable elsewhere
- Renamed method addJavaSqlTypesBinding on ConfigurationDBRef to addSqlTypesBinding
- Minor change to SelectClause in the SODA API
Changes in version 1.12.0
------------------------
* New feature: Named window
- Allows to share data windows between statements
- New create-window syntax to create named windows
- Define entry criteria via insert-into
- Define exit criteria via the new on-delete syntax
- Perform on-demand queries using the new on-select syntax
* New feature: Variable
- New create-variable syntax declares a variable
- Variables can occur in any expression
- A variable can occur in an output-rate limit to dynamically control output rate
- Update variables via the new on-set syntax
- The engine makes consistency and atomicity guarantees
* New multi-policy tumbling window (ESPER-165)
* New time-ordering window for more flexibility in handling out-of-order events (ESPER-147)
* New accumulating time-based data window (ESPER-166)
* New 'snapshot' keyword for the output rate limiting clause for outputting full statement state
* New safe iterator to provide a concurrent-safe pull API (ESPER-172)
* Support for method invocations in the from-clause; For example to query a distributed, object database or web service
* Support for iterator and safe iterator to iterate over joins and outer joins (ESPER-173)
* Support for stream-wildcard "stream.*" selections for more flexibility selecting from joins and patterns (ESPER-174)
* Support for the stream name or pattern tag name as a valid property in expressions, returning the underlying event for the stream
* Support for instance method calls on stream or pattern events that are Java objects
* Support for indexing of cached result sets of SQL poll queries and method invocations
* Support for expiry time cache backed by soft-reference Map and hard-reference map (ESPER-167)
* Support for an unmatched event listener that receives a callback if an event matches no statement (ESPER-160)
* Support for JDK5 enum classes natively (ESPER-13)
* Support for constants (public static final fields) in expressions
* Fixed issue ESPER-125 IllegalStateException in a self-joining statement without join condition using sorted window
* Fixed issue ESPER-177 Deadlock in EPRuntimeImpl.sendEvent
* Fixed issue ESPER-176 NullPointerException for grouped-by length view and previous operator
* Fixed issue ESPER-175 ArrayIndexOutOfBoundsException when no event posted
* Fixed issue ESPER-171 AutoID example in Sun JDK6 fails with Invalid schema error (a JDK6 compatibility issue)
* New example: Java Messaging Service (JMS) server shell
- demonstrates a multi-threaded JMS server
- with dynamic statement management using Java Management Extensions (JMX)
* API change: AggregationSupport now requires an implementation of the clear() method
* documentation improvements
* performance improvements: rewritten insert-into and listener thread blocking techniques for reliable ordered delivery, other changes
Changes in version 1.11.0
------------------------
* Support for statement object model (ESPER-108)
- allows to build, change or interrogate an object-oriented representation of a statement
- round-trip between EQL and object model
* Support for precompiled statements and substitution parameters (ESPER-50, ESPER-31)
* Support for dynamic (unchecked) properties; Support for instanceof and cast (ESPER-135)
* Support for the StatementStopCallback to deliver events raised by plug-in views (ESPER-158)
* Support for automatic bean aliases by specifying imported packages (ESPER-149)
* New "current_timestamp" reserved keyword returns the current engine time (ESPER-144)
* API provides timestamp with last state change in EPStatement (ESPER-144)
* Fixed issue ESPER-129 "DOM expects a Document, no error checking if not"
* Fixed issue ESPER-131 "Namespace problem using XML events and XPath properties"
* Fixed issue ESPER-134 "EPException using std:groupby without child view"
* Fixed issue ESPER-142 "Relational Database Access does not work with Oracle JDBC"
* Fixed issue ESPER-159 "Two patterns with similar filters cause duplicates reported by one pattern"
* Fixed issue ESPER-155 "BeanEventType fails on write only property"
Changes in version 1.10.0
------------------------
* Support for a new statement-aware listener interface (ESPER-113)
* Support for case-insensitive Java-class event property names (ESPER-103)
* Fixed issue ESPER-112 "Pattern problem in 'every' operator not restarting a permanently false sub-expression"
* Fixed issue ESPER-114 "Allow equals operator on object types in expressions"
* Fixed issue ESPER-115 "NullPointerException using iterator on pattern without window"
* Fixed issue ESPER-118 "NullPointerException when select * and additional fields"
* Fixed issue ESPER-121 "Filter expression not evaluating correctly after optimization and using multiple pattern subexpression results"
* Fixed issue ESPER-122 "IllegalArgumentException in a join statement between same-typed map-underlying events"
* Fixed issue ESPER-124 "IllegalStateException in a grouped time window using the prior function"
* Fixed issue ESPER-126 "Allow null statement name for createPattern"
* Documentation improvements
* Performance improvement when running engine without log4j configuration
Changes in version 1.9.0
------------------------
* Improvements to multi-threaded processing:
- Deliver events to listeners in a predictable order
- Deterministic in processing events between statements that consume other statement's events via insert-into
* Support for last-day-of-month and weekday for timer:at crontab functions (ESPER-84)
* Support for subqueries to return the event object itself (ESPER-105)
* Additional documentation on grouping and aggregation (output model chapter)
* Additional documentation on threading and concurrency (API chapter)
* New example out of the RFID domain featuring a Swing GUI and a simulator
* Fixed issue ESPER-98 "NullPointerException for Joins involving Map event types"
* Fixed issue ESPER-99 "IllegalStateException combining a time window with min/max and group-by and output every"
* Fixed issue ESPER-101 "ArrayIndexOutOfBounds with 'output last' and group by"
* Fixed issue ESPER-107 "Memory leak using previous function and length window under a group"
* Fixed issue ESPER-109 "NPE while fetching events from statements"
* Fixed issue ESPER-110 "Iterator not honoring filter, aggregation, group-by and having clause"
Changes in version 1.8.0
------------------------
* Support for subqueries including the exists and subquery-in syntax (ESPER-22 support for subqueries)
* Support for plug-in user-defined aggregation methods, and plug-in pattern observer and pattern guard objects (ESPER-40)
* Fixed issue ESPER-93 "Improve error handling parsing too large Integer numbers and remove L suffix requirement for Long"
* Fixed issue ESPER-96 "Cache result of user-defined functions when parameter set is constants"
* Fixed issue ESPER-94 "Performance degradation for certain statement between 1.4 and 1.5 of 25%"
* Significant performance improvements in statement event output and lock management
Changes in version 1.7.0
------------------------
* Support for free-form filter expressions (User-defined filter functions ESPER-77, Pattern Filter - null value support ESPER-17, ESPER-91)
* New JMS input and output adapter based on Spring JMS templates (ESPER-4, ESPER-8, ESPER-7)
* Support for adding new event type aliases and Map and DOM event types during runtime (ESPER-87)
* New statement management API (ESPER-90)
Note: Starting this release the engine remembers stopped statements however a stopped statement takes very little memory.
Destroy a statement to eliminate any resources held by an engine for a statement.
* Allow literal keywords to be case insensitive (ESPER-89)
* More helpful error messages when invalid syntax (ESPER-82)
* Support for plugging-in a custom-developed view (ESPER-41)
* Fixed issue ESPER-86 "selecting first element via prev and count(*)"
* Fixed issue ESPER-92 "String with parantheses not parsing in static method arg"
Changes in version 1.6.0
------------------------
* Added support for group-by and previous (ESPER-80 Prev function to consider grouped windows)
* Added length window batch (ESPER-27 jumping/tumbling window)
* Added support for array definition (Enhancement Request ESPER-76 Java array initialization syntax for constants)
* Removed dependency on Apache Common BeanUtils library (commons-beanutils-1.7.0)
* Fixed issue ESPER-78 "Insert-into streams not using correct event type when same-typed streams"
* Docs: Output model illustrations for time windows and event model; Extensive description of built-in views
Changes in version 1.5.0
------------------------
* Multithread-safety for all operations provided by the administrative and runtime API.
Client applications can perform multithreaded sends of events into the engine as well as create, start and stop statements during operation, while retaining full control over threading and efficiently sharing resources between statements (Enhancement Request ESPER-48 Multithread-safety)
* Documentation - new chapter explaining the output model
* fixed issue ESPER-75 "PropertyAccessException selecting individual fields from a group-by with sub-ordinate length window"
Changes in version 1.4.0
------------------------
* New Esper Input Adapter API (EsperIO) for reading CSV (comma-separated value format) files and running event simulations from timestamped CSV files (ESPER-6 Input Adapter for reading CSV files)
* (EQL) Support for 'prior' and 'prev' (previous) operator (Enhancement request ESPER-25)
* (EQL) Support for 'in' and 'not in' list-of-value matching in filter expressions,
and for 'between' and 'not between' keywords, and 'not in' ranges (Enhancement request ESPER-66)
* (EQL) Support for modifying events in a stream, i.e. wildcard and expressions combined in a select-clause and insert into (Enhancement request ESPER-67)
* Various documentation enhancements and performance tuning changes
* Fixed issue ESPER-69 "Pull throws UnsupportedOperationException for statement not selecting wildcard"
* Fixed issue ESPER-68 "Followed-by operator not releasing memory for dead sub-expressions"
Changes in version 1.3.0
------------------------
* (EQL) Added support for SQL queries within EQL (Enhancement request ESPER-30)
* (EQL) Added support for regular expressions (regexp) and SQL 'like' (Enhancement request ESPER-65)
Changes in version 1.2.0
------------------------
* (EQL) Added support for 'in' and 'between' standard SQL keywords
* (EQL) Fixed: EQL windows take seconds parameter while patterns take milliseconds parameter (Issue ESPER-52)
NOTE: The following functions now take seconds (not milliseconds) as a parameter: timer:within, timer:interval, win:ext_time
New syntax for specifying time periods introduced: example: timer:within(1 min 5 sec) equivalent to timer:within(65)
* (EQL and Pattern) Mechanism to support EventType Adaptors for legacy Java classes (Enhancement request ESPER-55)
* (EQL and Pattern) Support for != (not equals) in filter expressions (Enhancement request ESPER-63)
* (EQL) Support for select-clause istream and rstream keywords (Enhancement request ESPER-54)
* fixed issue ESPER-58 "IllegalMonitorStateException logged by engine"
* (Doc) Add J2EE example (Enhancement request ESPER-64)
* (Doc) How does one use emit (Enhancement request ESPER-62)
Changes in version 1.1.0
------------------------
* (EQL) Added support for pattern expressions in EQL statements (Enhancement request ESPER-53 Consuming pattern-generated events in EQL)
* (EQL) Added 'case' control flow function
* (EQL) Added 'coalesce' comparison function
* fixed issue ESPER-56 "count(*) always returns 0"
* fixed issue ESPER-59 "Internal Threading Bugs Found"
* fixed issue ESPER-57 "Initialize not resetting types declared via 'insert into'"
* fixed issue ESPER-61 "Having clause not applied in query without group-by and without aggregation functions"
* documentation enhancements
Changes in version 1.0.5
------------------------
* (EQL) Added support for the "first" keyword in output rate limiting for outputting only the first matching event for an interval
* (EQL and Pattern) Added support for XML events represented by a document object model (DOM) instances of org.w3c.dom.Node
* (EQL and Pattern) Added support for Map events represented by a java.util.Map including object values
* (Docs and Examples) New AutoId RFID example for XML event processing, includes simulator for running from the command line
* (Docs and Examples) New chapter on Event Representations
Changes in version 1.0.0
------------------------
* (EQL) Added support for invoking Java library static methods, invoking user-defined static methods, and defining an auto-import list
* (EQL) Sort view ext:sort now also allowing multiple columns to sort on
* (EQL) Added NOT, modulo (%) and SQL string concatention operator (||)
* (EQL) New example 'Market Feed Monitor' which showcases rate calculation and fall-off detection. With a simulator that
can be run from command line.
* (build) Build scripts now build Linux tarball; Shell scripts for compiling and running examples reworked.
Changes in version 0.9.5
------------------------
* (EQL) Capability added to sort output using an "order-by" clause
* (EQL) Support for bit-wise AND (&), OR (|) and XOR(^) operators
* (EQL) Bug fix for allowing boolean expression in select clauses, such as "select a and b from MyEvent..."
* (EQL) Added support for "insert into" thus allowing chains of EQL statements, and merging of event streams
* (Docs and Examples) New 10-minute tutorial; Transaction example simplified
Changes in version 0.9.1
------------------------
* (EQL) Bug fix for statements that contain only aggregation functions in the select clause such as
"select sum(volume) from StockTick". The engine was incorrectly posting an event per event posted
by the stream's window, rather then a single aggregate event.
* (EQL) Bug fix for group-by without output rate limiting. This problem occured using a group-by clause
without output rate limit and resulted in multiple events posted that include prior groups for each event posted
by the window.
* (EQL) New example 'Transaction 3-event challenge' which shows EQL in use for detecting missing events and
computing latency totals overall and grouped. Added scripts for compiling and executing the example.
Changes in version 0.9.0
------------------------------------
* (EQL) Now supporting outer joins for an unlimited number of event streams
* (EQL) Support for output rate limiting based on number of events and time-based, and choice of last or all events
* (EQL) Renamed view "std:last" to "std:lastevent"
* (EQL) New reserved keywords: last, events, output, seconds, minutes
Changes in version 0.8.5
------------------------
* (EQL) Added support for the group-by clause and the having-clause
* (EQL) Added support for aggregation functions in the select and having-clauses; The list of aggregation functions is:
max, min, sum, avg, count, median, stddev, avedev; The "distinct" keyword is also supported for each; The "count(*)" syntax is supported.
* (EQL) Group-by view has been renamed from "std:group" to "std:groupby" since group is a reserved keyword
* (EQL) The univariate statistics view "stat:uni" changed the name of derived event properties to "stddev" and "stddevpa" from formerly
"stdev" and "stdevpa" to stay consistent with the aggregate functions of the same name
Changes in version 0.8.0
------------------------
* (EQL and Event Pattern) Event inheritance and interface implementation support; Added support for interfaces,
abstract classes, superclasses. E.g. select * from IMyEvent (where IMyEvent) is an interface or superclass, and event classes that
implement this interface or extend the superclass match the criteria.
* (EQL and Event Pattern) Added support for simple, mapped, indexed, nested and any combination of these anywhere where
and event property name is expected. E.g. subordinate[3].address(home).city
* (EQL and Event Pattern) Refined exception texts to better indicate syntax errors or messages in validating pattern and EQL statements
during statement creation. Added EPStatementSyntaxException and EPStatementException.
Changes in version 0.7.5
------------------------
* (API) A configuration can now optionally be supplied to an engine instance via the Configuration parameter to EPServiceProviderManager.
This enabled event patterns and EQL to use short event names not requiring making the fully-qualified Java class name optional
* (EQL) Outer joins: left, right and full join on 2 streams
* (EQL) IS NULL, = NULL, IS NOT NULL, <> and != now supported in where clause
* (EQL) New built-in function MAX(a, b,...), MIN(a, b,...)
* (Event Pattern) Use of results in filters, such as "every A=X -> every B=X(objectID=A.objectID)"
* (Event Pattern) improved removal of permanently false patterns (e.g. B arrives in 'A and not B')
* (EQL and Event Pattern) Removed requirement that event names have () postfix, e.g. 'every A=X' equivalent to 'every A=X()'
* (Documentation) new section on builtin functions
* (Examples) Sample ATM added to show simple join
version 0.7.0
-------------
Initial alpha version