- 
					
						:
						version 0.14.1
					 
						
			
				Modernise outputted
				ort-javascript(1).
				Stipulate that any calling environments should be
				compatible with ES2021, altough in reality, ES6 should be
				fine.  Tested against the latest versions of Typescript
				and the dependent ecosystem.
			 
				No longer use basic
				crypt(3)
				for password encryption.  Now require
				
					crypt_newhash(3) (or function with similar
				signature) and family, which use Blowfish encryption.
				This isn't available by default on Linux, but is available
				in
				
					oconfigure, which is now used for regression
				tests of said functionality.
			 
				No longer bundle a copy of b64_ntop.  This is
				part of most systems, and
				
					oconfigure (or equivalent) may be used for
				compatible functions.
 
				Various fixes for
				ort-nodejs(1), from
				
					pull/2257.  This is still experimental and
				lacks validation.
			 
 
- 
					
						:
						version 0.14.0
					 
						
			
				Add initial Rust output.
				This is still experimental and lacks validation.
			 
				Fix how ort-nodejs(1) was handling
				passwords.  Searching on password fields would prior to this have
				failed unilaterally.  Password operations (querying, updating, etc.)
				are now all enforced by regression tests.
			 
				Improve the ort-nodejs(1) exception
				handling for inserts and updates.  It now passes through specific
				constraint errors instead of catching the entire exception.
				Moreover, the exception handler is now documented in the manual, as
				its documentation is very spotty in
				better-sqlite3.
				All of these are now checked in the regression suite.
			 
				Fix how
				ort-c-source(1) would produce
				invalid C code for nested null references.
			 
 
- 
					
						:
						version 0.13.9
					 
						
			
				Add epoch types (dateandepoch) to the
				safe typing regime.  This does not change non-safe-typing
				applications except to add aliases.
 
 
- 
					
						:
						version 0.13.8
					 
						
			
				Tighten up code produced by
				ort-c-source(1)
				in having the correct type for some enumeration and casting to avoid
				spurrious warnings raised by -Weverything.
			 
				Fix output of 
				ort-javascript(1) when using the 
				-value-checkedand-value-selectedclasses.
 
 
- 
					
						:
						version 0.13.7
					 
						
			
				SQL change: indexes are now output as 
				unique_strct__field1_field2instead ofunique_field1_field2.
				This prevents multiple structures with the same unique field(s) from
				having the same index name.
				This only changes the name of the index, so existing indexes won't
				be affected.  However, if removing a unique statement, the
				corresponding index won't be removed as the name won't be found.
				New indexes won't clobber any existing ones because of the prefix
				style.
 
 
- 
					
						:
						version 0.13.6
					 
						
			
				Change parser behaviour: no longer allow for
				queries of the same name within a structure.  Prior to this, the
				rule was that query names must be unique within the query type
				(e.g., iterate).
 
				The reason for this change is to reflect how the code actually
				operates a bit better.
			 
 
- 
					
						:
						version 0.13.5
					 
						
			
				Export bitfields as enumerations in
				ort-nodejs(1).  This makes the
				Node.js output similar to the C output.  While here, perform various
				cleanups to the documentation.
			 
				Add more validation for integer types in
				ort-nodejs(1) validator routines,
				and also have the blobfield return a Buffer.  Make
				sure that high-value bit-fields (e.g., all bits set) aren't
				discarded by the SQLite3 module with range errors: properly fix them
				into their signed format before passing into the database.
 
				Lastly, use bigintinstead ofBigIntin
				ort-nodejs(1) output.
				Fix that the export functions were trying tonewa
				string when converting from aBuffer(harmless).  Fix
				type warnings aboutlastInsertRowidby converting to astringbefore converting it into aBigInt.
 
 
- 
					
						:
						version 0.13.4
					 
						
			
				Considerably improve the documentation of the internal Long
				implementation, which is a utility for the output of
				ort-javascript(1) to convert
				and manipulate 64-bit integers without necessarily having BigNum
				support in the browser.  Also make some small fixes to the code.
			 
 
- 
					
						:
						version 0.13.3
					 
						
			
				Introduce safe typing to the output of
				ort-c-header(1).
				This affects the API for both data types and operations, and
				accounts for the common error of type mis-assignment.
 
				For example, with a structure userwith a row
				identifieridand originator foreign keyouserid, searching for the originator user erroneously
				usingid.  In prior versions, bothidandouseridwereint64_t, which made it easy
				to use one instead of the other.  With safe typing, two new types ofuser_idanduser_ouseridexist, and may
				not be set to each other without using setter and getter functions.
 
				By default, safe typing is not enabled and types may be mixed.  To
				ease transitioning between safe and un-safe types, the setter and
				getter functions are emitted for both forms, and (for example)
				user_idis also emitted for un-safe typing as a simple
				alias forint64_t, so existing code need not be
				modified.
 
				Safe types are still a work in progress, with the implementation not
				quite finalised until the next minor release.
			 
 
- 
					
						:
						version 0.13.2
					 
						
			
				Minimal change to the ort(3) API in
				exporting the full chain of fields in each sub-field referencing
				component of searches (distinct, aggregate, etc.).  This is
				informative, and currently only used in
				ort-json(1) and
				ort_lang_json(3).
			 
 
- 
					
						:
						version 0.13.1
					 
						
			
				Minimal change to the ort(3) API in
				exporting the full chain of fields in each query component.
				This is informative, and currently only used in
				ort-json(1) and
				ort_lang_json(3).
			 
 
- 
					
						:
						version 0.13.0
					 
						
			
				Change the way that
				ort-sqldiff(1) handles unique
				fields and unique tuples.  Prior to this, these would be output
				directly into the tables as UNIQUEstatements, which
				unfortunately can't be modified with SQLite after creation.
 
				Now, ort-sqldiff(1) outputs
				UNIQUE INDEXstatements for these components.  These
				can be added and dropped at will, making migration between databases
				much easier.
 
				This requires a minor version bump and makes
				ort-sqldiff(1) incompatible between
				versions, as existing UNIQUEstatements may not be shed.
				Existing databases will need to be dumped and re-inserted.
 
 
