-
:
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 (date
and epoch
) 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-checked
and -value-selected
classes.
-
:
version 0.13.7
SQL change: indexes are now output as
unique_strct__field1_field2
instead of
unique_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 blob
field 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 bigint
instead of BigInt
in
ort-nodejs(1) output.
Fix that the export functions were trying to new
a
string when converting from a Buffer
(harmless). Fix
type warnings about lastInsertRowid
by converting to a
string
before converting it into a BigInt
.
-
:
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 user
with a row
identifier id
and originator foreign key
ouserid
, searching for the originator user erroneously
using id
. In prior versions, both id
and
ouserid
were int64_t
, which made it easy
to use one instead of the other. With safe typing, two new types of
user_id
and user_ouserid
exist, 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_id
is also emitted for un-safe typing as a simple
alias for int64_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 UNIQUE
statements, which
unfortunately can't be modified with SQLite after creation.
Now, ort-sqldiff(1) outputs
UNIQUE INDEX
statements 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 UNIQUE
statements 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 count
operation 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_free
to
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.Long
output 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 adding or
and some
documentation. Also relax some needless constraints in
ort-json.ts.
Fix a bug in ort-sqldiff(1) where
struct
fields 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 struct
to a foreign key that
might be null
) 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 default
action for actup
or actdel
has either a null
field or a
default. This prevents the database from defaulting to a
null
value, which may conflict with the configuration
and thus expectations of the code.
Do the same for the nullify
action, requiring that the
field be null
.
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 distinct
on a
list
or iterate
correctly declare the
required macros in
ort-c-header(1).
Found by the expanded regression suite.
Fix how grouprow
queries, which use
LEFT 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 roles
statement in
ort_diff(3) field results.
Also add full support for the insert
;
update
and delete
; and list
,
search
, and iterate
.
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.transpile
accepts the type-mangling code while tsc
does 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_r
functions in some cases,
even though required by query functions.
Document the db_open_logging
function 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 string
as well as of number
.
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.Long
class 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
noexport
or 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 const
and readonly
.
-
:
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-coded notgiven
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 of
checked="true"
(same with selected
) for
the -value-checked
, -bits-checked
, and
-enum-select
class 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 count
query type to have password equality
checks.
This never worked, but now we explicitly check for it.
Don't emit db_xxx_fill_r
functions 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 enum
fields to have a default type.
Allow for password
fields to accept
isnull
or notnull
operations.
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 grouprow
and associated row operation
were not being written by ort(1).
Bug-fix: the order
type was not being written by
ort(1).
Bug-fix: the distinct
keyword on the local structure
was not being printed properly by ort(1).
When running ort-sqldiff(1), be
more selective on which field
attribute 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 null
fields are checked for.
While there, consider how NULL
values 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 a minrow
or
maxrow
.
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
by
in the generated function names. That is,
update [xxx];
will no longer append a hanging
_by
to 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 inc
and update foo dec
.
Have the strset
keyword 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 eq
and neq
search 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 streq
and strneq
search operators and
update constraints for passwords.
(For non-passwords, these are equivalent to eq
and
neq
.)
These operate on the raw hash instead of the password.
For C source, don't generate INSERT
SQL 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 ort
instead of having direct access to
struct sqlbox
(was struct ksql
).
This mirrors the situation of roles being enabled.
If you have code that did not use roles and directly used the
struct ksql
to 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 format
function of
ort-javascript(1)
accept a null
class 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 --strict
when compiling the output of
ort-javascript(1)'s
TypeScript output.
-
:
version 0.7.6
Add the count
query type and its associated C API
functions.
This is essentiallythe COUNT
SQL 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
, where
xxx
is the name of the enumeration.
For Java or TypeScript, this is BITI__MAX
on the
enumeration's object.
Also fix a line termination bug.
-
:
version 0.7.4
When using concatenation (the concat
operator) for a
field with possibly-null
values, wrap the field with a
COALESCE
statement.
This prevents the foo = empty || yourval expression, which evaluates
into another empty instead of the desired yourval
.
Make code and documentation consistent for update
generated 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
to openradtool
!
This means that all binaries prefixed with kwebapp-
are now prefixed with the simpler ort-
.
Also, the JavaScript/TypeScript namespace is ort
instead of kwebapp
and code produced by the C API
with roles uses struct ort
and enum
ort_role
instead of the earlier kwbp
.
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 NodeListOf
is used instead
of HTMLCollectionOf
, so use the proper invocation.
-
:
version 0.6.8
Forgot to zero some allocated memory in unique
statements.
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 like
fillArray
but invoked over matching classes.
Begin migration (internally) to new name, openradtool.
-
:
version 0.6.6
Add the fillArrayOrHide
, fillArrayOrShow
,
fillByClass
, and fillInnerByClass
methods
to the TypeScript and JavaScript output.
The former two captures common uses of fillArray
:
hiding or showing an element if there are non-zero elements in the
given array.
The latter are convenience methods of wrapping a fill
invocation with a getElementsByClassName
.
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 default
keyword be handled when emitted
configurations.
-
:
version 0.6.5
Add default
support for text, emails, and dates.
-
:
version 0.6.4
Make sure that ksql(3) is
configured for foreign keys.
-
:
version 0.6.3
Take unique
statements into account when warning
whether a search
statement might return multiple
results.
Also add some examples for using unique
.
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 -J
flag 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 -J
flag 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
TABLE
statements for new columns.
This currently is only defined for number types.
The default is documented in kwebapp(5).
Rename xxx-yyy-date
to xxx-yyy-date-value
for consistency (oops!), then add xxx-yyy-date-text
.
-
:
version 0.5.7
Have several new class recognised in fill
methods as
generated by kwebapp-javascript(1).
The xxx-yyy-bits-checked
is now recognised for
bit
and bits
types and it will check input
boxes whose value is covered by the field's value.
The xxx-yyy-date
, for ISO 8601 formatting of
epoch
and date
types.
Lastly, xxx-yyy-value-checked
for 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 jslabel
phrases.
Fix specifying language jslabel
for special phrases in bits
.
-
:
version 0.5.2
Full translation capabilities!
Now all jslabel
strings may be translated out-of-band
into the appropriate jslabel.xxx
labels 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 make
output by putting version information
into its own header file.
Continue adding in TypeScript type information.
Multi-language support: re-tool the jslabel
feature to
allow for multiple languages that detect the HTML (or XML)
document's root language and only produce output for that language.
This uses the jslabel.lang
syntax.
Also warn more about missing labels and be clearer on what to do
when label information isn't found.
Furthermore, the unset
keyword has been changed to
isunset
and the isnull
keyword has also been added.
There is no longer a hard-coded not given
value, and the
class set on null values is now kwbp-null
instead of
notgiven
.
-
:
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_VERSION
and KWBP_VSTAMP
to
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 noexport
empty 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 noexport
in 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 date
pseudo-type that aliases
epoch
but uses the date validation input.
-
:
version 0.4.1
Fix: LIMIT
set goes after ORDER 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 comment
strings 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 update
and delete
to 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 limit
statements with
enum
types.
-
:
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 distinct
field to queries.
This field, in its basic form, enforced the SQL
DISTINCT
keyword.
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
are struct
foreign 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 jslabel
statement for bit-fields.
This allows the generated JavaScript format()
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 order
statement for ordering list
and iterate
results.
It can also act as a way to define single results over non-unique
fields by combining the search
statement with
limit
.
Allow for limit offsets by extending the limit
syntax.
Lastly, introduce the bit
bit index type and the
bits
top-level type for working with bit-fields.
All of these are documented in kwebapp(5).
-
:
version 0.3.4
Disallow duplicate enum
and struct
names.
(These will otherwise collide in the C namespace.)
Improve the documentation (function arguments) in the produced C
header file.
Output JavaScript enum
values—this is described
in kwebapp(1).
Add the and
and or
logical (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 struct
fields
on null
foreign keys.
This requires the system to perform extra SELECT
statements when the keys aren't null
(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 like
operator 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 bit
type to work with kcgi's new bit
validator.
Fix the JavaScript output to propogate custom callbacks (see kwebapp(1)) in the
fillArray
function.
Lastly, add feature that allows an update update
statement 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 insert
statement within a structure to
generate insertion functions.
Disambiguate the configuration grammar with respect to structure
linking.
Earlier, struct
types 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
delete
modifiers) to exist unambiguously on the
referring field itself.
Add the actup
and actdel
modifiers on a
foreign key reference.
For example, actdel cascade
specifies ON DELETE
CASCADE
.
Properly wrap comments (at word boundaries) at 70 columns.
Introduce RBAC functionality: the roles
top-level
object defining the roles themselves such that each structure
statement (e.g., insert
) can be wrapped in a
roles
statement limiting access.
When the top-level roles
is defined (even if empty),
the ksql
database handle is hidden from the API, and
instead an opaque kwbp
is 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 CFLAGS
during 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 a fillArray
that 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.
The fillInner()
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 WHERE
in 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 sqldiff
mode 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 eq
operator for validation.
(Probably not used for numeric, but useful for strings in some circumstances.)
Also add email
type.
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 to update foo set x = x + ?
.
Right now, only the inc
and dec
modifiers 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 not struct
s).
Also add the epoch
native type that uses the time_t
type for the C API.
For OpenBSD with 64-bit signed integral time, this is just an alias for int
except 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
, where xx
is the structure, yy
is the field, and op
is the operation.
Adding the op
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-value
class, where foo
is the structure and xxxx
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 VALUES
on 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 the struct
data.
Also added a noexport
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 operator get
in generated
function names.
Before, these would be (following the example) db_foo_by_foo
.
Now they're db_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.