11using System ;
22using System . Collections . Concurrent ;
33using System . Collections . Generic ;
4+ using System . Collections . ObjectModel ;
45using System . ComponentModel ;
56using System . Data ;
67using System . Data . Common ;
3031using Foundation . Text ;
3132using Foundation . Threading ;
3233using Foundation . Windows . Forms ;
34+ using Newtonsoft . Json ;
35+ using Parameter = DataCommander . Providers . QueryConfiguration . Parameter ;
3336using Timer = System . Windows . Forms . Timer ;
3437
3538namespace DataCommander . Providers . Query
@@ -1542,23 +1545,23 @@ private void ExecuteQuery()
15421545 var statements = Provider . GetStatements ( query ) ;
15431546 Log . Write ( LogLevel . Trace , "Query:\r \n {0}" , query ) ;
15441547 IEnumerable < AsyncDataAdapterCommand > commands ;
1548+ QueryConfiguration . Query queryConfiguration = null ;
15451549
15461550 if ( statements . Count == 1 )
15471551 {
1548- _sqlStatement = new SqlParser ( statements [ 0 ] . CommandText ) ;
1552+ GetQueryConfiguration ( statements [ 0 ] . CommandText , out queryConfiguration , out var commandText ) ;
1553+ _sqlStatement = new SqlParser ( commandText ) ;
15491554 var command = _sqlStatement . CreateCommand ( Provider , Connection , _commandType , _commandTimeout ) ;
15501555 command . Transaction = _transaction ;
1551- commands = new [ ]
1552- {
1553- new AsyncDataAdapterCommand ( 0 , command )
1554- } ;
1556+ commands = new AsyncDataAdapterCommand ( 0 , command , queryConfiguration ) . ItemToArray ( ) ;
15551557 }
15561558 else
15571559 commands =
15581560 from statement in statements
15591561 select new AsyncDataAdapterCommand (
15601562 statement . LineIndex ,
1561- Connection . Connection . CreateCommand ( new CreateCommandRequest ( statement . CommandText , null , CommandType . Text , _commandTimeout , _transaction ) ) ) ;
1563+ Connection . Connection . CreateCommand ( new CreateCommandRequest ( statement . CommandText , null , CommandType . Text , _commandTimeout , _transaction ) ) ,
1564+ null ) ;
15621565
15631566 int maxRecords ;
15641567 IResultWriter resultWriter = null ;
@@ -1568,7 +1571,7 @@ from statement in statements
15681571 case ResultWriterType . DataGrid :
15691572 case ResultWriterType . ListView :
15701573 maxRecords = int . MaxValue ;
1571- _dataSetResultWriter = new DataSetResultWriter ( AddInfoMessage , this , _showSchemaTable ) ;
1574+ _dataSetResultWriter = new DataSetResultWriter ( AddInfoMessage , _showSchemaTable ) ;
15721575 resultWriter = _dataSetResultWriter ;
15731576 break ;
15741577
@@ -1579,13 +1582,13 @@ from statement in statements
15791582
15801583 case ResultWriterType . Html :
15811584 maxRecords = _htmlMaxRecords ;
1582- _dataSetResultWriter = new DataSetResultWriter ( AddInfoMessage , this , _showSchemaTable ) ;
1585+ _dataSetResultWriter = new DataSetResultWriter ( AddInfoMessage , _showSchemaTable ) ;
15831586 resultWriter = _dataSetResultWriter ;
15841587 break ;
15851588
15861589 case ResultWriterType . Rtf :
15871590 maxRecords = _wordMaxRecords ;
1588- _dataSetResultWriter = new DataSetResultWriter ( AddInfoMessage , this , _showSchemaTable ) ;
1591+ _dataSetResultWriter = new DataSetResultWriter ( AddInfoMessage , _showSchemaTable ) ;
15891592 resultWriter = _dataSetResultWriter ;
15901593 break ;
15911594
@@ -1658,6 +1661,37 @@ from statement in statements
16581661 }
16591662 }
16601663
1664+ private static void GetQueryConfiguration ( string commandText , out QueryConfiguration . Query query , out string parameterizedCommandText )
1665+ {
1666+ if ( commandText . StartsWith ( "/* Query" ) )
1667+ {
1668+ var index = commandText . IndexOf ( "*/" ) ;
1669+ var json = commandText . Substring ( 10 , index - 10 ) ;
1670+ query = JsonConvert . DeserializeObject < QueryConfiguration . Query > ( json ) ;
1671+ commandText = commandText . Substring ( index + 4 ) ;
1672+
1673+ var stringBuilder = new StringBuilder ( ) ;
1674+ stringBuilder . Append ( ToCommandText ( query . Parameters ) ) ;
1675+ stringBuilder . Append ( "\r \n " ) ;
1676+ stringBuilder . Append ( commandText ) ;
1677+
1678+ parameterizedCommandText = stringBuilder . ToString ( ) ;
1679+ }
1680+ else
1681+ {
1682+ query = null ;
1683+ parameterizedCommandText = commandText ;
1684+ }
1685+ }
1686+
1687+ private static string ToCommandText ( ReadOnlyCollection < Parameter > parameters )
1688+ {
1689+ var stringBuilder = new StringBuilder ( ) ;
1690+ foreach ( var parameter in parameters )
1691+ stringBuilder . Append ( $ "declare @{ parameter . Name } { parameter . DataType } { parameter . Value } \r \n ") ;
1692+ return stringBuilder . ToString ( ) ;
1693+ }
1694+
16611695 private void ShowDataTableText ( DataTable dataTable )
16621696 {
16631697 var textBox = new RichTextBox ( ) ;
@@ -3661,12 +3695,12 @@ public void OpenTable(string query)
36613695 _stopwatch . Start ( ) ;
36623696 _timer . Start ( ) ;
36633697 const int maxRecords = int . MaxValue ;
3664- _dataSetResultWriter = new DataSetResultWriter ( AddInfoMessage , this , _showSchemaTable ) ;
3698+ _dataSetResultWriter = new DataSetResultWriter ( AddInfoMessage , _showSchemaTable ) ;
36653699 IResultWriter resultWriter = _dataSetResultWriter ;
36663700 _dataAdapter = new AsyncDataAdapter ( Provider ,
36673701 new [ ]
36683702 {
3669- new AsyncDataAdapterCommand ( 0 , _command )
3703+ new AsyncDataAdapterCommand ( 0 , _command , null )
36703704 } ,
36713705 maxRecords , _rowBlockSize , resultWriter , EndFillInvoker , WriteEndInvoker ) ;
36723706 _dataAdapter . Start ( ) ;
@@ -3689,11 +3723,9 @@ private void createSqlCeDatabaseToolStripMenuItem_Click(object sender, EventArgs
36893723 var maxRecords = int . MaxValue ;
36903724 var tableName = sqlStatement . FindTableName ( ) ;
36913725 var sqlCeResultWriter = new SqlCeResultWriter ( _textBoxWriter , tableName ) ;
3692- IAsyncDataAdapter asyncDataAdatper = new AsyncDataAdapter ( Provider ,
3693- new [ ]
3694- {
3695- new AsyncDataAdapterCommand ( 0 , _command )
3696- } ,
3726+ IAsyncDataAdapter asyncDataAdatper = new AsyncDataAdapter (
3727+ Provider ,
3728+ new AsyncDataAdapterCommand ( 0 , _command , null ) . ItemToArray ( ) ,
36973729 maxRecords , _rowBlockSize , sqlCeResultWriter , EndFillInvoker , WriteEndInvoker ) ;
36983730 asyncDataAdatper . Start ( ) ;
36993731 }
@@ -3881,7 +3913,7 @@ internal void CopyTable()
38813913 _dataAdapter = new AsyncDataAdapter ( Provider ,
38823914 new [ ]
38833915 {
3884- new AsyncDataAdapterCommand ( 0 , _command )
3916+ new AsyncDataAdapterCommand ( 0 , _command , null )
38853917 } ,
38863918 maxRecords , rowBlockSize , resultWriter , EndFillInvoker , WriteEndInvoker ) ;
38873919 _dataAdapter . Start ( ) ;
0 commit comments