Coder Social home page Coder Social logo

coldbox-modules / cborm Goto Github PK

View Code? Open in Web Editor NEW
8.0 8.0 17.0 1.79 MB

The ColdBox ORM enhancements for ColdFusion ORM & Hibernate. Make ORM not suck!

Home Page: https://coldbox-orm.ortusbooks.com/

ColdFusion 88.67% PLpgSQL 11.33%
orm hibernate coldbox coldfusion cfml criteria jpa

cborm's People

Contributors

balbinoortus avatar bdw429s avatar elpete avatar existdissolve avatar grantcopley avatar jclausen avatar lmajano avatar michaelborn avatar sanaullah avatar sigmaprojects avatar wphampton avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cborm's Issues

Variable scoping in SQLHelper.cfc

When using criteria.maxResults(10) I was having a strange error on cborm/models/sql/SQLHelper.cfc line 202.

After some debugging I found out that we have a global udf function called 'factory' and it was taking this function instead of the local var.

I had to scope the factory variable like variables.factory.

Since "factory" can be a wide used variable or function name, I think it should be var scoped on cborm/models/sql/SQLHelper.cfc. Same could happen with other component variables

Allow params and typing to criteria SQLRestriction

The java method accepts params and typing of params ( https://github.com/hibernate/hibernate-orm/blob/master/hibernate-core/src/main/java/org/hibernate/criterion/Restrictions.java#L463 ), while the CBORM implementation accepts only the first argument of an SQL strings.

Implement the ability for the method to accept an array of params as the second argument and either auto-type or allow a third argument of types.

This will allow search building which might require native DBMS functionality to stay SQL injection-safe

Dynamic Finders Incorrectly Identifying Properties in compileHQLFromDynamicMethod()

In BaseORMService.cfc around line 1055 is this chunk of code:

var methodGrammars = REMatchNoCase( "((?!(and|or|$))\w)+(#ALL_CONDITIONALS_REGEX#)?(and|or|$)", method );

Let's say you have an entity with properties of handle and sport and name and you attempt a Dynamic Finder like this findAllByHandleAndSportAndName('a','b','c');
Then it will split it up like this:

Array
1 Hand
2 leAnd
3 Spor
4 tAnd
5 Name

I think it should have done this:

Array
1 HandleAnd
2 SportAnd
3 Name

I haven't been able to fix that RegEx yet with the negative lookahead and would appreciate some assistance. @sigmaprojects did some related work in #4. Also there was some related discussion in the ColdBox Google Group a while back.

Dynamic `not` prefixed restrictions

Add a method in Restrictions.cfc for isNotIn which wraps the isIn statement in an isNot:

any function isNotIn(required string property, required any propertyValue){
		// infalte to array if simple values
		if( isSimpleValue(arguments.propertyValue) ){ arguments.propertyValue = listToArray( arguments.propertyValue); }
		return isNot( variables.restrictions.in(arguments.property, arguments.propertyValue) );
}

CBORM errors on newer Lucee versions because log4j appenders have moved

CBORM causes an error on Lucee 5.3.9.141 because lucee.commons.io.log.log4j.layout.ClassicLayout no longer exists.

Error finding log4j.layout.ClassicLayout on newer Lucee versions

See https://github.com/coldbox-modules/cborm/blob/development/models/util/ORMUtilSupport.cfc#L32-L39:

/**
 * Redirect all Hibernate logs to system.out
 */
if ( listFindNoCase( "Lucee", server.coldfusion.productname ) ) {
	var printWriter     = getPageContext().getConfig().getOutWriter();
	var layout          = createObject( "java", "lucee.commons.io.log.log4j.layout.ClassicLayout" );
	var consoleAppender = createObject( "java", "lucee.commons.io.log.log4j.appender.ConsoleAppender" ).init(
		printWriter,
		layout
	);
	hibernateLog.addAppender( consoleAppender );
	writeDump( var = "** Lucee Hibernate Logging Redirected", output = "console" );
}

It appears this moved to lucee.commons.io.log.log4j2.layout.ClassicLayout.

Ditto for lucee.commons.io.log.log4j.appender.ConsoleAppender, which moved to lucee.commons.io.log.log4j2.appender.ConsoleAppender

exists() Method Concerns

exists() in BaseORMService is not universally functional because the property name of id is hard coded in to the HQL.

In addition, this method will not work on entities which have an entity name which is a reserved word in the DBMS platform ( e.g. Case ).

The key property should be dynamically retrieved for the HQL in ormExecuteQuery.

In addition, investigate if there is a ways to provide escaping for entities and property names which are reserved words : e.g [Case] for SQL Server, "Case" for MySQL and Postgres, etc

BaseORMService.merge doesn't seem to merge entities back into session

Using the merge function doesn't seems to attach the specified entity to the session.

BaseORMService.merge(entity) is using Coldfusion's entityMerge which returns a new object attached to the session. However, the original object passed as an argument will not be attached.

Did I do something wrong or misunderstood how the framework is working?

On a side note, the doc specifies that the merge() function returns void which isn't correct.

entity.save() errors on Lucee 5

See the repo for the test case: https://github.com/elpete/cborm-lucee-5-error

The quick version: on Lucee 5 entitySave( myEntity ) works while myEntity.save() does not. myEntity.save() works on Lucee 4 without modification.

The error:

Messages: lucee.runtime.orm.ORMDatasourceConnection cannot be cast to lucee.runtime.db.DatasourceConnectionImpl

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.