- 
					
						:
						version 0.12.12
					 
						
			
				Add ability to override the namespace name generated by
				ort_lang_javascript(3).
				Distribute a ort-version.h header with version information.
			 
 
- 
					
						:
						version 0.12.11
					 
						
			
				Add ability to specify the namespace output by
				ort_lang_javascript(3) as 
				exported.
				Distribute a ort-version.h header with version information.
			 
 
- 
					
						:
						version 0.12.10
					 
						
			
				Add significant regression tests to the Node.js validators,
				normalising their behaviour in some cases.
				Add ability to break apart
				ort-nodejs(1) output into multiple files.
			 
 
- 
					
						:
						version 0.12.9
					 
- 
					
						:
						version 0.12.8
					 
						
			
				Re-write internals of auditing system.  These now use the internal
				ort_audit(3) function.  The output of
				ort-audit(1) has been formalised and
				is now documented (it differs from the prior output).
			 
				Formalise the output of
				ort-audit-json(1) and include
				the countoperation in its output.
				For coherence with the program name, output straight-up JSON and
				have a flag -s for wrapping the object in JavaScript.
 
				Rename ort_diff_freeto 
				ort_diffq_free(3) for
				consistency.
 
				Remove ort-audit-gv, which isn't really useful.
 
 
- 
					
						:
						version 0.12.7
					 
						
			
				Add callback mechanism to ort-json.ts.
			 
 
- 
					
						:
						version 0.12.6
					 
- 
					
						:
						version 0.12.5
					 
						
			
				Add some new methods to the generated ort.Longoutput with
				ort-javascript(1) to make it
				easier for front-ends to work with 64-bit integers.  Add regression
				tests for these.
 
				Start work on a ort-c-manpage(not yet released) that
				will allow a C API to be output as a
				mdoc(7) document.
				I personally use this because it makes scanning for functions faster
				than looking in the header files.
 
 
- 
					
						:
						version 0.12.4
					 
						
			
				Regression tests for internal JavaScript (ortJson.Long)
				functions.  No change to code, but addingorand some
				documentation.  Also relax some needless constraints in
				ort-json.ts.
 
				Fix a bug in ort-sqldiff(1) where
				structfields were considered SQL columns.
 
 
- 
					
						:
						version 0.12.1
					 
						
			
				A number of improvements to the ort-json.ts machinery.
				Probably not going to change any normal usage.
			 
 
- 
					
						:
						version 0.12.0
					 
						
			
				Introduce a significant change where names in
				ort(5) configurations are internally
				converted to lowercase.  This means that all output will use the
				lowercase versions of the read names, which affects APIs.
			 
				Why is this a good idea?  Largely because it keeps APIs consistent
				with changing (for example) structure names, which is already
				accepted as not a change because structure names are case
				insensitive.
 
				It also cleans up some inconsistency where some fields (e.g., roles)
				were lowercased already, while most (structure names, field names,
				explicit query naming, etc.) were not.
			 
 
- 
					
						:
						version 0.11.18
					 
						
			
				Install the manual and package configuration for
				ort_lang_javascript(3), 
				which creates TypeScript front-end code.
				Also tighten down role name case insensitivity and fix serialisation
				of empty role objects in ort-json.ts.
			 
 
- 
					
						:
						version 0.11.16
					 
						
			
				Tiny changes to speed up TypeScript routines.
			 
 
- 
					
						:
						version 0.11.15
					 
- 
					
						:
						version 0.11.13
					 
						
			
				Minor fix in handling UTF-8 labels and converting to and from JSON.
				Have ort-xliff(1) properly handle XML
				special characters by on-the-fly encoding and decoding, lifting the
				restriction of not being able to use < in labels.
 
 
- 
					
						:
						version 0.11.12
					 
						
			
				Fix parsing and writing of limit/offset pairs.
				Allow parameter-less search statements.
			 
 
- 
					
						:
						version 0.11.11
					 
						
			
				Enable the exported library for
				ort_lang_nodejs(3).
				This is still experimental, however.
			 
				Fix how null references (a structto a foreign key that
				might benull) was handled both in the generated C
				source and in node.js output.  Both failed for different reasons.
 
				Continued work on ort-json.ts.
			 
 
- 
					
						:
						version 0.11.10
					 
						
			
				Relax the constraint where overlapping roles applied to the same
				operation would error out.
				Now we merely warn about them.
			 
 
- 
					
						:
						version 0.11.10
					 
						
			
				Include the ability to convert the JSON representation of a
				configuration as provided by 
				ort-json(1) back into a
				ort(5).
				This is part of the ort-json.ts file.
			 
 
- 
					
						:
						version 0.11.9
					 
						
			
				Include a formatter for the JSON representation produced by
				ort-json(1).
			 
 
- 
					
						:
						version 0.11.8
					 
- 
					
						:
						version 0.11.7
					 
						
			
				Enforce that the defaultaction foractuporactdelhas either anullfield or a
				default.  This prevents the database from defaulting to anullvalue, which may conflict with the configuration
				and thus expectations of the code.
 
				Do the same for the nullifyaction, requiring that the
				field benull.
 
				Rename some parts of the ort-json(1)
				TypeScript definitions file. 
				Add in some forgotten fields to the definitions.
			 
 
- 
					
						:
						version 0.11.6
					 
						
			
				Make sure that distincton alistoriteratecorrectly declare the
				required macros in
				ort-c-header(1).
				Found by the expanded regression suite.
 
				Fix how grouprowqueries, which useLEFT OUTER JOIN, don't prematurely terminate quoted
				strings.  Found by the expanded regression suite.
 
				Fix how empty iterators would cause bad
				ort-nodejs(1) to be emitted.
			 
				Internally, convert front-end utilities to properly emit output to a
				passed-in file stream instead of assuming stdout.  This
				way, these may be converted into libraries for use within other systems.
 
				Introduce
				ort-json(1), via
				ort_lang_json(3), which converts
				a configuration into JSON.
				These are still very new, but heavily tested.
			 
 
