Hello,
I am totally new to SQLServer, but have been working with Hibernate on Oracle for a couple of years. We are now trying to make our code work against both Oracle and SQLServer, and are running up against an odd problem.
Although in Oracle, it isn't necessary to prepend the table names with the schema name, it appears that in SQLServer, this is quite necessary, even when logging in as the owner of the table. I solve this issue by configuring a DEFAULT_SCHEMA. [In oracle, we solve this with global synonyms.]
I am facing a similar problem with user-defined functions. I am about to re-jigger the application to stop mapping our fields to "formula" elements that call the custom functions, and write HQL to retrieve the data directly from the object class.
Subclassing SQLServerDialect and registering my user-defined function doesn't seem to help. I also tried subclassing the StandardSQLFunction (to prepend the function name with the schema)--that ONLY works for a query defined as a "Named query"--it won't work for a "formula" (even though internally, references to the class fields are successfully resolved!)
I've looked through the source code and these forums, and can't find much to help me. If I need to subclass Template or something, I can do that. Just wondering if anyone else has run into this and solved it already.
Thanks!
- Maggie
Hibernate version: 3.0
Name and version of the database you are using: Microsoft SQL Server, version: 08.00.2039
The generated SQL (show_sql=true):
select eo0_.EO_ID as EO1_
, eo0_.EO_OU_UID as EO2_0_
, eo0_.EO_SEQ_UID as EO3_0_
, eo_usesa (eo0_.eo_id) as formula0_
from idd.EO eo0_
where eo0_.EO_OU_UID=? and eo0_.EO_SEQ_UID=?
Manually testing against SQLServer, this version works:
select eo0_.EO_ID as EO1_
, eo0_.EO_OU_UID as EO2_0_
, eo0_.EO_SEQ_UID as EO3_0_
, idd.eo_usesa (eo0_.eo_id) as formula0_
from idd.EO eo0_
where eo0_.EO_OU_UID=? and eo0_.EO_SEQ_UID=?
Debug level Hibernate log excerpt:
2007-01-23 13:59:29,915 - Hibernate 3.0.3
2007-01-23 13:59:29,915 - loaded properties from resource hibernate.properties: {hibernate.default_schema=idd, hibernate.cglib.use_reflection_optimizer=true}
2007-01-23 13:59:29,915 - using CGLIB reflection optimizer
2007-01-23 13:59:29,931 - using JDK 1.4 java.sql.Timestamp handling
2007-01-23 13:59:30,024 - configuring from resource: /hibernate.cfg.xml
2007-01-23 13:59:30,024 - Configuration resource: /hibernate.cfg.xml
2007-01-23 13:59:30,290 - trying to locate
http://hibernate.sourceforge.net/hibern ... on-3.0.dtd in classpath under org/hibernate/
2007-01-23 13:59:30,321 - found
http://hibernate.sourceforge.net/hibern ... on-3.0.dtd in classpath
2007-01-23 13:59:30,368 - default_schema=idd
2007-01-23 13:59:30,368 - c3p0.acquire_increment=1
2007-01-23 13:59:30,368 - c3p0.idle_test_period=100
2007-01-23 13:59:30,368 - c3p0.max_size=100
2007-01-23 13:59:30,368 - c3p0.max_statements=0
2007-01-23 13:59:30,368 - c3p0.min_size=10
2007-01-23 13:59:30,368 - c3p0.timeout=100
2007-01-23 13:59:30,368 - dialect=org.natureserve.dataaccess.hibernate.dialect.BioticsSQLServer7Dialect
2007-01-23 13:59:30,368 - show_sql=true
2007-01-23 13:59:30,368 - null<-org.dom4j.tree.DefaultAttribute@b34646 [Attribute: name resource value "org/natureserve/dataaccess/configuration/bioticsDatabase/EO.hbm.xml"]
2007-01-23 13:59:30,368 - Mapping resource: org/natureserve/dataaccess/configuration/bioticsDatabase/EO.hbm.xml
2007-01-23 13:59:30,368 - trying to locate
http://hibernate.sourceforge.net/hibern ... ng-3.0.dtd in classpath under org/hibernate/
2007-01-23 13:59:30,368 - found
http://hibernate.sourceforge.net/hibern ... ng-3.0.dtd in classpath
2007-01-23 13:59:30,493 - Mapping class: org.natureserve.dataaccess.models.dataEntities.EO -> EO
2007-01-23 13:59:30,493 - Mapped property: id -> EO_ID
2007-01-23 13:59:30,509 - Mapped property: ouUid -> EO_OU_UID
2007-01-23 13:59:30,509 - Mapped property: seqUid -> EO_SEQ_UID
2007-01-23 13:59:30,509 - Mapped property: usesaStatus -> eo_usesa (eo_id)
2007-01-23 13:59:30,509 - Named query: eoByUid ->
select eo
from EO as eo
where eo.ouUid = :ouUid and eo.seqUid = :seqUid
2007-01-23 13:59:30,509 - Configured SessionFactory: null
2007-01-23 13:59:30,509 - properties: {show_sql=true, ...
2007-01-23 13:59:30,509 - Preparing to build session factory with filters : {}
2007-01-23 13:59:30,509 - processing extends queue
2007-01-23 13:59:30,509 - processing collection mappings
2007-01-23 13:59:30,509 - processing association property references
2007-01-23 13:59:30,509 - processing foreign key constraints
2007-01-23 13:59:30,603 - C3P0 using driver: net.sourceforge.jtds.jdbc.Driver at URL: jdbc:jtds:sqlserver://banana:1433;database=idd
2007-01-23 13:59:30,603 - Connection properties: {user=idd, password=****}
2007-01-23 13:59:30,603 - autocommit mode: false
2007-01-23 13:59:31,306 - RDBMS: Microsoft SQL Server, version: 08.00.2039
2007-01-23 13:59:31,306 - JDBC driver: jTDS Type 4 JDBC Driver for MS SQL Server and Sybase, version: 1.2
2007-01-23 13:59:31,352 - Using dialect: org.natureserve.dataaccess.hibernate.dialect.BioticsSQLServer7Dialect
2007-01-23 13:59:31,368 - Using default transaction strategy (direct JDBC transactions)
2007-01-23 13:59:31,368 - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
2007-01-23 13:59:31,368 - Automatic flush during beforeCompletion(): disabled
2007-01-23 13:59:31,368 - Automatic session close at end of transaction: disabled
2007-01-23 13:59:31,368 - Scrollable result sets: enabled
2007-01-23 13:59:31,368 - Wrap result sets: disabled
2007-01-23 13:59:31,368 - JDBC3 getGeneratedKeys(): enabled
2007-01-23 13:59:31,368 - Connection release mode: null
2007-01-23 13:59:31,368 - Default schema: idd
2007-01-23 13:59:31,368 - Default batch fetch size: 1
2007-01-23 13:59:31,368 - Generate SQL with comments: disabled
2007-01-23 13:59:31,368 - Order SQL updates by primary key: disabled
2007-01-23 13:59:31,368 - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
2007-01-23 13:59:31,368 - Using ASTQueryTranslatorFactory
2007-01-23 13:59:31,368 - Query language substitutions: {}
2007-01-23 13:59:31,368 - Second-level cache: enabled
2007-01-23 13:59:31,368 - Query cache: disabled
2007-01-23 13:59:31,368 - Cache provider: org.hibernate.cache.EhCacheProvider
2007-01-23 13:59:31,384 - Optimize cache for minimal puts: disabled
2007-01-23 13:59:31,384 - Structured second-level cache entries: enabled
2007-01-23 13:59:31,384 - Using dialect defined converter
2007-01-23 13:59:31,384 - Echoing all SQL to stdout
2007-01-23 13:59:31,384 - Statistics: disabled
2007-01-23 13:59:31,384 - Deleted entity synthetic identifier rollback: disabled
2007-01-23 13:59:31,384 - Default entity-mode: pojo
2007-01-23 13:59:31,524 - building session factory
2007-01-23 13:59:31,524 - Session factory constructed with filter configurations : {}
2007-01-23 13:59:31,524 - instantiating session factory with properties: {show_sql=true, ...
2007-01-23 13:59:32,071 - Static SQL for entity: org.natureserve.dataaccess.models.dataEntities.EO
2007-01-23 13:59:32,071 - Version select: select EO_ID from idd.EO where EO_ID =?
2007-01-23 13:59:32,071 - Snapshot select: select eo_.EO_ID, eo_.EO_OU_UID as EO2_0_, eo_.EO_SEQ_UID as EO3_0_ from idd.EO eo_ where eo_.EO_ID=?
2007-01-23 13:59:32,071 - Insert 0: insert into idd.EO (EO_OU_UID, EO_SEQ_UID, EO_ID) values (?, ?, ?)
2007-01-23 13:59:32,071 - Update 0: update idd.EO set EO_OU_UID=?, EO_SEQ_UID=? where EO_ID=?
2007-01-23 13:59:32,071 - Delete 0: delete from idd.EO where EO_ID=?
2007-01-23 13:59:32,071 - Identity insert: insert into idd.EO (EO_OU_UID, EO_SEQ_UID) values (?, ?)
2007-01-23 13:59:32,087 - Static select for entity org.natureserve.dataaccess.models.dataEntities.EO: select eo0_.EO_ID as EO1_0_, eo0_.EO_OU_UID as EO2_0_0_, eo0_.EO_SEQ_UID as EO3_0_0_, eo_usesa (eo0_.eo_id) as formula0_0_ from idd.EO eo0_ where eo0_.EO_ID=?
2007-01-23 13:59:32,087 - Static select for entity org.natureserve.dataaccess.models.dataEntities.EO: select eo0_.EO_ID as EO1_0_, eo0_.EO_OU_UID as EO2_0_0_, eo0_.EO_SEQ_UID as EO3_0_0_, eo_usesa (eo0_.eo_id) as formula0_0_ from idd.EO eo0_ where eo0_.EO_ID=?
2007-01-23 13:59:32,087 - Static select for entity org.natureserve.dataaccess.models.dataEntities.EO: select eo0_.EO_ID as EO1_0_, eo0_.EO_OU_UID as EO2_0_0_, eo0_.EO_SEQ_UID as EO3_0_0_, eo_usesa (eo0_.eo_id) as formula0_0_ from idd.EO eo0_ where eo0_.EO_ID=?
2007-01-23 13:59:32,087 - Static select for entity org.natureserve.dataaccess.models.dataEntities.EO: select eo0_.EO_ID as EO1_0_, eo0_.EO_OU_UID as EO2_0_0_, eo0_.EO_SEQ_UID as EO3_0_0_, eo_usesa (eo0_.eo_id) as formula0_0_ from idd.EO eo0_ where eo0_.EO_ID=?
2007-01-23 13:59:32,087 - initializing class SessionFactoryObjectFactory
2007-01-23 13:59:32,102 - registered: 2c9087de105053c301105053c6770000 (unnamed)
2007-01-23 13:59:32,102 - Not binding factory to JNDI, no JNDI name configured
2007-01-23 13:59:32,102 - instantiated session factory
2007-01-23 13:59:32,102 - Checking 1 named queries
2007-01-23 13:59:32,102 - Checking named query: eoByUid
2007-01-23 13:59:32,181 - parse() - HQL:
select eo
from org.natureserve.dataaccess.models.dataEntities.EO as eo
where eo.ouUid = :ouUid and eo.seqUid = :seqUid
2007-01-23 13:59:32,196 - --- HQL AST ---
\-[QUERY] 'query'
+-[SELECT_FROM] 'SELECT_FROM'
| +-[FROM] 'from'
| | \-[RANGE] 'RANGE'
| | +-[DOT] '.'
| | | +-[DOT] '.'
| | | | +-[DOT] '.'
| | | | | +-[DOT] '.'
| | | | | | +-[DOT] '.'
| | | | | | | +-[IDENT] 'org'
| | | | | | | \-[IDENT] 'natureserve'
| | | | | | \-[IDENT] 'dataaccess'
| | | | | \-[IDENT] 'models'
| | | | \-[IDENT] 'dataEntities'
| | | \-[IDENT] 'EO'
| | \-[ALIAS] 'eo'
| \-[SELECT] 'select'
| \-[IDENT] 'eo'
\-[WHERE] 'where'
\-[AND] 'and'
+-[EQ] '='
| +-[DOT] '.'
| | +-[IDENT] 'eo'
| | \-[IDENT] 'ouUid'
| \-[COLON] ':'
| \-[IDENT] 'ouUid'
\-[EQ] '='
+-[DOT] '.'
| +-[IDENT] 'eo'
| \-[IDENT] 'seqUid'
\-[COLON] ':'
\-[IDENT] 'seqUid'
2007-01-23 13:59:32,196 - throwQueryException() : no errors
2007-01-23 13:59:32,243 - query() << begin, level = 1
2007-01-23 13:59:32,259 - FromClause{level=1} : org.natureserve.dataaccess.models.dataEntities.EO (eo) -> eo0_
2007-01-23 13:59:32,259 - Resolved : eo -> eo0_.EO_ID
2007-01-23 13:59:32,274 - Resolved : eo -> eo0_.EO_ID
2007-01-23 13:59:32,274 - getDataType() : ouUid -> org.hibernate.type.IntegerType@189d7eb
2007-01-23 13:59:32,274 - Resolved : eo.ouUid -> eo0_.EO_OU_UID
2007-01-23 13:59:32,274 - Resolved : eo -> eo0_.EO_ID
2007-01-23 13:59:32,274 - getDataType() : seqUid -> org.hibernate.type.LongType@be8c3e
2007-01-23 13:59:32,274 - Resolved : eo.seqUid -> eo0_.EO_SEQ_UID
2007-01-23 13:59:32,274 - query() : finishing up , level = 1
2007-01-23 13:59:32,274 - processQuery() : ( SELECT ( {select clause} eo0_.EO_ID ) ( FromClause{level=1} idd.EO eo0_ ) ( where ( and ( = ( eo0_.EO_OU_UID eo0_.EO_ID ouUid ) ? ) ( = ( eo0_.EO_SEQ_UID eo0_.EO_ID seqUid ) ? ) ) ) )
2007-01-23 13:59:32,290 - Using FROM fragment [idd.EO eo0_]
2007-01-23 13:59:32,290 - query() >> end, level = 1
2007-01-23 13:59:32,290 - --- SQL AST ---
\-[SELECT] QueryNode: 'SELECT' querySpaces (idd.EO)
+-[SELECT_CLAUSE] SelectClause: '{select clause}'
| +-[ALIAS_REF] IdentNode: 'eo0_.EO_ID as EO1_' {alias=eo, className=org.natureserve.dataaccess.models.dataEntities.EO, tableAlias=eo0_}
| \-[SQL_TOKEN] SqlFragment: 'eo0_.EO_OU_UID as EO2_0_, eo0_.EO_SEQ_UID as EO3_0_, eo_usesa (eo0_.eo_id) as formula0_'
+-[FROM] FromClause: 'from' FromClause{level=1, fromElementCounter=1, fromElements=1, fromElementByClassAlias=[eo], fromElementByTableAlias=[eo0_], fromElementsByPath=[], collectionJoinFromElementsByPath=[], impliedElements=[]}
| \-[FROM_FRAGMENT] FromElement: 'idd.EO eo0_' FromElement{explicit,not a collection join,not a fetch join,fetch non-lazy properties,classAlias=eo,role=null,tableName=idd.EO,tableAlias=eo0_,colums={,className=org.natureserve.dataaccess.models.dataEntities.EO}}
\-[WHERE] SqlNode: 'where'
\-[AND] SqlNode: 'and'
+-[EQ] SqlNode: '='
| +-[DOT] DotNode: 'eo0_.EO_OU_UID' {propertyName=ouUid,dereferenceType=4,propertyPath=ouUid,path=eo.ouUid,tableAlias=eo0_,className=org.natureserve.dataaccess.models.dataEntities.EO,classAlias=eo}
| | +-[ALIAS_REF] IdentNode: 'eo0_.EO_ID' {alias=eo, className=org.natureserve.dataaccess.models.dataEntities.EO, tableAlias=eo0_}
| | \-[IDENT] IdentNode: 'ouUid' {originalText=ouUid}
| \-[NAMED_PARAM] SqlNode: '?'
\-[EQ] SqlNode: '='
+-[DOT] DotNode: 'eo0_.EO_SEQ_UID' {propertyName=seqUid,dereferenceType=4,propertyPath=seqUid,path=eo.seqUid,tableAlias=eo0_,className=org.natureserve.dataaccess.models.dataEntities.EO,classAlias=eo}
| +-[ALIAS_REF] IdentNode: 'eo0_.EO_ID' {alias=eo, className=org.natureserve.dataaccess.models.dataEntities.EO, tableAlias=eo0_}
| \-[IDENT] IdentNode: 'seqUid' {originalText=seqUid}
\-[NAMED_PARAM] SqlNode: '?'
2007-01-23 13:59:32,290 - throwQueryException() : no errors
2007-01-23 13:59:32,306 - HQL:
select eo
from org.natureserve.dataaccess.models.dataEntities.EO as eo
where eo.ouUid = :ouUid and eo.seqUid = :seqUid
2007-01-23 13:59:32,306 - SQL: select eo0_.EO_ID as EO1_, eo0_.EO_OU_UID as EO2_0_, eo0_.EO_SEQ_UID as EO3_0_, eo_usesa (eo0_.eo_id) as formula0_ from idd.EO eo0_ where eo0_.EO_OU_UID=? and eo0_.EO_SEQ_UID=?
2007-01-23 13:59:32,306 - throwQueryException() : no errors
2007-01-23 13:59:32,352 - opened session at timestamp: 4790594651365376
2007-01-23 13:59:32,368 - find:
select eo
from EO as eo
where eo.ouUid = :ouUid and eo.seqUid = :seqUid
2007-01-23 13:59:32,368 - named parameters: {ouUid=27, seqUid=4369}
2007-01-23 13:59:32,368 - compile() : The query is already compiled, skipping...
2007-01-23 13:59:32,368 - about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
2007-01-23 13:59:32,368 - opening JDBC connection
2007-01-23 13:59:32,368 - select eo0_.EO_ID as EO1_, eo0_.EO_OU_UID as EO2_0_, eo0_.EO_SEQ_UID as EO3_0_, eo_usesa (eo0_.eo_id) as formula0_ from idd.EO eo0_ where eo0_.EO_OU_UID=? and eo0_.EO_SEQ_UID=?
2007-01-23 13:59:32,368 - preparing statement
2007-01-23 13:59:32,384 - bindNamedParameters() 27 -> ouUid [1]
2007-01-23 13:59:32,384 - binding '27' to parameter: 1
2007-01-23 13:59:32,384 - bindNamedParameters() 4369 -> seqUid [2]
2007-01-23 13:59:32,384 - binding '4369' to parameter: 2
2007-01-23 13:59:32,399 - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
2007-01-23 13:59:32,399 - closing statement
2007-01-23 13:59:32,399 - could not execute query [select eo0_.EO_ID as EO1_, eo0_.EO_OU_UID as EO2_0_, eo0_.EO_SEQ_UID as EO3_0_, eo_usesa (eo0_.eo_id) as formula0_ from idd.EO eo0_ where eo0_.EO_OU_UID=? and eo0_.EO_SEQ_UID=?]
java.sql.SQLException: 'eo_usesa' is not a recognized function name.
at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:365)
at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2781)
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2224)
at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:628)
at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:418)
at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:693)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:75)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:118)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1239)
at org.hibernate.loader.Loader.doQuery(Loader.java:374)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:210)
at org.hibernate.loader.Loader.doList(Loader.java:1562)
at org.hibernate.loader.Loader.list(Loader.java:1545)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:271)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:840)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
at org.natureserve.hibernate.query.AbstractQuery.execute(AbstractQuery.java:25)
at org.natureserve.dataaccess.query.AbstractMultipleSearchValueQuery.execute(AbstractMultipleSearchValueQuery.java:107)
at org.natureserve.geoDataAccess.query.AbstractSpatialEOWrappedQuery.execute(AbstractSpatialEOWrappedQuery.java:75)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.natureserve.services.controller.FrontController.callMethod(FrontController.java:117)
at org.natureserve.services.controller.FrontController.fulfillContract(FrontController.java:307)
at org.natureserve.services.controller.FrontController.processGETRequest(FrontController.java:424)
at org.natureserve.services.controller.FilterController.processGETRequest(FilterController.java:131)
at org.natureserve.services.views.rest.RestServlet.doGet(RestServlet.java:56)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)
2007-01-23 13:59:32,399 - SQL Error: 195, SQLState: 42000
2007-01-23 13:59:32,399 - 'eo_usesa' is not a recognized function name.
2007-01-23 13:59:32,415 - after autocommit