githubEdit

1.0.0-Beta26

January 14, 2025

BoxLang Beta 26 Has Landed!

We’re thrilled to announce the release of BoxLang 1.0.0 Beta 26, a monumental update that takes performance and functionality to the next level. This beta officially certifies the ColdBox HMVC Framework to run on BoxLang, marking a significant milestone in compatibility. Not only can you now run all ColdBox applications seamlessly on BoxLang, but with the latest ColdBox snapshot, you can also build your entire applications in BoxLang, unlocking the full potential of this dynamic and expressive language for modern application development.

This release also introduces blazing-fast Query of Queries (QoQ) support, delivering speeds up to 70 times faster than Adobe or Lucee in specific scenarios, along with exciting new features like list parameter support in JDBC queries and custom QoQ functions. Over 70 bugs have been resolved, and significant improvements have been made, such as enhanced debugging capabilities, refined Box Script syntax, and robust session and metadata handling. With Beta 26, BoxLang continues to push the boundaries, empowering developers to build robust, efficient, and fully modern JVM-based applications.

Welcome to what could be our last beta before the final release of our initial 1.0.0 version of BoxLang and its multi-runtimes.

New Features

BL-94arrow-up-right Create query of queries support

BL-883arrow-up-right Implement list parameters in JDBC queries

BL-933arrow-up-right Ability to register custom functions for QoQ

BL-942arrow-up-right Interceptor Service now does a service loader load of all interceptors found in the runtime to auto-load them

Improvements

BL-852arrow-up-right dump Lots of UI quality of life improvements: show length of strings, show full classes for some Java integrations, and much more.

BL-860arrow-up-right Update getMetaadata() for dynamic proxies to leverage the class metadata instead of instances

BL-865arrow-up-right CFTranspiler should not turn off accessors for persistent classes

BL-866arrow-up-right Exception type matching check cause

BL-919arrow-up-right Implement "Quick" algorithm for Hash BIF

BL-920arrow-up-right Compat: CacheGet second argument is boolean for Lucee

BL-926arrow-up-right ASM error in do/while with a break

BL-938arrow-up-right Update the getOrCreateSession() to verify if the session has expired, and if so, rotate it.

BL-939arrow-up-right Change generic tag-in-script syntax for Box Script to prefix with bx:

Bugs

BL-621arrow-up-right Allow a productivity hack to add ability to pass queries to some struct functions by taking the first row and converting the query to a struct.

BL-732arrow-up-right structsort with callback errors

BL-758arrow-up-right QofQ shouldn't require global DSN

BL-764arrow-up-right xmlsearch - invalid XPath

BL-801arrow-up-right ASM Failing test - fix bx:output transformer

BL-802arrow-up-right ASM Failing test - fix abort exception

BL-834arrow-up-right Dump Top Updates will not dump certain classes without a top argument, top shows as reached for subsequent dumps

BL-847arrow-up-right BL GenericProxies cannot have java.lang.Object methods call on them

BL-849arrow-up-right Class properties are merged from all inheritance levels in the metadata

BL-850arrow-up-right Dumps are not in order of execution

BL-851arrow-up-right Java List dumps are not working with top and are off by 1

BL-854arrow-up-right Wirebox Block: testbuildJavaClass Methods on Java objects cannot be called with named arguments when using invoke()

BL-855arrow-up-right Coercion for constructors from string to numbers are not working

BL-856arrow-up-right Coercion from strings to numbers does not exist

BL-857arrow-up-right isInstanceOf bif and keyword are not working on createObject("java") proxies. It gives a negative result

BL-858arrow-up-right var scoping issues for bleeding scopes on class dump template

BL-859arrow-up-right Calling getMetadata() on an instance of dynamic object that has not yet been inited, shows the metadata of DynamicObject instead of the proxy class

BL-861arrow-up-right ORM: getter setters are not enabled for persistent CFCs

BL-863arrow-up-right ORM: writedump causes ClassInfo not found

BL-864arrow-up-right ORM: entityLoad should only require entity name

BL-867arrow-up-right Show the right exception type when invoking dynamic objects and there are exceptions from a caused by

BL-868arrow-up-right caching does not handle quoted numbers or booleans in config

BL-869arrow-up-right ORM: EntityLoad errors when using a filter

BL-870arrow-up-right soft reference cannot be stored directly in a struct

BL-875arrow-up-right rework onSessionEnd to make sure the application exists when calling the listeners