- 
					
						:
						version 0.11.4
					 
						
			
				Export changes to the rolesstatement in
				ort_diff(3) field results.
				Also add full support for theinsert;updateanddelete; andlist,search, anditerate.
				This completes full difference coverage.
				All (or near enough) of these differences are encoded in the
				regression suite.
 
				While doing all this, push plenty of documentation from the header
				file into
				ort(3).
			 
 
- 
					
						:
						version 0.11.2
					 
						
			
				Reconsider white-space handling in comments.  Prior to this,
				consecutive white-space collapsed into the first white-space.
				This was a problem for two reasons: first, Markdown and other common
				comment formats recognise multiple newlines to separate blocks.
				More significantly, a CRLF end of line would convert into a blank CR
				(instead of a LF).  Modify the system, thus, to accept comments
				as-is except for CRLF, which is reduced to LF.
				This makes diffing much more consistent as well.
			 
 
- 
					
						:
						version 0.11.1
					 
						
			
				Continue adding functionality to
				ort-diff(1) via
				ort_diff(3).
				No functional changes.
				Enumerations, bit-fields, structure uniques, and structure fields
				are now fully covered by the interface.
			 
 
- 
					
						:
						version 0.11.0
					 
						
			
				Introduce 
				ort-diff(1), which works off the back of 
				ort_diff(3) in producing the semantic
				differences between two configurations.
				This is now being used within
				ort-sqldiff(1), which has been
				considerably simplified.
				The function is still incomplete: it doesn't record all differences.
				So far, it returns enough to be fully used by
				ort-sqldiff(1).
			 
				While here, fully document all of the transformations possible in
				ort-sqldiff(1) and also tighten
				down on some destructive changes (e.g., allowing type changes) in
				prior versions.
			 
				The new difference engine has introduced a significant number of
				regression tests.
				The documented transformations of the SQL engine are also now
				exhaustively tested in the regression suite.
			 
 
- 
					
						:
						version 0.10.3
					 
						
			
				Start installing the ort library.
				This includes header, library code, manpages, and a pkgconfig.
			 
 
- 
					
						:
						version 0.10.2
					 
						
			
				Bug-fix:
				make sure that
				ort-javascript(1) correctly 
				handles numbers and strings when formatting.  This was not caught
				by the regression framework because ts.transpileaccepts the type-mangling code whiletscdoes not.
				Fixed and added regression tests that force the issue.
 
 
- 
					
						:
						version 0.10.1
					 
						
			
				Bug-fix:
				ort-c-source(1) was not generating
				the internal db_xxxx_fill_rfunctions in some cases,
				even though required by query functions.
 
				Document the db_open_loggingfunction in
				ort-c-header(1).
 
 
