Hi,

The attached patch contains the following modifications for SqlTask:

- 'append' boolean attribute. Indicates whether to overwrite output file
or to append to it. Similar to the one in Ant's SqlExec task.
- 'showheaders' boolean attribute. Display schema information or not.
Similar
to the one in Ant's SqlExec task.
- 'quotechar' string attribute. Character(s) to place arround column
values to
prevent collisions with for instance the comma character. Defaults to empty
string.
- changed column separator from "  " (two spaces) to ", " (comma-space,
without the quotes). Similar to Ant's SqlExec task.

Regards,
Roelof Blom.

Index: src/Tasks/SqlTask.cs
===================================================================
RCS file: /cvsroot/nantcontrib/NAntContrib/src/Tasks/SqlTask.cs,v
retrieving revision 1.12
diff -u -r1.12 SqlTask.cs
--- src/Tasks/SqlTask.cs        16 Oct 2003 08:00:27 -0000      1.12
+++ src/Tasks/SqlTask.cs        26 Apr 2004 12:10:45 -0000
@@ -114,6 +114,9 @@
         private int _commandTimeout;
         TextWriter _outputWriter;
         private bool _expandProps = true;
+        private bool _append = false;
+        private bool _showHeaders = true;
+        private string _quoteChar = "";
 
         #endregion Private Instance Fields
 
@@ -230,6 +233,38 @@
             set { _useTransaction = value; }
         }
 
+        /// <summary>
+        /// Whether output should be appended to or overwrite
+        /// an existing file.  Defaults to false.
+        /// </summary>
+        [TaskAttribute("append")]
+        [BooleanValidator()]
+        public bool Append {
+            get { return _append; }
+            set { _append = value; }
+        }
+
+        /// <summary>
+        /// If set to <see langword="true" />, prints headers for result sets.
+        /// The default is <see langword="true" />.
+        /// </summary>
+        [TaskAttribute("showheaders")]
+        [BooleanValidator()]
+        public bool ShowHeaders {
+            get { return _showHeaders; }
+            set { _showHeaders = value; }
+        }
+
+        /// <summary>
+        /// Gets or sets the character or characters to surround result columns with 
when printing,
+        /// the default is an empty string.
+        /// </summary>
+        [TaskAttribute("quotechar")]
+        public string QuoteChar {
+            get { return _quoteChar; }
+            set { _quoteChar = value; }
+        }
+
         #endregion Public Instance Properties
 
         #region Protected Instance Properties
@@ -268,7 +303,11 @@
         protected override void ExecuteTask() {
             if (Output != null) {
                 try  {
-                    _outputWriter = new StreamWriter(File.OpenWrite(Output));
+                    if( Append ) {
+                        _outputWriter = File.AppendText(Output);
+                    } else {
+                        _outputWriter = File.CreateText(Output);
+                    }
                 }  catch (IOException ex) {
                     throw new 
BuildException(string.Format(CultureInfo.InvariantCulture,
                         "Cannot open output file '{0}'.", Output), Location, ex);
@@ -391,31 +430,42 @@
         private void ProcessResults(IDataReader results, TextWriter writer) {
             try {
                 do {
-                    // output header
-                    DataTable schema = results.GetSchemaTable();
-                    if (schema != null) {
-                        writer.WriteLine();
-
-                        int totalHeaderSize = 0;
-                        foreach (DataRow row in schema.Rows) {
-                            string columnName = row["ColumnName"].ToString();
-                            writer.Write(columnName + new string(' ', 2));
-                            totalHeaderSize += columnName.Length + 2;
-                        }
-
-                        writer.WriteLine();
-
-                        if (totalHeaderSize > 2) {
-                            writer.WriteLine(new String('-', totalHeaderSize - 2));
+                    if( ShowHeaders ) {
+                        // output header
+                        DataTable schema = results.GetSchemaTable();
+                        if (schema != null) {
+                            writer.WriteLine();
+
+                            int totalHeaderSize = 0;
+                            foreach (DataRow row in schema.Rows) {
+                                string columnName = row["ColumnName"].ToString();
+                                writer.Write(columnName + new string(' ', 2));
+                                totalHeaderSize += columnName.Length + 2;
+                            }
+
+                            writer.WriteLine();
+
+                            if (totalHeaderSize > 2) {
+                                writer.WriteLine(new String('-', totalHeaderSize - 
2));
+                            }
                         }
                     }
                 
                     // output results
                     while (results.Read()) {
+                        bool first = true;
+                        StringBuilder line = new StringBuilder( 100 );
                         for (int i = 0; i < results.FieldCount; i++ ) {
-                            writer.Write(results[i].ToString() + new string(' ', 2));
+                            if( first ) {
+                                first = false;
+                            } else {
+                                line.Append( ", " );
+                            }
+                            line.Append( QuoteChar );
+                            line.Append( results[i].ToString() );
+                            line.Append( QuoteChar );
                         }
-                        writer.WriteLine();
+                        writer.WriteLine( line.ToString() );
                     }
                     writer.WriteLine();
                 } while (results.NextResult());


Reply via email to