BL-877arrow-up-right Lucee allows params to be passed to cfquery tag via `params` attribute

BL-879arrow-up-right IsNumeric() returns true for "true" and "false"

BL-880arrow-up-right QueryNew() throws exception if row data array is empty

BL-884arrow-up-right MSSQL throws error when executing certain queries if language is not English

BL-885arrow-up-right Setting a dynamic variable name doesn't work

BL-886arrow-up-right Can't cast [now] to a DateTime

BL-887arrow-up-right cfloop step not implemented

BL-888arrow-up-right allow "switch" as struct key name in CF script

BL-889arrow-up-right The instance [ortus.boxlang.runtime.types.exceptions.ParseException] has no public field or inner class [ERRORCODE]

BL-890arrow-up-right In function [numberFormat], argument [number] with a type of [java.lang.Boolean] does not match the declared type of [number]

BL-891arrow-up-right Datasources created after module load take on custom DSN parameters defined in bx-mssql

BL-892arrow-up-right cfqueryparam with list attribute causes "The index 2 is out of range"

BL-893arrow-up-right Queryparam list=true is unsupported

BL-894arrow-up-right Key in arguments scope gets lost

BL-895arrow-up-right Allow "switch" to be used in dot access

BL-896arrow-up-right Can't cast ts to a Number.

BL-897arrow-up-right named query params not handled correctly

BL-898arrow-up-right Account for placeholder text in comments and quoted strings in SQL

BL-899arrow-up-right numberFormat is displaying a leading 0 when formatting integers < 10

BL-901arrow-up-right Duplicate() on CGI scope creates empty struct

BL-902arrow-up-right CGI-Scope weirdness

BL-903arrow-up-right MSSQL connection gets lost

BL-904arrow-up-right Empty test fails when using ASM

BL-905arrow-up-right MSSQL Query columns have wrong values

BL-906arrow-up-right Using bx:outputarrow-up-right inside of bx:catcharrow-up-right causes bxCatch scope to disappear

BL-907arrow-up-right Array Loop with negative step doesn't work

BL-909arrow-up-right Cannot invoke "ortus.boxlang.runtime.components.Component$BodyResult.isEarlyExit()" because "bodyResult" is null

BL-910arrow-up-right Passing query column to listToArray() BIF fails

BL-911arrow-up-right IsNumeric BIF returns true on booleans in compat mode

BL-912arrow-up-right getBaseTemplatePath returns `Application.cfc` in onRequestStart

BL-913arrow-up-right Throw with exception object as unnamed argument fails

BL-914arrow-up-right Null session scope when attempting to update the last visit

BL-917arrow-up-right Compat GetComponentMetadata Failures with "Can't cast null to a Key".

BL-918arrow-up-right String [1 LTE 5] cannot be cast to a boolean

BL-923arrow-up-right Compat: Attributes to Functions Are Scoped in to nested Parameters Struct

BL-925arrow-up-right Cannot invoke method [clearbuffer()] on a null object

BL-927arrow-up-right Double variable assignment failing in ASM

BL-928arrow-up-right Compat: Invoke method has different required object method

BL-930arrow-up-right StructFindKey Returns a Null Value when Struct being searched contains nulls

BL-932arrow-up-right toBinary() not lenient enough for decoding with line paddings

BL-936arrow-up-right When doing named parameter queries and you send more parameters than required, it should ignore them, not throw an exception that you sent more

BL-937arrow-up-right getOrCreateSession() relying on the starting listener for settings, when it should look at the context to reflect changes if any

BL-941arrow-up-right WebRequest interceptor in web support is not auto-loading, also will affect any other composable runtimes

BL-944arrow-up-right node.xmlText explicit assignment throws error that value is not node or XML instance

BL-945arrow-up-right xmlAttributes assignment error - key not found

Task

BL-217arrow-up-right ColdBox Test Suite

BL-220arrow-up-right Quick Test Suite

BL-548arrow-up-right Parser performance and removing ambiguity

BL-767arrow-up-right CFcasts Suite

BL-837arrow-up-right UnleashSDK Certification

BL-908arrow-up-right Incorporate TestBox test suite

Stories

BL-237arrow-up-right Phase II : Update all the toAST() methods to the new and consolidated approach

BL-238arrow-up-right Phase III : Performance tests for phase I + II toolchains

BL-239arrow-up-right Phase V : Create the QoQ SQL grammar, parser, and astss

Last updated

Was this helpful?