- 
					
						:
						version 0.10.0
					 
						
			
				Major change: integer values are now JSON-serialised as
				strings intead of numbers.
				This affects
				ort-c-header(1)'s JSON export
				interface,
				ort-c-header(1)'s JSON import
				interface, and most importantly,
				ort-javascript(1)'s typing of
				integers as stringas well as ofnumber.
 
				This change completely necessary because of JavaScript's inability
				to parse integers with more than 53 bits and the necessity to handle
				full 64-bit numbers.
				While JSON can accept arbitrary-precision numbers if used purely as
				a transport protocol, it's more portable to just use a string
				encoding.
			 
				The only user-facing code this might affect is custom callbacks that
				perform numeric operations.
				These functions will now also need to handle string values.
				This is reflected in the TypeScript type annotations, so any current
				numeric operations on values passed to these functions should raise
				errors or at least warnings.
				There is now a ortns.Longclass modelled after
				Long.js that's also
				used internally which can perform 64-bit operations.
 
				The code generated by 
				ort-c-header(1) and
				ort-javascript(1) for working
				with deserialised data can handle either string or numeric
				(old-style) values, so new front-ends can work with old back-ends.
				The reverse is not true.
			 
				While the proper (and simpler) way to store integers in
				ort-javascript(1) would be
				BigInt, this isn't yet standard across browsers, and
				would require alternative encoding during transit anyway (JSON
				doesn't recognise it).  The current implementation is portable
				across all browsers.
 
				Also, and without much of an introduction:
				ort-nodejs(1).
				This experimental back-end generator builds a
				Node.js back-end.
				This generates an API very similar to that of
				ort-c-header(1), making it easy to
				transition between languages.
				For now, it does not provide comparable security to
				the C implementation.
			 
 
- 
					
						:
						version 0.9.1
					 
						
			
				Output change: do not have delete statements return a
				value.
			 
				Output change: the output of
				ort-javascript(1) is now
				sensitive to fields that are not exported.
				This applies to fully unexported (i.e., those marked with
				noexportor passwords) and having optional fields
				(those not exported per role) to be checked and behaviour if not
				found documented and regression-tested.
 
				Output change: full support for binary blobs in
				ort-javascript(1) by using
				base64 encoding throughout.
				Those wishing to use the binary data will need to use custom
				callbacks with (for example) Buffer.from()to convert
				from base64 to binary.
 
				Considerable improvements to the output of
				ort-javascript(1) and the
				documentation itself.
				This has no functional change, but introduces more TypeScript idioms
				such as constandreadonly.
 
 
- 
					
						:
						version 0.9.0
					 
						
			
				Output and configuration change: 
				ort-javascript(1) no longer
				emits the un-documented and hard-coded not given (with the
				hard-codednotgiven class) for labelling null enumeration
				values.
				These are now represented by the isnull label documented in
				ort(5).
				This is similar to bit-fields.
 
				Output change:
				ort-javascript(1) no longer
				emits JavaScript—only TypeScript as if -t were passed.
				This is because straight-up JavaScript is just too unsafe.
				Any consumers of the JavaScript output will now need to use the 
				TypeScript transpiler.
				This necessitates a minor version bump.
				Any future JavaScript features will all be TypeScript.
			 
				In doing so, use TypeDoc instead of 
				jsdoc.
			 
				Split out lots of boilerplate code for
				ort-javascript(1) into a file
				pulled in during parse.
				The location of this boilerplate may be set with -S, just
				like for ort-c-source(1).
				This does not affect the behaviour of generated code.
			 
				Output change:
				Use checked="checked"instead ofchecked="true"(same withselected) for
				the-value-checked,-bits-checked, and-enum-selectclass fills generated by
				ort-javascript(1).
				This is more standards compliant.
 
				Output change:
				the undocumented string unset was emitted for bit-fields that
				don't have corresponding labels when formatted.
				It is a documented empty string.
				Also handle missing individual labels and so on.
 
				Add a large regression suite to tests for the behaviour documented
				in both ort-javascript(1) and
				the generated documentation.
			 
				Be more explicit as to why the > character is not allowed
				and further disallow empty labels.
				Clarify the maximum and minimum values for bit-fields and
				enumerations.
				(Lift earlier restriction of 32 bits after testing on a variety of
				machines.)
 
 
- 
					
						:
						version 0.8.16
					 
						
			
				In the documentation, clarify native, meta, and user-defined types.
				Clarify that sub-structure references may not be recursive.
				While there, also add some query examples and clarify the docs
				for distinct and grouping queries.
			 
				Only accept logical operators on integer and bit types.
			 
				Allow string and unary operators (and document as such) for
				grouping queries.
			 
				Limit enumerations to 32-bit values and prevent overflow.
			 
				When generating validation functions for the C API, don't emit a
				wrapper function if not emitting limiting code—instead,
				simply use the kcgi(3)
				function itself as the validator.
				This saves on superfluous generated code.
 
				Don't allow countquery type to have password equality
				checks.
				This never worked, but now we explicitly check for it.
 
				Don't emit db_xxx_fill_rfunctions if there are no
				queries that require it.
				This saves on superfluous generated code that would otherwise raise
				warnings during compilation.
 
 
- 
					
						:
						version 0.8.15
					 
						
			
				Bug-fix: if errors occur when parsing files with
				ort-sqldiff(1), properly return
				with an error code.
				Earlier, this was not returning an error code.
			 
				Clarify the ort-sqldiff(1)
				documentation with regard to exactly the cases that cause errors.
				Create a regression suite to test for this.
			 
				Allow for enumfields to have a default type.
				Allow forpasswordfields to acceptisnullornotnulloperations.
 
				Remove several fields in ort.h used only by the C front-end,
				such as the capitalised name of structures.  These add moving parts
				with few discernable benefits.
			 
				Complete removal of resolution fields from ort.h.
				These fields were the superfluous names attached to (for example)
				upgrade references.
				Earlier, these were required because the names were resolved after
				parsing, during the linking phase.
				A new, safer internal API is used instead.
				This effort has resulted in a much cleaner API and a significant
				number of regression tests.
 
 
- 
					
						:
						version 0.8.14
					 
						
			
				Bug-fix: the grouprowand associated row operation
				were not being written by ort(1).
 
				Bug-fix: the ordertype was not being written by
				ort(1).
 
				Bug-fix: the distinctkeyword on the local structure
				was not being printed properly by ort(1).
 
				When running ort-sqldiff(1), be
				more selective on which fieldattribute changes will
				trigger an error.
 
				Significant upgrade to the internals: instead of haphazardly
				resolving names to object components (e.g., the field names in
				foreign references), do so in a dedicated pass by way of resolver
				objects.
			 
				This simplifies the final parsed tree: where before both the name
				and resolved field were part of (for example) an update reference,
				now only the resolved field object exists.
			 
				In doing so, this has made several structures unnecessary, such as
				struct bref.  This and others like it existed solely to
				carry both the name of the field to resolve and the results
				of that resolution.
 
				Many many new regression tests have been added to reflect the checks
				that occur during linking.
			 
				Other internal APIs and files were moved around for clarity: the
				C-generating files are now prefixed with c , the library no
				longer contains front-end objects, etc.
 
 
- 
					
						:
						version 0.8.13
					 
						
			
				When querying with a password entry, having a non-terminal password
				field in the list of search fields would generate an incorrect
				ordering when assigning to SQL parameters.
				This has been fixed and the code (and documentation) cleaned up and
				simplified.
			 
				Allow unary password constraint operations in update queries.
			 
				Fix how password nullfields are checked for.
				While there, consider howNULLvalues passed as the
				password are processed.
				Before they were not at all.
 
 
- 
					
						:
						version 0.8.10
					 
						
			
				Fix where auto-valued enumerations weren't auto-value-ing.
			 
 
- 
					
						:
						version 0.8.8
					 
						
			
				Enable and verify portability in the generated source code for a
				large number of systems.
				This made possible by the latest version of
				oconfigure.
			 
 
- 
					
						:
						version 0.8.7
					 
						
			
				Significant internal restructuring for clarity.
				Enable grouprow, which groups rows by column then
				reduces them to a single row with aminrowormaxrow.
				At this time, this is limited to a single grouping column and
				maximum/minimum column.
 
 
- 
					
						:
						version 0.8.6
					 
- 
					
						:
						version 0.8.5
					 
						
			
				Possibly API-breaking changes: update functions
				declared without constraints no longer emit a superfluous
				byin the generated function names.  That is,update [xxx];will no longer append a hanging_byto the function name.
 
				Anonymous update functions (i.e., without a name) now
				have their modification type emitted in the function name.
				This is to prevent name collisions from, e.g.,update foo incandupdate foo dec.
 
				Have the strsetkeyword for update modifiers set the
				raw password value instead of hashing.
 
				Bring up to date with latest 
				oconfigure.
			 
 
- 
					
						:
						version 0.8.2
					 
						
			
				Have passwords accept both eqandneqsearch operators.
 
				Following the database library switch in release 0.8.0, update
				functions no longer return <0 on error, as error conditions in
				the database trigger program exit.  The precise return value is now
				zero on failure, non-zero on success; however, for backwards
				compatibility, <0 shall not be returned so these code-paths are
				not followed.
			 
				Add streqandstrneqsearch operators and
				update constraints for passwords.
				(For non-passwords, these are equivalent toeqandneq.)
				These operate on the raw hash instead of the password.
 
				For C source, don't generate INSERTSQL if it's not
				going to be used.
				This has no impact on running code, but reduces generated code size
				ever so slightly.
 
 
- 
					
						:
						version 0.8.0
					 
						
			
				Possibly API-breaking changes: now using
				sqlbox instead of 
				ksql for the database
				access library.
				This is due to the performance benefits and simpler API.
				The library also mandates safe operation instead of making it
				optional, so (for example) all database operations must be specified
				in advance.
				Specifically, it will no longer accept SQL not passed at start.
			 
				Second, make -s the default for
				ort-c-source(1) and
				ort-c-header(1).
				The underlying database access library only supports split-process
				mode, versus ksql which
				also had an unsafe mode.
 
				Third, and most significantly, require using
				struct ortinstead of having direct access tostruct sqlbox(wasstruct ksql).
				This mirrors the situation of roles being enabled.
				If you have code that did not use roles and directly used thestruct ksqlto interface with the database via custom
				strings, the code will not to be re-written to use safer
				conventions.
 
 
- 
					
						:
						version 0.7.8
					 
						
			
				Allow the formatfunction of 
				ort-javascript(1)
				accept anullclass name parameter, which switches into
				element-replacement mode.
				While here, improve the 
				style(9) of the
				generated code and add some extra documentation.
				Also continue to add more content to the
				ort-javascript(1)
				manpage regarding namespacing and class construction.
 
 
- 
					
						:
						version 0.7.7
					 
						
			
				Significantly improve manpage documentation.
				Have generated code adhere more closely to
				style(9) when
				appropriate.
			 
				This release features lots of internal improvements to code
				readability, both in terms of documentation and style.
			 
				Most importantly, it's now possible to use --strictwhen compiling the output of 
				ort-javascript(1)'s 
				TypeScript output.
 
 
- 
					
						:
						version 0.7.6
					 
						
			
				Add the countquery type and its associated C API
				functions.
				This is essentiallytheCOUNTSQL command.
				It has its own role entry like the other query types.
				Clean up whitespace and line breaking in the C API output, while
				here.
 
 
- 
					
						:
						version 0.7.5
					 
						
			
				Add boundary values for enumerations.
				In the C interface, this is BITI_xxx__MAX, wherexxxis the name of the enumeration.
				For Java or TypeScript, this isBITI__MAXon the
				enumeration's object.
				Also fix a line termination bug.
 
 
- 
					
						:
						version 0.7.4
					 
						
			
				When using concatenation (the concatoperator) for a
				field with possibly-nullvalues, wrap the field with aCOALESCEstatement.
				This prevents the foo = empty || yourval expression, which evaluates
				into another empty instead of the desiredyourval.
 
				Make code and documentation consistent for updategenerated function.
 
 
- 
					
						:
						version 0.7.3
					 
						
			
				Clarify the functionality of -d mode in ort-sqldiff(1).
				Also make it work with bitfields and expand its operation for
				enumerations so as not to raise false positives during an upgrade.
			 
 
- 
					
						:
						version 0.7.2
					 
						
			
				Rename kwebapp toopenradtool !
				This means that all binaries prefixed withkwebapp-are now prefixed with the simplerort-.
				Also, the JavaScript/TypeScript namespace isortinstead ofkwebappand code produced by the C API
				with roles usesstruct ortandenum 
					ort_roleinstead of the earlierkwbp.
 
				While here, clean up a lot of documentation, especially in
				ort(5), and also simplify several data
				structures.
			 
 
- 
					
						:
						version 0.6.13
					 
						
			
				Several versions in a row where I screwed up small things found 
				only after release.
				And then again.
				(Then one more time.)
				Sorry!
			 
				Add the string concatenation operator (concat) for 
				updating fields.
				Now produces code usable on musl Linux thanks to 
				Duncaen (alongside the
				earlier support for glibc).
				Also produces code running properly on FreeBSD.
				Stop using a deprecated function in 
				ksql and use the safe
				version instead.
 
 
- 
					
						:
						version 0.6.9
					 
						
			
				TypeScript now errors out if NodeListOfis used instead
				ofHTMLCollectionOf, so use the proper invocation.
 
 
- 
					
						:
						version 0.6.8
					 
						
			
				Forgot to zero some allocated memory in uniquestatements.
				Found with valgrind.
 
 
- 
					
						:
						version 0.6.7
					 
						
			
				Allow kwebapp-sqldiff(1) to
				optionally produce drop table commands.
 
				Fix that custom handlers are invoked for null values if null values
				are allowed by the configuration.
			 
				Add fillArrayByClass, which is likefillArraybut invoked over matching classes.
 
				Begin migration (internally) to new name, openradtool.
			 
 
- 
					
						:
						version 0.6.6
					 
						
			
				Add the fillArrayOrHide,fillArrayOrShow,fillByClass, andfillInnerByClassmethods
				to the TypeScript and JavaScript output.
				The former two captures common uses offillArray:
				hiding or showing an element if there are non-zero elements in the
				given array.
				The latter are convenience methods of wrapping afillinvocation with agetElementsByClassName.
 
				Make custom callbacks in the JavaScript/TypeScript output override
				the defaults, instead of coming beforehand.
				Document this behaviour.
				(Before, the order was unspecified.)
			 
				Re-organise internals for better library support.
				The library isn't exported, but may be (and is) used.
				No functional change.
			 
				Make defaultkeyword be handled when emitted
				configurations.
 
 
- 
					
						:
						version 0.6.5
					 
						
			
				Add defaultsupport for text, emails, and dates.
 
 
- 
					
						:
						version 0.6.4
					 
						
			
				Make sure that ksql(3) is
				configured for foreign keys.
			 
 
- 
					
						:
						version 0.6.3
					 
						
			
				Take uniquestatements into account when warning
				whether asearchstatement might return multiple
				results.
				Also add some examples for usingunique.
 
				Fix a crash in kwebapp-xliff(1).
			 
 
- 
					
						:
						version 0.6.2
					 
						
			
				Same as 0.6.1 except a small fix for packaging.
					Below is the message from 0.6.1.
			 
				Add ability to convert from JSON back into objects.
				This uses jsmn,
				as it's simple, fast, and easy to bundle directly into the sources.
				See the -Jflag in 
				kwebapp-c-header(1) and
				kwebapp-c-source(1) for details.
 
 
- 
					
						:
						version 0.6.1
					 
						
			
				Add ability to convert from JSON back into objects.
				This uses jsmn,
				as it's simple, fast, and easy to bundle directly into the sources.
				See the -Jflag in 
				kwebapp-c-header(1) and
				kwebapp-c-source(1) for details.
 
 
- 
					
						:
						version 0.6.0
					 
						
			
				Allow configuration files to be broken apart for several applications.
				Now, all kwebapp utilities may be invoked
				with multiple files per configuration.
				This has made kwebapp-sqldiff(1)
				and kwebapp-xliff(1) have
				slightly awkward syntax for many-many invocations, 
				but the usual UNIX conventions of standard input and option parsing
				are respected.
				The existing calling convention is also still usable.
			 
				For kwebapp-sqldiff(1),
				introduce the concept of a default value that's used in ALTER
					TABLEstatements for new columns.
				This currently is only defined for number types.
				The default is documented in kwebapp(5).
 
				Rename xxx-yyy-datetoxxx-yyy-date-valuefor consistency (oops!), then addxxx-yyy-date-text.
 
 
- 
					
						:
						version 0.5.7
					 
						
			
				Have several new class recognised in fillmethods as
				generated by kwebapp-javascript(1).
				Thexxx-yyy-bits-checkedis now recognised forbitandbitstypes and it will check input
				boxes whose value is covered by the field's value.
				Thexxx-yyy-date, for ISO 8601 formatting ofepochanddatetypes.
				Lastly,xxx-yyy-value-checkedfor checking general
				input boxes matching input values.
 
				All of these is documented in the manpage and in the output jsdoc.
			 
 
- 
					
						:
						version 0.5.6
					 
						
			
				Fix TypeScript generation for enumerations.
				Invert logic for language selection so that language not found gets
				default.
			 
 
- 
					
						:
						version 0.5.5
					 
						
			
				Significantly update the TypeScript functionality of kwebapp-javascript(1):
				stipulate callback function types for the custom format handler.
			 
 
- 
					
						:
						version 0.5.4
					 
- 
					
						:
						version 0.5.3
					 
						
			
				Allow a copy mode -c in kwebapp-xliff(1).
				Also don't allow tags (the < character) in jslabelphrases.
				Fix specifying languagejslabelfor special phrases inbits.
 
 
- 
					
						:
						version 0.5.2
					 
						
			
				Full translation capabilities!
				Now all jslabelstrings may be translated out-of-band
				into the appropriatejslabel.xxxlabels using the
				industry-standard XLIFF 1.2 format.
				Just use kwebapp-xliff(1) to
				extract translatable strings, edit the content, then merge with the
				original configuration.
				The output can then be piped into kwebapp-javascript(1)
				for dynamic per-language formatting!
 
 
- 
					
						:
						version 0.5.1
					 
						
			
				Clean up makeoutput by putting version information
				into its own header file.
 
				Continue adding in TypeScript type information.
			 
				Multi-language support: re-tool the jslabelfeature to
				allow for multiple languages that detect the HTML (or XML)
				document's root language and only produce output for that language.
				This uses thejslabel.langsyntax.
				Also warn more about missing labels and be clearer on what to do
				when label information isn't found.
				Furthermore, theunsetkeyword has been changed toisunsetand theisnullkeyword has also been added.
				There is no longer a hard-codednot given value, and the
				class set on null values is nowkwbp-nullinstead ofnotgiven.
 
 
- 
					
						:
						version 0.5.0
					 
						
			
				Hello, Linux!
				The system now supports compiling on Linux and other non-OpenBSD systems.
				This has been enabled by bringing up to date with oconfigure
				and adding portability shims for password hashing and other tools.
			 
				I'm also pleased to announce TypeScript
				integration in kwebapp-javascript(1).
				This is still under development, but now exports proper TypeScript
				classes, interfaces, and so on.
			 
 
- 
					
						:
						version 0.4.10
					 
- 
					
						:
						version 0.4.9
					 
						
			
				Bring up to date with oconfigure
				and also use newest safety mechanisms (the result interface)
				from ksql.
 
 
- 
					
						:
						version 0.4.8
					 
						
			
				Repair header inclusion (kcgijson.h
				requires kcgi.h) for kwebapp-c-source(1).
				Bring up to date with newest ksql, which requires
				the default role have permission to open the database.
			 
 
- 
					
						:
						version 0.4.7
					 
- 
					
						:
						version 0.4.6
					 
						
			
				Fully switch over to ksql(3)'s roles for
				database management.
				Also add KWBP_VERSIONandKWBP_VSTAMPto
				the header file.
 
 
- 
					
						:
						version 0.4.5
					 
						
			
				Significantly expand the auditing capability to show both the export
				and access to data.
				Before, the concepts were too closely linked.
				Now, both the JSON and non-JSON output are careful to note which
				data is simply accessable, and which may be exported as well (and
				via which paths through the code).
			 
				Also fix code output by non-role-based systems.
			 
 
- 
					
						:
						version 0.4.4
					 
						
			
				Fix the noexportempty statement, which was causing
				assertions when invoked in certain situations.
				Also start using ksql(3)'s stored
				statement functionality, which improves security.
				Add partial support for roles within ksql(3) as well, but leave them
				unimplemented for the time being.
 
 
- 
					
						:
						version 0.4.3
					 
						
			
				Fix issues/2,
				allowing limits, offsets, and orderings to come after an empty
				WHERE statement.
 
				Allow noexportin a structure's roles to accept an
				empty name, which indicates that no fields should be exported.
 
				Significantly chop the size of the output JavaScript file from
				kwebapp-javascript(1).
				Reduction of nearly 40% from the file size of the last version!
				This is a savings in code size along—the bulk of the files
				are often comments.
			 
 
- 
					
						:
						version 0.4.2
					 
						
			
				Support auto-numbering of enumerations.
				The scheme is to start at the maximum assigned number plus one or
				zero, whichever is greater, and assign incrementally in order of
				appearance.
			 
				Add the datepseudo-type that aliasesepochbut uses the date validation input.
 
 
- 
					
						:
						version 0.4.1
					 
						
			
				Fix: LIMITset goes afterORDER BY.
 
 
- 
					
						:
						version 0.4.0
					 
						
			
				Split kwebapp(1) into kwebapp-c-header(1), kwebapp-c-source(1), kwebapp-javascript(1),
				kwebapp-sql(1), and kwebapp-sqldiff(1).
				The historical calling conventions of using kwebapp(1) with output flags is no
				longer accepted.
			 
				Add kwebapp-audit(1).
				This tool allows configurations to be audited for role permissions.
				It effectively takes a configuration and determines all possible
				access (data access, modify, etc.) available to a given role and
				produces a report.
				Reports can be on the command-line or JSON.
				A sample implementation of the JSON file is installed.
			 
				Allow for commentstrings to be associated with roles.
 
				The audit functionality is part of a project generously funded by
				CAPEM Solutions, Inc.
				Thank you!
			 
 
- 
					
						:
						version 0.3.9
					 
						
			
				Allow for updateanddeleteto operate
				without constraints.
				See kwebapp(5) for syntax.
				Also add transaction call-through functions to the generated C API.
				This is necessary in role-based mode since the underlying
				ksql API is shielded.
				These are documented in kwebapp(1).
 
				Fix a crash when having limitstatements withenumtypes.
 
 
- 
					
						:
						version 0.3.8
					 
						
			
				Lift the restriction on alias counts (total number of inner joins)
				from 26 to 17576.
				This can easily be expanded further: the limitation is purely for
				simplicity's sake.
			 
				Add the distinctfield to queries.
				This field, in its basic form, enforced the SQLDISTINCTkeyword.
				However, it can also be used for nested fields in a structure,
				effectively only returning distinct rows of nested structures.
				The canonical example is returning only distinct album fields that
				arestructforeign key references of a track table.
				All of this is documented in kwebapp(5).
 
 
- 
					
						:
						version 0.3.7
					 
						
			
				Bug-fixes in created C code to account for line-breaking long SQL
				statements.
				(This is an in-progress effort.)
				Also add the unset jslabelstatement for bit-fields.
				This allows the generated JavaScriptformat()function
				to provide a value if the field exists but has not been set with any
				bits.
				(This is yet to be documented for kwebapp(1) as the feature is still
				experimental.)
 
 
- 
					
						:
						version 0.3.6
					 
						
			
				Lots of new features!
				Add the orderstatement for orderinglistanditerateresults.
				It can also act as a way to define single results over non-unique
				fields by combining thesearchstatement withlimit.
				Allow for limit offsets by extending thelimitsyntax.
				Lastly, introduce thebitbit index type and thebitstop-level type for working with bit-fields.
				All of these are documented in kwebapp(5).
 
 
- 
					
						:
						version 0.3.4
					 
						
			
				Disallow duplicate enumandstructnames.
				(These will otherwise collide in the C namespace.)
				Improve the documentation (function arguments) in the produced C
				header file.
				Output JavaScriptenumvalues—this is described
				in kwebapp(1).
  
				Add the andandorlogical (bit-wise)
				operations for search constraints.
  
				Finally allow comments!
				These begin at any time with the hash mark and continue to the end
				of line.
				(My motivation was modelines for vim.)
			  
				Lastly, and the biggest, allow for having structfields
				onnullforeign keys.
				This requires the system to perform extraSELECTstatements when the keys aren'tnull(which is noted in
				the generated API comments on a per-function basis), but overall
				it's very useful.
 
 
