From: Michael D. <mik...@us...> - 2004-05-18 05:01:16
|
Update of /cvsroot/nhibernate/nhibernate/src/NHibernate/Dialect In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26795/NHibernate/Dialect Modified Files: Dialect.cs Oracle9Dialect.cs OracleDialect.cs Log Message: Added virtual modifier to some methods in Dialect Added OracleDialects to project. Thanks to feilng for the contribution. Index: Oracle9Dialect.cs =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/Dialect/Oracle9Dialect.cs,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** Oracle9Dialect.cs 28 Apr 2003 14:25:09 -0000 1.6 --- Oracle9Dialect.cs 18 May 2004 05:01:02 -0000 1.7 *************** *** 1,53 **** using System; ! using System.Text; using System.Data; using NHibernate.Util; ! namespace NHibernate.Dialect { ! /// <summary> ! /// An SQL dialect for Oracle 9 (uses ANSI-style syntax where possible). /// </summary> ! public class Oracle9Dialect : Dialect { ! public Oracle9Dialect() : base() { ! /* Type mapping in Java was: ! ! Types.BIT, "NUMBER(1,0)" ! Types.BIGINT, "NUMBER(19,0)" ! Types.SMALLINT, "NUMBER(5,0)" ! Types.TINYINT, "NUMBER(3,0)" ! Types.INTEGER, "NUMBER(10,0)" ! Types.CHAR, "CHAR(1)" ! Types.VARCHAR, "VARCHAR2($l)" ! Types.FLOAT, "FLOAT" ! Types.DOUBLE, "DOUBLE PRECISION" ! Types.DATE, "DATE" ! Types.TIME, "DATE" ! Types.TIMESTAMP, "DATE" ! Types.VARBINARY, "RAW($l)" ! Types.NUMERIC, "NUMBER(19, $l)" ! Types.BLOB, "BLOB" ! Types.CLOB, "CLOB" ! */ ! ! Register( DbType.Bit, "NUMBER(1,0)" ); ! Register( DbType.BigInt, "NUMBER(19,0)" ); ! Register( DbType.SmallInt, "NUMBER(5,0)" ); ! Register( DbType.TinyInt, "NUMBER(3,0)" ); ! Register( DbType.Int, "NUMBER(10,0)" ); ! Register( DbType.Char, "CHAR(1)" ); ! Register( DbType.VarChar, "VARCHAR2($l)" ); ! Register( DbType.Float, "FLOAT" ); ! Register( DbType.Real, "DOUBLE PRECISION" ); ! Register( DbType.DateTime, "DATE" ); ! Register( DbType.SmallDateTime, "DATE" ); ! Register( DbType.Timestamp, "DATE" ); ! Register( DbType.VarBinary, "RAW($l)" ); ! Register( DbType.Decimal, "NUMBER(19, $l)" ); ! Register( DbType.Image, "BLOB" ); ! Register( DbType.Text, "CLOB" ); /* TODO: getDefaultProperties().setProperty(Environment.USE_STREAMS_FOR_BINARY, "true"); --- 1,24 ---- using System; ! using System.Collections; using System.Data; + using System.Text; + using NHibernate.SqlCommand; + using NHibernate.SqlTypes; using NHibernate.Util; ! namespace NHibernate.Dialect ! { /// <summary> ! /// It's a immature version, it just work. ! /// An SQL dialect for Oracle 9 /// </summary> ! public class Oracle9Dialect : Dialect ! { ! private readonly IDictionary aggregateFunctions = new Hashtable(); + public Oracle9Dialect() : base() + { /* TODO: getDefaultProperties().setProperty(Environment.USE_STREAMS_FOR_BINARY, "true"); *************** *** 55,93 **** getDefaultProperties().setProperty(Environment.OUTER_JOIN, "true"); */ } ! public override string AddColumnString { get { return "add"; } } ! ! public override string GetSequenceNextValString(string sequenceName) { ! return string.Concat( "select ", sequenceName, ".nextval from dual" ); } ! public override string GetCreateSequenceString(string sequenceName) { ! return "create sequence " + sequenceName; } ! public override string GetDropSequenceString(string sequenceName) { return "drop sequence " + sequenceName; } ! public string CascadeConstraintsString { get { return " cascade constraints"; } } ! public bool SupportsForUpdateNowait { get { return true; } } ! ! public override bool SupportsSequences { get { return true; } } ! public override bool UseNamedParameters { get { return true; } } ! public override string NamedParametersPrefix { get { return ":"; } } } } --- 26,274 ---- getDefaultProperties().setProperty(Environment.OUTER_JOIN, "true"); */ + + // add all the functions from the base into this instance + foreach(DictionaryEntry de in base.AggregateFunctions) + { + aggregateFunctions[de.Key] = de.Value; + } + aggregateFunctions["trunc"] = new QueryFunctionStandard(); + aggregateFunctions["round"] = new QueryFunctionStandard(); + aggregateFunctions["abs"] = new QueryFunctionStandard(NHibernate.Int32); + aggregateFunctions["sign"] = new QueryFunctionStandard(NHibernate.Int32); + aggregateFunctions["ceil"] = new QueryFunctionStandard(NHibernate.Int32); + aggregateFunctions["floor"] = new QueryFunctionStandard(NHibernate.Int32); + aggregateFunctions["sqrt"] = new QueryFunctionStandard(); + aggregateFunctions["exp"] = new QueryFunctionStandard(); + aggregateFunctions["ln"] = new QueryFunctionStandard(); + aggregateFunctions["sin"] = new QueryFunctionStandard(); + aggregateFunctions["sinh"] = new QueryFunctionStandard(); + aggregateFunctions["cos"] = new QueryFunctionStandard(); + aggregateFunctions["cosh"] = new QueryFunctionStandard(); + aggregateFunctions["tan"] = new QueryFunctionStandard(); + aggregateFunctions["tanh"] = new QueryFunctionStandard(); + aggregateFunctions["stddev"] = new QueryFunctionStandard(); + aggregateFunctions["variance"] = new QueryFunctionStandard(); + //TODO: aggregateFunctions["sysdate"] = new TODO; + aggregateFunctions["lastday"] = new QueryFunctionStandard(NHibernate.Date); } ! public override string AddColumnString ! { get { return "add"; } } ! ! public override string GetSequenceNextValString(string sequenceName) ! { ! return "select " + sequenceName + ".nextval from dual"; } ! ! public override string GetCreateSequenceString(string sequenceName) ! { ! return "create sequence " + sequenceName + " INCREMENT BY 1 START WITH 1 MAXVALUE 1.0E28 MINVALUE 1 NOCYCLE CACHE 20 NOORDER"; } ! ! public override string GetDropSequenceString(string sequenceName) ! { return "drop sequence " + sequenceName; } ! public override string CascadeConstraintsString ! { get { return " cascade constraints"; } } ! public override bool SupportsForUpdateNoWait ! { get { return true; } } ! ! public override bool SupportsSequences ! { get { return true; } + } + + public override bool SupportsLimit + { + get { return true; } } ! public override string GetLimitString(String querySelect) ! { ! StringBuilder pagingSelect = new StringBuilder(100); ! pagingSelect.Append("select * from ( select row_.*, rownum rownum_ from ( "); ! pagingSelect.Append(querySelect); ! pagingSelect.Append(" ) row_ where rownum <= ?) where rownum_ > ?"); ! return pagingSelect.ToString(); ! } ! ! public override SqlString GetLimitString(SqlString querySqlString) ! { ! Parameter p1 = new Parameter(); ! Parameter p2 = new Parameter(); ! ! p1.Name = "p1"; ! p1.DbType = DbType.Int16; ! ! p2.Name = "p2"; ! p2.DbType = DbType.Int16; ! ! /* ! * "select * from ( select row_.*, rownum rownum_ from ( " ! * sql ! * " ) row_ where rownum <= ?) where rownum_ > ?" ! */ ! SqlStringBuilder pagingBuilder = new SqlStringBuilder(); ! pagingBuilder.Add("select * from ( select row_.*, rownum rownum_ from ( "); ! pagingBuilder.Add(querySqlString); ! pagingBuilder.Add(" ) row_ where rownum <= "); ! pagingBuilder.Add(p1); ! pagingBuilder.Add(") where rownum_ > "); ! pagingBuilder.Add(p2); ! ! return pagingBuilder.ToSqlString(); ! } ! ! public override bool BindLimitParametersInReverseOrder ! { ! get { return true; } ! } ! ! public override bool SupportsForUpdateOf ! { ! get { return true; } ! } ! ! public override IDictionary AggregateFunctions ! { ! get { return aggregateFunctions; } ! } ! ! public override bool UseMaxForLimit ! { ! get { return true; } ! } ! ! [Obsolete("See the Dialect class for reason")] ! public override bool UseNamedParameters ! { get { return true; } } ! [Obsolete("See the Dialect class for reason")] ! public override string NamedParametersPrefix ! { get { return ":"; } } + + + + private string SqlTypeToString(string name, int length) + { + return name + "(" + length + ")"; + } + + private string SqlTypeToString(string name, int precision, int scale) + { + if (precision > 19) precision = 19; + return name + "(" + precision + ", " + scale + ")"; + } + + protected override string SqlTypeToString(AnsiStringFixedLengthSqlType sqlType) + { + return SqlTypeToString("NVARCHAR2", 1000); + } + + protected override string SqlTypeToString(BinarySqlType sqlType) + { + if(sqlType.Length <= 8000) + { + return SqlTypeToString("RAW", sqlType.Length); + } + else + { + return "BLOB"; // should use the IType.BlobType + } + } + + protected override string SqlTypeToString(BooleanSqlType sqlType) + { + return "NUMBER(1,0)"; + } + + + protected override string SqlTypeToString(ByteSqlType sqlType) + { + return "NUMBER(3,0)"; + } + + protected override string SqlTypeToString(CurrencySqlType sqlType) + { + return "NUMBER(19, 1)"; + } + + protected override string SqlTypeToString(DateSqlType sqlType) + { + return "DATE"; + } + + protected override string SqlTypeToString(DateTimeSqlType sqlType) + { + return "DATE"; + } + + protected override string SqlTypeToString(DecimalSqlType sqlType) + { + return SqlTypeToString("NUMBER", sqlType.Precision, sqlType.Scale); + } + + protected override string SqlTypeToString(DoubleSqlType sqlType) + { + return "DOUBLE PRECISION"; + } + + protected override string SqlTypeToString(Int16SqlType sqlType) + { + return "NUMBER(5,0)"; + } + + protected override string SqlTypeToString(Int32SqlType sqlType) + { + return "NUMBER(10,0)"; + } + + protected override string SqlTypeToString(Int64SqlType sqlType) + { + return "NUMBER(20,0)"; + } + + protected override string SqlTypeToString(SingleSqlType sqlType) + { + return "FLOAT"; + } + + protected override string SqlTypeToString(StringFixedLengthSqlType sqlType) + { + if(sqlType.Length <= 2000) + { + return SqlTypeToString("NVARCHAR2", sqlType.Length); + } + else + { + return string.Empty; // should use the IType.ClobType + } + } + + protected override string SqlTypeToString(StringSqlType sqlType) + { + if(sqlType.Length <= 2000) + { + return SqlTypeToString("NVARCHAR2", sqlType.Length); + } + else + { + return string.Empty; // should use the IType.ClobType + } + } } } + Index: Dialect.cs =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/Dialect/Dialect.cs,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** Dialect.cs 28 Apr 2004 03:46:11 -0000 1.29 --- Dialect.cs 18 May 2004 05:01:02 -0000 1.30 *************** *** 414,418 **** /// <value>False, unless overridden.</value> /// <remarks>Inheritors should return true if the correct order is limit, offset</remarks> ! public bool BindLimitParametersInReverseOrder { get { return false;} --- 414,418 ---- /// <value>False, unless overridden.</value> /// <remarks>Inheritors should return true if the correct order is limit, offset</remarks> ! public virtual bool BindLimitParametersInReverseOrder { get { return false;} *************** *** 424,428 **** /// </summary> /// <value>false, unless overridden</value> ! public bool BindLimitParametersFirst { get { return false;} --- 424,428 ---- /// </summary> /// <value>false, unless overridden</value> ! public virtual bool BindLimitParametersFirst { get { return false;} *************** *** 434,438 **** /// </summary> /// <returns>false, unless overridden</returns> ! public bool UseMaxForLimit { get { return false;} --- 434,438 ---- /// </summary> /// <returns>false, unless overridden</returns> ! public virtual bool UseMaxForLimit { get { return false;} *************** *** 443,447 **** /// specified? /// </summary> ! public bool PreferLimit { get { return false; } --- 443,447 ---- /// specified? /// </summary> ! public virtual bool PreferLimit { get { return false; } *************** *** 471,475 **** /// specialization's data. /// </remarks> ! public IDictionary AggregateFunctions { get { return aggregateFunctions;} --- 471,475 ---- /// specialization's data. /// </remarks> ! public virtual IDictionary AggregateFunctions { get { return aggregateFunctions;} Index: OracleDialect.cs =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/Dialect/OracleDialect.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** OracleDialect.cs 19 Feb 2003 16:33:16 -0000 1.2 --- OracleDialect.cs 18 May 2004 05:01:02 -0000 1.3 *************** *** 2,22 **** using NHibernate.Sql; ! namespace NHibernate.Dialect { ! /// <summary> /// An SQL dialect for Oracle, compatible with Oracle 8. /// </summary> ! public class OracleDialect : Oracle9Dialect { ! ! public OracleDialect() : base() { } ! public OuterJoinFragment CreateOuterJoinFragment() { ! return new OracleOuterJoinFragment(); } ! public CaseFragment CreateCaseFragment() { ! return new DecodeCaseFragment(); } } ! } \ No newline at end of file --- 2,27 ---- using NHibernate.Sql; + using NHibernate.SqlCommand; ! namespace NHibernate.Dialect ! { /// <summary> /// An SQL dialect for Oracle, compatible with Oracle 8. /// </summary> ! public class OracleDialect : Oracle9Dialect ! { ! public OracleDialect() : base() ! { } ! public override JoinFragment CreateOuterJoinFragment() ! { ! return new OracleJoinFragment(); } ! ! public override CaseFragment CreateCaseFragment() ! { ! return new DecodeCaseFragment(this); } } ! } |