From: <na...@us...> - 2006-09-22 09:34:30
|
Revision: 708 http://svn.sourceforge.net/instantobjects/revision/?rev=708&view=rev Author: nandod Date: 2006-09-22 02:34:16 -0700 (Fri, 22 Sep 2006) Log Message: ----------- * Modification to Support MSSQL 2005 (on behalf of B. Simmons). * Modification to Correct bug in Alter Table Alter Column Syntax for MSSQL (on behalf of B. Simmons). Modified Paths: -------------- trunk/Source/Brokers/ADO/InstantADO.pas trunk/Source/Catalogs/MSSql/InstantMSSqlCatalog.pas Modified: trunk/Source/Brokers/ADO/InstantADO.pas =================================================================== --- trunk/Source/Brokers/ADO/InstantADO.pas 2006-09-22 09:17:32 UTC (rev 707) +++ trunk/Source/Brokers/ADO/InstantADO.pas 2006-09-22 09:34:16 UTC (rev 708) @@ -164,6 +164,11 @@ { MS SQL Server } + TInstantADOMSSQLGenerator = class(TInstantSQLGenerator) + protected + function InternalGenerateAlterFieldSQL(OldMetadata, NewMetadata: TInstantFieldMetadata): string; override; + end; + TInstantADOMSSQLBroker = class(TInstantSQLBroker) protected function CreateCatalog(const AScheme: TInstantScheme): TInstantCatalog; override; @@ -177,6 +182,7 @@ function CreateDataSet(const Statement: string; Params: TParams): TDataSet; override; function DataTypeToColumnType(DataType: TInstantDataType; Size: Integer): string; override; function Execute(const AStatement: string; AParams: TParams): Integer; override; + class function GeneratorClass: TInstantSQLGeneratorClass; override; end; TInstantADOMSSQLResolver = class(TInstantSQLResolver) @@ -685,6 +691,7 @@ const MSJetPrefix = 'Microsoft.Jet'; MSSQLPrefix = 'SQLOLEDB'; + MSSQL2005Prefix = 'SQLNCLI'; OraclePrefix = 'ORA'; MySQLPrefix = 'My'; IBMDB2Prefix = 'IBMDADB2'; @@ -694,7 +701,7 @@ begin if HasPrefix(MSJetPrefix) then Result := ptMSJet - else if HasPrefix(MSSQLPrefix) then + else if HasPrefix(MSSQLPrefix) or HasPrefix(MSSQL2005Prefix) then Result := ptMSSQLServer else if HasPrefix(OraclePrefix) or HasPrefix(MSOraclePrefix) then Result := ptOracle @@ -1024,8 +1031,24 @@ end; end; +{ TInstantADOMSSQLGenerator } + +function TInstantADOMSSQLGenerator.InternalGenerateAlterFieldSQL(OldMetadata, + NewMetadata: TInstantFieldMetadata): string; +begin + Result := Format('ALTER TABLE %s ALTER COLUMN %s %s', + [EmbraceTable(OldMetadata.TableMetadata.Name), + EmbraceField(OldMetadata.Name), + Broker.DataTypeToColumnType(NewMetadata.DataType, NewMetadata.Size)]); +end; + { TInstantADOMSSQLBroker } +class function TInstantADOMSSQLBroker.GeneratorClass: TInstantSQLGeneratorClass; +begin + Result := TInstantADOMSSQLGenerator; +end; + procedure TInstantADOMSSQLBroker.AssignDataSetParams(DataSet: TDataSet; AParams: TParams); begin Modified: trunk/Source/Catalogs/MSSql/InstantMSSqlCatalog.pas =================================================================== --- trunk/Source/Catalogs/MSSql/InstantMSSqlCatalog.pas 2006-09-22 09:17:32 UTC (rev 707) +++ trunk/Source/Catalogs/MSSql/InstantMSSqlCatalog.pas 2006-09-22 09:34:16 UTC (rev 708) @@ -23,7 +23,7 @@ * Portions created by the Initial Developer are Copyright (C) 2005 * the Initial Developer. All Rights Reserved. * - * Contributor(s): Nando Dessena + * Contributor(s): Nando Dessena, Bernard Simmons * * ***** END LICENSE BLOCK ***** *) @@ -242,23 +242,22 @@ ' t.name AS COLUMN_TYPENAME, ' + ' c.xtype AS COLUMN_SUBTYPE, ' + ' CASE ' + - ' WHEN (d.oledb_data_type = 135) AND (c.xtype in (58, 61)) THEN 16' + - ' WHEN (d.oledb_data_type = 6) THEN 8' + - ' WHEN (d.oledb_data_type = 4) THEN 8' + - ' WHEN (d.oledb_data_type = 20) THEN 34' + - ' WHEN (d.oledb_data_type = 72) AND (c.xtype = 36) THEN 38' + + ' WHEN (c.xtype in (58, 61)) THEN 16' + + ' WHEN (c.xtype = 122) THEN 8' + + ' WHEN (c.xtype = 59) THEN 8' + + ' WHEN (c.xtype = 127) THEN 34' + + ' WHEN (c.xtype = 36) THEN 38' + ' ELSE c.length ' + ' END ' + ' AS COLUMN_LENGTH, ' + ' c.prec AS COLUMN_PRECISION, ' + ' CAST(c.scale AS SMALLINT) AS COLUMN_SCALE ' + 'FROM ' + - ' sysobjects o, syscolumns c, systypes t, master.dbo.spt_provider_types d ' + + ' sysobjects o, syscolumns c, systypes t ' + 'WHERE ' + ' o.type in (''U'', ''V'', ''S'') ' + ' AND o.id = c.id ' + ' AND c.xusertype = t.xusertype ' + - ' and c.xtype = d.ss_dtype ' + ' AND o.name = ''' + ATableName + ''' ' + ' ORDER BY c.colorder'; end; |