- 
					
						:
						version 0.3.3
					 
						
			
				Add the likeoperator type.
				This allows for primitive text searching.
				(This will become more advanced in time.)
				Allow the custom callback for JavaScript functions to optionally
				accept an array of functions for structure-field or structure in
				general.
 
 
- 
					
						:
						version 0.3.2
					 
						
			
				Add the bittype to work with kcgi's new bit
				validator.
				Fix the JavaScript output to propogate custom callbacks (see kwebapp(1)) in thefillArrayfunction.
				Lastly, add feature that allows an updateupdatestatement translate into updating all fields.
 
 
- 
					
						:
						version 0.3.1
					 
						
			
				Repair the jsdoc by actually
				checking it.
				Also add custom callback handling for individual structure/fields.
			 
 
- 
					
						:
						version 0.3.0
					 
						
			
				Require the insertstatement within a structure to
				generate insertion functions.
 
				Disambiguate the configuration grammar with respect to structure
				linking.
				Earlier, structtypes could specify the linkage from
				another field to a foreign key.
				Now, the linkage must be specified within the other field itself.
				This clears up the situation where a structure and the referring
				field had different types.
				It also allows all foreign key information (e.g.,on
					deletemodifiers) to exist unambiguously on the
				referring field itself.
 
				Add the actupandactdelmodifiers on a
				foreign key reference.
				For example,actdel cascadespecifiesON DELETE
					CASCADE.
 
				Properly wrap comments (at word boundaries) at 70 columns.
			 
				Introduce RBAC functionality: the rolestop-level
				object defining the roles themselves such that each structure
				statement (e.g.,insert) can be wrapped in arolesstatement limiting access.
				When the top-levelrolesis defined (even if empty),
				theksqldatabase handle is hidden from the API, and
				instead an opaquekwbpis used.
				This allows for full role-based access to the database.
				Read the kwebapp(5) for more
				information.
 
 
