Chris Blackwell
Wed, 15 Nov 2006 05:13:54 -0800
That works fine, but it's just a hack. I was hoping we may be able to
find a way to represent a boolean explicitly without repurposing a
different type. Its a shame that columns created as BOOLEAN are
reported as TINYINT(1) by MySQL.
fwiw, if your going to hack the ObjectDAO for mysql you could change the
readfields query by replacing
DATA_TYPE as dbDataType,
with
CASE
WHEN LEFT(COLUMN_COMMENT, 5) = "TYPE=" THEN REPLACE(COLUMN_COMMENT,
"TYPE=", "")
ELSE DATA_TYPE
END AS dbDataType,
You can then override column type using the comment attribute
(TYPE=boolean) for each column, tinyints are treated correctly and
hopefully it shouldn't clash with any real comments.
Ideally i'd like to see this kind of type overriding added to the
reactor xml, <field name="foo" alias="bar" datatype="boolean" /> ?
Chris
________________________________
From: [EMAIL PROTECTED]
[EMAIL PROTECTED] On Behalf Of Angus Johnson
Sent: 15 November 2006 12:06
To: reactor@doughughes.net
Subject: Re: [Reactor for CF] boolean vlaues in mysql
Chris,
I don't have access to the work servers this evening but from
memory I modded the reactor framework objectDAO(??). Upshot was that the
mods converted any tinyint column types to boolean. Downside is that we
have to enforce a practice of only using TINYINT for boolean in Mysql
tables.
I can post the modded code tomorrow if interested.
Angus
On 11/11/06, Chris Blackwell < [EMAIL PROTECTED]
<[EMAIL PROTECTED]> > wrote:
I'm not sure that has any advantages, MySQL stores
pointers to the values you have assigned in the ENUM, in the example
you've given
index 0 => 1
index 1 => 0
Also, by default that would throw a
Test.Active.invalidLength error if you did setActive(true)
________________________________
From: [EMAIL PROTECTED]
[EMAIL PROTECTED] On Behalf Of Sal Valverde
Sent: 10 November 2006 18:34
To: reactor@doughughes.net
Subject: Re: [Reactor for CF] boolean vlaues in
mysql
I've been using ENUM('1','0')
thanks
sal
Chris Blackwell wrote:
Heres some sample code that demonstrates
the problem i have..
CREATE TABLE `Test` (
`TestId` int(10) unsigned NOT NULL
auto_increment,
`Active` tinyint(1) NOT NULL,
PRIMARY KEY (`TestId`)
)
<cfset test =
reactor.createRecord("Test")>
<cfset test.setActive(true)>
<cfset test.validate()>
<cfdump
var="#test._getErrorCollection().getErrors()#">
Results in a Test.Active.invalidType.
This result is totally expected, as
Reactor has to validate a TINYINT as numeric by default. Obviously it's
no problem to use 1/0 when hard coding the values, but i ran into the
problem when processing a checkbox for an object like this.
<cfset
user.setActive(structkeyexists(form, "active"))>
You can pass in "true" or "false" to the
record and save it because in MySQL True/False are just synonyms for 1/0
and get converted internally (Try SELECT true + 0). You just can't
validate it "out of the box" with the default validator.
For now overriding the setter will do
the job
<cffunction name="setActive"
access="public" output="false" returntype="void">
<cfargument name="Active"
type="boolean" required="yes">
<cfset
super.setActive(iif(arguments.Active, 1, 0))>
</cffunction>
________________________________
From: [EMAIL PROTECTED]
[EMAIL PROTECTED] On Behalf Of Dave Shuck
Sent: 10 November 2006 17:28
To: reactor@doughughes.net
Subject: Re: [Reactor for CF] boolean
vlaues in mysql
We just set the column type to BOOLEAN
in MySQL 5 (although it later magically becomes TINYINT(1)), and pass
ColdFusion boolean values with no issues whatsoever.
~Dave
On 11/10/06, Chris Blackwell <
[EMAIL PROTECTED]
<[EMAIL PROTECTED]> > wrote:
How are people representing boolean
values in mysql (4 or 5) with
reactor? I've always used TINYINT(1)
but with reactor its causing a
problem because, by default, it
validates the field as numeric so I get
an invalidType error.
I've tried the BIT(1) datatype for
MySQL5, but CF can't convert the
value to a boolean, I'm actually not
sure what this returns now, it used
to be a synonym for TINYINT(1).
BOOL/BOOLEAN are converted to TINYINT(1)
by MySQL so those type are
useless, the mysql ObjectDAO will never
see this type.
For now I'm overriding the
setColumn(bool) to convert the boolean to 1/0
and call super.setColumn(int).
I've only just run into this issue as
I've started using Reactors
validation instead of my own.
Chris Blackwell
Web Developer
Telephone: +44 (0)117 373 1465
Email: [EMAIL PROTECTED]
This email is intended for the use of
the named recipient(s) only. Any
information contained within this
message or any of its attachments may
be confidential and privileged
information. Any unauthorized
disclosure, reproduction, distribution
or other dissemination or use of
this communication is strictly
prohibited.
-- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- --
Reactor for ColdFusion Mailing List
reactor@doughughes.net
Archives at:
http://www.mail-archive.com/reactor%40doughughes.net/
-- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- --
--
~Dave Shuck
[EMAIL PROTECTED]
www.daveshuck.com
Where's your Spot?
www.instantspot.com
-- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- --
Reactor for ColdFusion Mailing List
reactor@doughughes.net
Archives at:
http://www.mail-archive.com/reactor%40doughughes.net/
-- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- --
Reactor for ColdFusion Mailing List
reactor@doughughes.net
Archives at:
http://www.mail-archive.com/reactor%40doughughes.net/
-- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- --
Reactor for ColdFusion Mailing List
reactor@doughughes.net
Archives at:
http://www.mail-archive.com/reactor%40doughughes.net/
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- --
Reactor for ColdFusion Mailing List
reactor@doughughes.net
Archives at:
http://www.mail-archive.com/reactor%40doughughes.net/
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- --
Reactor for ColdFusion Mailing List
reactor@doughughes.net
Archives at:
http://www.mail-archive.com/reactor%40doughughes.net/
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
Reactor for ColdFusion Mailing List
reactor@doughughes.net
Archives at: http://www.mail-archive.com/reactor%40doughughes.net/
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --