Thu, 19 Nov 2015 16:02:04 -0500 |
Adam Chlipala |
Fix condition for installing new cache entries |
Thu, 19 Nov 2015 13:18:58 -0500 |
Adam Chlipala |
Fix a read-after-free bug using a timestamp check |
Thu, 19 Nov 2015 10:31:47 -0500 |
Adam Chlipala |
Fix a few C memory bugs |
Thu, 19 Nov 2015 03:45:39 -0500 |
Ziv Scully |
Fix SQL parser JOIN bug and fix ON clause logic in Sqlcache. |
Thu, 19 Nov 2015 01:59:00 -0500 |
Ziv Scully |
Support nested queries but disable UrFlow for now. |
Wed, 18 Nov 2015 14:48:24 -0500 |
Ziv Scully |
Trivial change to benchmark. |
Tue, 17 Nov 2015 04:08:12 -0500 |
Ziv Scully |
Ran a benchmark! |
Tue, 17 Nov 2015 02:44:37 -0500 |
Ziv Scully |
Make cache flushes happen immediately instead of at end of transaction. |
Sun, 15 Nov 2015 18:10:24 -0500 |
ziv |
Add small benchmark (WIP). |
Sun, 15 Nov 2015 14:18:35 -0500 |
Ziv Scully |
Fix bugs for lock calculation and SQL parsing and add support for tasks. |
Fri, 13 Nov 2015 11:03:09 -0500 |
Ziv Scully |
Finish locking, but it's not yet tested rigorously. |
Fri, 13 Nov 2015 01:05:22 -0500 |
Ziv Scully |
Remove debugging print statement. |
Fri, 13 Nov 2015 01:04:32 -0500 |
Ziv Scully |
Fix issue with one-element caches. Locking still WIP. |
Thu, 12 Nov 2015 16:36:35 -0500 |
Ziv Scully |
Fix committing multiple stores/flushes. Locking is WIP. |
Thu, 12 Nov 2015 11:44:21 -0500 |
Ziv Scully |
Actually use transactional machinery for flushes this time. |
Thu, 12 Nov 2015 10:06:07 -0500 |
Ziv Scully |
Initialize invalidation to NULL! |
Thu, 12 Nov 2015 09:47:20 -0500 |
Ziv Scully |
Make cache flushes safe for transactions (not sure about LRU bump on read). |
Thu, 12 Nov 2015 09:15:50 -0500 |
Ziv Scully |
Simplify C interface. |
Thu, 12 Nov 2015 08:46:51 -0500 |
Ziv Scully |
Merge. |
Wed, 11 Nov 2015 20:01:48 -0500 |
Ziv Scully |
Rewrite LRU cache. Now uses one big hash table and is less buggy. |
Tue, 10 Nov 2015 12:35:00 -0500 |
Ziv Scully |
Fix bug in and clean up free path code. |
Mon, 09 Nov 2015 13:38:04 -0500 |
Ziv Scully |
Add new files missing from previous commit. |
Mon, 09 Nov 2015 13:37:31 -0500 |
Ziv Scully |
Progress on free paths, but consolidation seems to fail more with them. |
Sat, 07 Nov 2015 15:16:44 -0500 |
Ziv Scully |
Fix some table renaming issues. |
Thu, 05 Nov 2015 01:48:42 -0500 |
Ziv Scully |
First draft of more specific formulas for queries. |
Wed, 04 Nov 2015 20:12:07 -0500 |
Ziv Scully |
Consildation of caches understands sqlification. |
Sat, 31 Oct 2015 23:35:42 -0400 |
Ziv Scully |
Merge. |
Wed, 21 Oct 2015 09:18:36 -0400 |
Ziv Scully |
First draft of cache consolidation. |
Mon, 19 Oct 2015 14:42:22 -0400 |
Ziv Scully |
Merge. |
Thu, 15 Oct 2015 00:52:04 -0400 |
Ziv Scully |
Make SQL caches use more of the pure caching machinery, but it's brittle. |
Wed, 14 Oct 2015 23:10:10 -0400 |
Ziv Scully |
Thread state through addCaching more carefully. |
Wed, 14 Oct 2015 20:40:57 -0400 |
Ziv Scully |
Factor out SQL simplification. |
Wed, 14 Oct 2015 15:45:04 -0400 |
Ziv Scully |
Do SQL and pure caching in the same pass. |
Wed, 14 Oct 2015 00:07:00 -0400 |
Ziv Scully |
Hard-code Sqlcache module (in Ur/Web) as effectful and reorder sqlcache.sml. |
Tue, 13 Oct 2015 20:24:37 -0400 |
Ziv Scully |
Fix another mismatch between expunger SQL generation and SQL parser. |
Tue, 13 Oct 2015 14:22:05 -0400 |
Ziv Scully |
Merge bbaren's fix for bug 209. |
Wed, 07 Oct 2015 08:58:08 -0400 |
Ziv Scully |
Fix recording bugs to do with nesting and buffer reallocation. Stop MonoFooify printing spurious errors. |
Wed, 30 Sep 2015 00:33:52 -0400 |
Ziv Scully |
Fix SQL-parsing and declaration-ordering bugs. |
Mon, 28 Sep 2015 22:16:51 -0400 |
Ziv Scully |
Begin work on cache merging. |
Sun, 27 Sep 2015 17:24:57 -0400 |
Ziv Scully |
Fix effectfulness registration toy cache. |
Sun, 27 Sep 2015 17:02:14 -0400 |
Ziv Scully |
Fix bug where pure caching didn't treat FFI applications as effectful. |
Sun, 27 Sep 2015 14:46:12 -0400 |
Ziv Scully |
Use referenced (rather than all) free variables as keys for pure caches. |
Sun, 27 Sep 2015 03:52:14 -0400 |
Ziv Scully |
Pure caching sort of works. |
Mon, 21 Sep 2015 16:45:59 -0400 |
Ziv Scully |
Use new refactored urlification in Sqlcache. |
Mon, 21 Sep 2015 16:07:35 -0400 |
Ziv Scully |
Factor out urlification. |
Mon, 21 Sep 2015 14:54:07 -0400 |
Ziv Scully |
Factor out [Monoize.Fm] to make it accessible to [Sqlcache]. |
Mon, 21 Sep 2015 10:16:55 -0400 |
Ziv Scully |
Revert to revision 2222. |
Sun, 13 Sep 2015 17:02:17 -0400 |
Ziv Scully |
Make Mono.file a record for readability upon extension. |
Sun, 13 Sep 2015 16:02:45 -0400 |
Ziv Scully |
Start work on pure expression caching. |
Sat, 12 Sep 2015 17:11:33 -0400 |
Ziv Scully |
Merge. |
Sat, 15 Aug 2015 23:08:37 -0700 |
Ziv Scully |
Rewrite effectfulness analysis using MonoUtil. |
Sun, 02 Aug 2015 18:37:24 -0700 |
Ziv Scully |
Fix NONE capitalization typo. |
Sun, 02 Aug 2015 18:26:44 -0700 |
Ziv Scully |
Merge. |
Sun, 02 Aug 2015 18:25:42 -0700 |
Ziv Scully |
Sqlcache allows any expression injected into SQL. |
Mon, 20 Jul 2015 23:25:44 -0700 |
Ziv Scully |
Use uniform representation of comparisons for better simplification. |
Mon, 20 Jul 2015 19:49:13 -0700 |
Ziv Scully |
Fix possible formula simplification bug with extra formula' type. |
Sun, 19 Jul 2015 19:12:50 -0700 |
Ziv Scully |
Add parameterless query to caching test. |
Sun, 19 Jul 2015 19:05:16 -0700 |
Ziv Scully |
Merge. |
Sun, 19 Jul 2015 19:03:11 -0700 |
Ziv Scully |
Rename C functions and remove functors nested inside modules. |
Tue, 07 Jul 2015 00:07:24 -0700 |
Ziv Scully |
Add limited support for parsing SQL arithmetic. |
Mon, 06 Jul 2015 01:31:04 -0700 |
Ziv Scully |
Only use string (rather than numeric, etc.) primitives in parsed SQL statements. |
Sun, 05 Jul 2015 23:57:28 -0700 |
Ziv Scully |
Fix bug in redundancy checking and use finer formula for UPDATE statements. |
Tue, 30 Jun 2015 01:56:22 -0700 |
Ziv Scully |
Major DNF-calculation performance decrapification. |
Mon, 29 Jun 2015 01:33:47 -0700 |
Ziv Scully |
Refactored a lot and fixed an and/or swap, but still not good on current test. |
Sun, 28 Jun 2015 12:46:51 -0700 |
Ziv Scully |
Progress on LRU cache but still more known bugs to fix. |
Wed, 06 May 2015 23:11:30 -0400 |
Ziv Scully |
More work factoring out Sqlcache back end. |
Wed, 06 May 2015 14:51:09 -0400 |
Ziv Scully |
Merge. |
Wed, 06 May 2015 14:50:55 -0400 |
Ziv Scully |
Add missing file. |
Wed, 06 May 2015 14:50:29 -0400 |
Ziv Scully |
Factor out cache implementation from Sqlcache. |
Tue, 07 Apr 2015 17:26:53 -0400 |
Ziv Scully |
Merge. |
Tue, 07 Apr 2015 14:18:53 -0400 |
Ziv Scully |
New mouse events oncontextmenu, onmouseenter, and onmouseleave. |
Tue, 31 Mar 2015 04:10:46 -0400 |
Ziv Scully |
Fix type in flush FFI call to option string (rather than string). |
Fri, 27 Mar 2015 11:26:06 -0400 |
Ziv Scully |
Merge. |
Fri, 27 Mar 2015 11:19:15 -0400 |
Ziv Scully |
Simplify example. |
Thu, 11 Dec 2014 02:05:41 -0500 |
Ziv Scully |
Merge. |
Sat, 29 Nov 2014 04:34:41 -0500 |
Ziv Scully |
Remove Sqlcache urlification hack. |
Sat, 29 Nov 2014 03:38:26 -0500 |
Ziv Scully |
Merge. |
Sat, 29 Nov 2014 03:37:59 -0500 |
Ziv Scully |
Basic field-resolution invalidation. |
Mon, 24 Nov 2014 20:47:38 -0500 |
Ziv Scully |
Merge. |
Mon, 24 Nov 2014 20:41:24 -0500 |
Ziv Scully |
Add interface to UnionFind. |
Tue, 11 Nov 2014 04:25:20 -0500 |
Ziv Scully |
More invalidation progress. |
Mon, 10 Nov 2014 22:07:51 -0500 |
Ziv Scully |
Merge. |
Mon, 10 Nov 2014 22:04:40 -0500 |
Ziv Scully |
Progress towards invalidation based on equalities of fields. |
Fri, 31 Oct 2014 09:25:03 -0400 |
Ziv Scully |
Mostly finish effectfulness analysis. |
Tue, 14 Oct 2014 18:07:09 -0400 |
Ziv Scully |
Add mono_inline.sml (which was left out of last commit). |
Tue, 14 Oct 2014 18:05:09 -0400 |
Ziv Scully |
Complete overhaul: cache queries based on immediate query result, not eventual HTML output. |
Mon, 15 Sep 2014 20:01:16 -0400 |
Ziv Scully |
Small cleanup. |
Sat, 13 Sep 2014 19:16:07 -0400 |
Ziv Scully |
Merge. |
Sat, 31 May 2014 22:23:25 -0400 |
Ziv Scully |
Merge. |
Sat, 31 May 2014 03:08:16 -0400 |
Ziv Scully |
Cleans up interface (it's now a command line option) and renames project to "sqlcache" in the all-one-word style. Still has issues to do with concurrency, retrying transactions, and foreign function calls that either rely on state or have side effects. |
Fri, 30 May 2014 12:00:44 -0400 |
Ziv Scully |
Merge. |
Fri, 30 May 2014 12:00:00 -0400 |
Ziv Scully |
Removes DBMS choice override from compiler.sml (which was there for debugging). |
Tue, 27 May 2014 21:38:01 -0400 |
Ziv Scully |
Merge. |
Tue, 27 May 2014 21:15:53 -0400 |
Ziv Scully |
Forgets deleted files. |
Tue, 27 May 2014 21:14:13 -0400 |
Ziv Scully |
Finishes initial prototype, caching parameterless pages with table-match-based invalidation. Still has problems parsing non-Postgres SQL dialects properly. |
Tue, 25 Mar 2014 02:04:06 -0400 |
Ziv Scully |
ML half of initial prototype. (Doesn't compile because there's no C yet.) |
Sat, 08 Mar 2014 05:06:22 -0500 |
Ziv Scully |
Identifies tables read or touched by queries. |
Sun, 20 Dec 2015 13:41:35 -0500 |
Adam Chlipala |
Unnest properly in presence of kind polymorphism |
Tue, 15 Dec 2015 19:58:52 -0500 |
Adam Chlipala |
Fixing dynClass for <tr>s |
Tue, 08 Dec 2015 17:29:24 -0500 |
Adam Chlipala |
Change Postgres schema-checking code to account properly for namespaces |
Sat, 05 Dec 2015 12:12:40 -0500 |
Adam Chlipala |
Document jsFile |
Sat, 05 Dec 2015 12:04:06 -0500 |
Adam Chlipala |
New .urp directive: jsFile |
Fri, 27 Nov 2015 15:28:12 -0500 |
Adam Chlipala |
Fix tricky case of functor signature subsumption |
Wed, 25 Nov 2015 18:48:17 -0500 |
Adam Chlipala |
Reduce: add reduction in some spots previously missed, associated with 'case' return types |
Sun, 22 Nov 2015 10:25:22 -0500 |
Adam Chlipala |
Return to working version mode |
Sun, 22 Nov 2015 10:09:16 -0500 |
Adam Chlipala |
New release |
Sun, 22 Nov 2015 10:03:35 -0500 |
Adam Chlipala |
Make daemon mode support sharing of libraries across projects |
Sun, 01 Nov 2015 17:02:16 -0500 |
Adam Chlipala |
Change behavior of SQL equality to do the intuitive thing for nullable types |
Sun, 01 Nov 2015 16:33:14 -0500 |
Adam Chlipala |
After a tricky debugging session, limit visibility of type-class instances from anonymous modules |
Sun, 01 Nov 2015 14:17:09 -0500 |
Adam Chlipala |
JavaScript versions of a few more functions |
Sun, 01 Nov 2015 12:23:44 -0500 |
Adam Chlipala |
Better client-side error messages for RPC failures |
Sun, 01 Nov 2015 11:55:01 -0500 |
Adam Chlipala |
Basis.fromMilliseconds |
Sat, 31 Oct 2015 19:21:05 -0400 |
Adam Chlipala |
Remove spurious failure about reopening database connection |
Sat, 31 Oct 2015 11:49:30 -0400 |
Adam Chlipala |
Monad.mapR3 |
Sat, 24 Oct 2015 17:23:07 -0400 |
Adam Chlipala |
More Elaborate work to avoid instantiating unification variables with out-of-scope regular variables |
Sun, 18 Oct 2015 16:03:56 -0400 |
Adam Chlipala |
Allow duplicate 'file' directives if paths normalize to same value |
Sun, 18 Oct 2015 14:46:50 -0400 |
Adam Chlipala |
Return to working version mode |
Sun, 18 Oct 2015 14:38:20 -0400 |
Adam Chlipala |
Grandfathered into release: make urweb-mode keep working in Emacs 23 |
Sun, 18 Oct 2015 10:50:59 -0400 |
Adam Chlipala |
Return to working version mode |
Sun, 18 Oct 2015 10:34:24 -0400 |
Adam Chlipala |
New release |
Sat, 17 Oct 2015 11:31:22 -0400 |
Adam Chlipala |
Database-server reconnection for MySQL |
Sat, 17 Oct 2015 11:08:12 -0400 |
Adam Chlipala |
Switching to a more dynamic method of handling database reconnection, restarting transactions |
Sat, 17 Oct 2015 10:49:25 -0400 |
Adam Chlipala |
Start of support for surviving database-server restarts, for Postgres |
Thu, 15 Oct 2015 07:52:37 -0400 |
Adam Chlipala |
Make urweb-mode inherit from prog-mode (contributed by Ziv Scully) |
Sun, 20 Sep 2015 17:46:07 -0400 |
Benjamin Barenblat |
Use correct OpenSSL thread safety macros on OS X (closes #209) |
Thu, 27 Aug 2015 16:28:45 -0400 |
Adam Chlipala |
Proper error message for excessively fancy FFI signatures |
Thu, 20 Aug 2015 15:11:40 -0400 |
Adam Chlipala |
Beautify '-h' output for web servers |
Wed, 19 Aug 2015 10:53:18 -0400 |
Adam Chlipala |
Return to working version mode |
Wed, 19 Aug 2015 10:32:11 -0400 |
Adam Chlipala |
New release |
Sat, 15 Aug 2015 08:10:20 -0400 |
Adam Chlipala |
Add LIKE to the manual |
Sun, 09 Aug 2015 11:14:09 -0400 |
Adam Chlipala |
Fix termination bug in tutorial's isEven/isOdd |
Thu, 06 Aug 2015 12:51:09 -0400 |
Adam Chlipala |
Add '-noEmacs' for 'make test' |
Thu, 06 Aug 2015 10:15:53 -0400 |
Benjamin Barenblat |
Make OpenSSL usage thread-safe (closes #206) |
Thu, 06 Aug 2015 09:57:47 -0400 |
Adam Chlipala |
Change 'make test' to work before 'make install' |
Wed, 29 Jul 2015 10:08:03 -0400 |
Adam Chlipala |
Add a simple 'make test' target |
Thu, 07 May 2015 16:12:06 -0400 |
Julian Squires |
Add onChange handler to radioOption |
Mon, 13 Jul 2015 14:34:30 -0400 |
Julian Squires |
Allow returnBlob and redirect in static protocol |
Sun, 05 Jul 2015 16:11:24 -0400 |
Adam Chlipala |
Add a missed case in CoreUtil.Exp fold |
Sat, 04 Jul 2015 19:24:26 -0400 |
Adam Chlipala |
Tag NULLs with their types in SQL, to help the DBMS do type inference |
Sat, 04 Jul 2015 18:44:52 -0400 |
Adam Chlipala |
Stray character in a comment |
Fri, 03 Jul 2015 17:25:56 -0400 |
Adam Chlipala |
Fix a maddening bug in the comparator for Core constructors |
Thu, 02 Jul 2015 13:02:37 -0400 |
Adam Chlipala |
Add HTML 'align' attribute |
Thu, 02 Jul 2015 12:42:49 -0400 |
Adam Chlipala |
Allow mouse and key events for <body> |
Thu, 11 Jun 2015 19:38:03 -0400 |
Adam Chlipala |
A number of bug fixes in the manual |
Thu, 11 Jun 2015 19:06:32 -0400 |
Adam Chlipala |
Allow apostrophes in capitalized identifiers |
Mon, 08 Jun 2015 11:11:46 -0400 |
Adam Chlipala |
Apply syntax sugar for 'class' attribute to <form> as well |
Wed, 03 Jun 2015 09:55:37 -0400 |
Adam Chlipala |
Adjust new [assert] to work properly from top.ur |
Wed, 03 Jun 2015 15:07:46 +0200 |
Gabriel Riba Faura |
assert function to use with location literal _LOC_ |
Wed, 03 Jun 2015 08:34:23 +0200 |
Gabriel Riba Faura |
location literal _LOC_ |
Thu, 28 May 2015 10:28:15 -0400 |
Adam Chlipala |
Remove duplicate lexer line |
Thu, 28 May 2015 10:23:43 -0400 |
Adam Chlipala |
Handling overflow in integer literals (contributed by Gabriel Riba) |
Wed, 20 May 2015 12:44:28 -0400 |
Adam Chlipala |
Return to working version mode |
Wed, 20 May 2015 12:33:25 -0400 |
Adam Chlipala |
New release |
Thu, 07 May 2015 09:50:37 -0400 |
Julian Squires |
Do not explicitly return false from onclick handler |
Sun, 10 May 2015 12:56:19 -0400 |
Adam Chlipala |
Fix .sql generation to honor 'noMangleSql' in column names |
Sun, 10 May 2015 12:13:12 -0400 |
Adam Chlipala |
Make naughtyDebug use protocol-specific logging |
Mon, 04 May 2015 14:35:07 -0400 |
Julian Squires |
Fix XML indentation in Emacs mode |
Tue, 05 May 2015 14:03:06 -0400 |
Julian Squires |
Treat "style" as starting an expression in urweb-mode |
Mon, 04 May 2015 16:15:01 -0400 |
Julian Squires |
Add urweb-mode command to close current XML tag |
Fri, 24 Apr 2015 16:21:55 -0400 |
Julian Squires |
Allow URIs specified in file directives implicitly |
Mon, 04 May 2015 13:22:29 -0400 |
Julian Squires |
Add fieldset and legend tags |
Sun, 03 May 2015 09:40:13 -0400 |
Adam Chlipala |
Set dummy header lookup function in static.c |
Fri, 24 Apr 2015 10:01:56 -0400 |
Adam Chlipala |
Ignore manual.out |
Fri, 24 Apr 2015 07:51:47 -0400 |
Julian Squires |
Allow file directives to contain slashes |
Fri, 24 Apr 2015 07:43:22 -0400 |
Julian Squires |
Use hyperref in manual |
Thu, 23 Apr 2015 16:37:15 -0400 |
Istvan Chung |
Fix missing SQL name-mangling in table initialization |
Sun, 12 Apr 2015 14:28:27 -0400 |
Adam Chlipala |
Return to working version mode |
Sun, 12 Apr 2015 14:19:02 -0400 |
Adam Chlipala |
New release |
Tue, 07 Apr 2015 14:18:53 -0400 |
Ziv Scully |
New mouse events oncontextmenu, onmouseenter, and onmouseleave. |
Sun, 08 Mar 2015 11:12:28 -0400 |
Adam Chlipala |
Make flattening of reactive HTML trees iterative instead of recursive, to avoid stack overflows |
Sun, 08 Mar 2015 11:05:54 -0400 |
Adam Chlipala |
Fix dynClass JavaScript reversion |
Sun, 08 Mar 2015 10:55:05 -0400 |
Adam Chlipala |
Fix interpretation of 'file' argument paths |
Fri, 06 Mar 2015 09:46:21 -0500 |
Adam Chlipala |
Change MonoReduce to do fixed-pointing, since it sometimes enables more optimizations for itself (e.g., yanking lambdas out of [case]s) |
Thu, 05 Mar 2015 15:05:53 -0500 |
Adam Chlipala |
Document hexadecimal literals |
Thu, 05 Mar 2015 15:03:04 -0500 |
Adam Chlipala |
Hexadecimal integer literals, contributed by Gabriel Riba |
Thu, 05 Mar 2015 14:58:34 -0500 |
Adam Chlipala |
Document new infix operators |
Thu, 05 Mar 2015 14:50:31 -0500 |
Adam Chlipala |
Some new infix operators, contributed by Gabriel Riba |
Tue, 03 Mar 2015 15:55:00 -0500 |
Adam Chlipala |
Support 'dynClass' and 'dynStyle' for <body> |
Mon, 16 Feb 2015 14:52:56 -0500 |
Adam Chlipala |
Evaluate minus and times in MonoOpt |
Sun, 26 Oct 2014 14:07:07 +0000 |
Sergey Mironov |
Add 'download' attribute to <a/>, part of HTML5 |
Sat, 14 Feb 2015 08:27:50 -0500 |
Adam Chlipala |
Return to working version mode |
Sat, 14 Feb 2015 08:17:36 -0500 |
Adam Chlipala |
New release |
Thu, 12 Feb 2015 15:09:26 -0500 |
Adam Chlipala |
The 2nd half of proper CSRF protection related to environment variables |
Wed, 11 Feb 2015 13:12:59 -0500 |
Adam Chlipala |
An Emacs urweb-mode optimization contributed by John Wiegley |
Tue, 10 Feb 2015 09:58:35 -0500 |
Adam Chlipala |
Merge |
Tue, 10 Feb 2015 09:58:20 -0500 |
Adam Chlipala |
Fix resolution of 'file' paths |
Thu, 05 Feb 2015 11:09:25 -0500 |
Adam Chlipala |
Treat getHeader and getenv as vectors for reading request data supplied implicitly by browsers |
Sun, 01 Feb 2015 15:50:54 -0500 |
Adam Chlipala |
Don't allow singleton <button> tags |
Sun, 01 Feb 2015 12:29:14 -0500 |
Adam Chlipala |
A new MonoReduce optimization for lifting 'let' out of field projection; JavaScript compilation for exponentiation |
Wed, 28 Jan 2015 08:47:04 -0500 |
Adam Chlipala |
Improve wildification for records of type-class witnesses |
Thu, 22 Jan 2015 11:26:24 -0500 |
Adam Chlipala |
Fix case issue in name mangling for MySQL |
Thu, 22 Jan 2015 11:00:17 -0500 |
Adam Chlipala |
Reference manual: fix rendering of field removal operators |