- 
					
						:
						version 0.2.12
					 
						
			
				Bug-fix generated JavaScript.
				Also clarified some warnings and errors generated during the link phase.
				Lastly, inherit CFLAGSduring configuration and use -Wextra during compilation.
 
 
- 
					
						:
						version 0.2.11
					 
						
			
				Add more power to the JavaScript output and clarify its operation.
				First, clarify how the root DOM element is handled as to whether it can have classes to be filled in.
				(Yes.)
				Second, add a fillInner()function to handle cases where the root shouldn't be filled in.
				Finally, add afillArraythat fills from an array of objects.
				This removes the first element, clears the root element, then clones, fills in, and appends the first element
				for all objects.
				ThefillInner()functionality comes in handy to protect nested objects from clobbering each other.
 
 
- 
					
						:
						version 0.2.10
					 
						
			
				Fix a bug that crept into the last release where iterate/list terms with an empty constraint set resulted in a
				dangling WHEREin the generated SQL.
 
 
- 
					
						:
						version 0.2.9
					 
						
			
				Allow iteration and listing to accept no terms; i.e., they produce all rows for that structure.
			 
 
- 
					
						:
						version 0.2.8
					 
						
			
				Allow ksql(3)'s split process model to be used when
				-Fsplitproc is specified.
 
 
- 
					
						:
						version 0.2.7
					 
						
			
				Add sqldiffmode support for enumerations.
				This makes sure that enumeration objects are consistent (non-destructive) across configurations.
 
 
- 
					
						:
						version 0.2.6
					 
						
			
				Add enumerations (enum) as top-level objects.
				This allows the C API to represent integers as sets of constants and makes validation more precise.
 
 
- 
					
						:
						version 0.2.5
					 
						
			
				Add eqoperator for validation.
				(Probably not used for numeric, but useful for strings in some circumstances.)
				Also addemailtype.
				This is just a string type with special validation.
 
 
- 
					
						:
						version 0.2.4
					 
						
			
				Add the ability for update fields to accept a modifier.
				This translates into the SQL equivalent toupdate foo set x = x + ?.
				Right now, only theincanddecmodifiers are supported, but it's easy to add in new ones.
 
 
- 
					
						:
						version 0.2.3
					 
						
			
				One-liner so that unique fields can be foreign keys (but notstruct s).
				Also add theepoch native type that uses thetime_ttype for the C API.
				For OpenBSD with 64-bit signed integral time, this is just an alias forintexcept for the type
				in the API.
 
 
- 
					
						:
						version 0.2.2
					 
						
			
				Fix bug in recursive reference checker.
				This now works properly and allows [properly] for self-referencing structures for native type references.
				Add special function to JSON print iterate entries.
				These work together with the iterate functions and accept their callback syntax.
			 
 
- 
					
						:
						version 0.2.1
					 
						
			
				Finally fix naming of anonymous query (search, list, iterate), update, and delete functions.
				This now uses the basic syntax of db_xx_get_by_yy_op, wherexx is the structure,yy is the field, andop is the operation.
				Adding theop field disambiguates fields.
				(The operation also makes the earlier double-underscore unneeded.)
 
				Also add functions to print JSON arrays if and only if a structure has list iterators specified.
			 
 
- 
					
						:
						version 0.2.0
					 
						
			
				Flag day: use the -O flag to specify output type (hence minor bump).
				Also move -v and -j into -Fvalids and -Fjson as part of the new -F flag.
				This cleans up a lot of options and leaves the door open for new output formats and configuration options.
			 
				Generate jsdoc along with the JavaScript -Ojavascript output.
				Also handle the foo-xxxx-valueclass, wherefoo is the structure andxxxx is the
				field, for auto-population of form elements.
 
 
- 
					
						:
						version 0.1.9
					 
						
			
				Introduce -J, which generates JavaScript output.
				This completes the chain from HTML form input to filling in HTML DOM trees with CGI script output.
			 
 
- 
					
						:
						version 0.1.8
					 
						
			
				Handle empty insertions by using DEFAULT VALUESon the insertion.
				Accept inequality operators for search, update, and delete constraints.
 
 
- 
					
						:
						version 0.1.7
					 
						
			
				Add limit clauses to make validation more meaningful.
				(See the limit field clause in kwebapp(5).)
				Now input values can be limited.
			 
 
- 
					
						:
						version 0.1.6
					 
						
			
				Add full validation sequence required by kcgi(3), specifically
				khttp_parse(3).
				With this in place, applications can push the given structure directly into the HTTP parser without needing to
				create the array themselves.
 
 
- 
					
						:
						version 0.1.5
					 
						
			
				Add field validation routines.
				See the -v flag in kwebapp(1).
				This uses the field type (and modifiers) to create 
				kcgi(3) validation routines.
			 
 
- 
					
						:
						version 0.1.4
					 
						
			
				Require a semicolon after struct statements.
				This is future-proofing for options following thestruct data.
				Also added anoexport field option that disallows fields from being JSON-exported.
 
 
- 
					
						:
						version 0.1.3
					 
						
			
				Handle empty (null ) values as specified in the configuration when exporting to JSON.
				Also, properly handle blob values as base64-encoded strings.
 
 
- 
					
						:
						version 0.1.2
					 
						
			
				Introduce -j, which also emits JSON output functions using kcgi(3)'s interface.
				These complete the chain of exporting data from a database directly to client applications.
			 
 
- 
					
						:
						version 0.1.1
					 
						
			
				Have the singleton search function (e.g., search foo: name bar ) use the operatorget in generated
				function names.
				Before, these would be (following the example)db_foo_by_foo.
				Now they'redb_foo_get_by_foo.
				This is more consistent with the other search functions.
 
				Renamed the -h flag to -C.
				(Source in lowercase, header in uppercase.)
			 
 
- 
					
						:
						version 0.1.0
					 
						
			
				Initial stable internals.
				I'm still going to change the generated API function names before adding features, but the system is already in
				use.