Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Safar <marek.safar@gmail.com>2017-05-09 18:52:43 +0300
committerMarek Safar <marek.safar@gmail.com>2017-05-09 23:55:46 +0300
commitce55518eb9b79f332788510f6b3b5cadd907b947 (patch)
tree32b4c399c90f284b2b46406133079f71b5e30f53 /mcs/class/System.Data
parent3edf9da975b141a4eac13e4ea606d4a67da86641 (diff)
Bump corefx
Diffstat (limited to 'mcs/class/System.Data')
-rw-r--r--mcs/class/System.Data/corefx.common.sources4
-rw-r--r--mcs/class/System.Data/corefx/DBCommandBuilder.cs91
-rw-r--r--mcs/class/System.Data/corefx/DataView.cs40
-rw-r--r--mcs/class/System.Data/corefx/DbConnection.cs7
-rw-r--r--mcs/class/System.Data/corefx/FieldNameLookup.cs16
-rw-r--r--mcs/class/System.Data/corefx/Index.cs21
-rw-r--r--mcs/class/System.Data/corefx/Selection.cs0
-rw-r--r--mcs/class/System.Data/net_4_x_System.Data.dll.sources3
8 files changed, 181 insertions, 1 deletions
diff --git a/mcs/class/System.Data/corefx.common.sources b/mcs/class/System.Data/corefx.common.sources
index 354c30b5915..641c59fb005 100644
--- a/mcs/class/System.Data/corefx.common.sources
+++ b/mcs/class/System.Data/corefx.common.sources
@@ -223,7 +223,6 @@
../../../external/corefx/src/System.Data.Common/src/System/Data/UpdateRowSource.cs
../../../external/corefx/src/System.Data.Common/src/System/Data/updatestatus.cs
../../../external/corefx/src/System.Data.Common/src/System/Data/XDRSchema.cs
-../../../external/corefx/src/System.Data.Common/src/System/Data/XmlContent.cs
../../../external/corefx/src/System.Data.Common/src/System/Data/XmlDataLoader.cs
../../../external/corefx/src/System.Data.Common/src/System/Data/XMLDiffLoader.cs
../../../external/corefx/src/System.Data.Common/src/System/Data/XmlKeywords.cs
@@ -293,3 +292,6 @@
../referencesource/System.Data/System/Data/SqlClient/SqlUtil.cs
../referencesource/System.Data/System/Data/SqlClient/TdsEnums.cs
../referencesource/System.Data/System/Data/SqlClient/TdsParserStaticMethods.cs
+
+corefx/DataView.cs
+corefx/Index.cs
diff --git a/mcs/class/System.Data/corefx/DBCommandBuilder.cs b/mcs/class/System.Data/corefx/DBCommandBuilder.cs
new file mode 100644
index 00000000000..98c7776a1d5
--- /dev/null
+++ b/mcs/class/System.Data/corefx/DBCommandBuilder.cs
@@ -0,0 +1,91 @@
+namespace System.Data.Common
+{
+ partial class DbCommandBuilder
+ {
+ // open connection is required by OleDb/OdbcCommandBuilder.QuoteIdentifier and UnquoteIdentifier
+ // to get literals quotes from the driver
+ internal DbConnection GetConnection()
+ {
+ DbDataAdapter adapter = DataAdapter;
+ if (adapter != null)
+ {
+ DbCommand select = adapter.SelectCommand;
+ if (select != null)
+ {
+ return select.Connection;
+ }
+ }
+
+ return null;
+ }
+
+ static internal string[] ParseProcedureName(string name, string quotePrefix, string quoteSuffix) {
+ // Procedure may consist of up to four parts:
+ // 0) Server
+ // 1) Catalog
+ // 2) Schema
+ // 3) ProcedureName
+ //
+ // Parse the string into four parts, allowing the last part to contain '.'s.
+ // If less than four period delimited parts, use the parts from procedure backwards.
+ //
+ const string Separator = ".";
+
+ string[] qualifiers = new string[4];
+ if (!ADP.IsEmpty(name)) {
+ bool useQuotes = !ADP.IsEmpty(quotePrefix) && !ADP.IsEmpty(quoteSuffix);
+
+ int currentPos = 0, parts;
+ for(parts = 0; (parts < qualifiers.Length) && (currentPos < name.Length); ++parts) {
+ int startPos = currentPos;
+
+ // does the part begin with a quotePrefix?
+ if (useQuotes && (name.IndexOf(quotePrefix, currentPos, quotePrefix.Length, StringComparison.Ordinal) == currentPos)) {
+ currentPos += quotePrefix.Length; // move past the quotePrefix
+
+ // search for the quoteSuffix (or end of string)
+ while (currentPos < name.Length) {
+ currentPos = name.IndexOf(quoteSuffix, currentPos, StringComparison.Ordinal);
+ if (currentPos < 0) {
+ // error condition, no quoteSuffix
+ currentPos = name.Length;
+ break;
+ }
+ else {
+ currentPos += quoteSuffix.Length; // move past the quoteSuffix
+
+ // is this a double quoteSuffix?
+ if ((currentPos < name.Length) && (name.IndexOf(quoteSuffix, currentPos, quoteSuffix.Length, StringComparison.Ordinal) == currentPos)) {
+ // a second quoteSuffix, continue search for terminating quoteSuffix
+ currentPos += quoteSuffix.Length; // move past the second quoteSuffix
+ }
+ else {
+ // found the terminating quoteSuffix
+ break;
+ }
+ }
+ }
+ }
+
+ // search for separator (either no quotePrefix or already past quoteSuffix)
+ if (currentPos < name.Length) {
+ currentPos = name.IndexOf(Separator, currentPos, StringComparison.Ordinal);
+ if ((currentPos < 0) || (parts == qualifiers.Length-1)) {
+ // last part that can be found
+ currentPos = name.Length;
+ }
+ }
+
+ qualifiers[parts] = name.Substring(startPos, currentPos-startPos);
+ currentPos += Separator.Length;
+ }
+
+ // allign the qualifiers if we had less than MaxQualifiers
+ for(int j = qualifiers.Length-1; 0 <= j; --j) {
+ qualifiers[j] = ((0 < parts) ? qualifiers[--parts] : null);
+ }
+ }
+ return qualifiers;
+ }
+ }
+} \ No newline at end of file
diff --git a/mcs/class/System.Data/corefx/DataView.cs b/mcs/class/System.Data/corefx/DataView.cs
new file mode 100644
index 00000000000..51e4afe6ace
--- /dev/null
+++ b/mcs/class/System.Data/corefx/DataView.cs
@@ -0,0 +1,40 @@
+namespace System.Data
+{
+ partial class DataView
+ {
+ /// <summary>
+ /// Allow construction of DataView with <see cref="System.Predicate&lt;DataRow&gt;"/> and <see cref="System.Comparison&lt;DataRow&gt;"/>
+ /// </summary>
+ /// <remarks>This is a copy of the other DataView ctor and needs to be kept in sync</remarks>
+ internal DataView(DataTable table, System.Predicate<DataRow> predicate, System.Comparison<DataRow> comparison, DataViewRowState RowState) {
+ GC.SuppressFinalize(this);
+ Bid.Trace("<ds.DataView.DataView|API> %d#, table=%d, RowState=%d{ds.DataViewRowState}\n",
+ ObjectID, (table != null) ? table.ObjectID : 0, (int)RowState);
+ if (table == null)
+ throw ExceptionBuilder.CanNotUse();
+
+ this._dvListener = new DataViewListener(this);
+ this._locked = false;
+ this._table = table;
+ _dvListener.RegisterMetaDataEvents(this._table);
+
+ if ((((int)RowState) &
+ ((int)~(DataViewRowState.CurrentRows | DataViewRowState.OriginalRows))) != 0) {
+ throw ExceptionBuilder.RecordStateRange();
+ }
+ else if (( ((int)RowState) & ((int)DataViewRowState.ModifiedOriginal) ) != 0 &&
+ ( ((int)RowState) & ((int)DataViewRowState.ModifiedCurrent) ) != 0
+ ) {
+ throw ExceptionBuilder.SetRowStateFilter();
+ }
+ _comparison = comparison;
+ SetIndex2("", RowState, ((null != predicate) ? new RowPredicateFilter(predicate) : null), true);
+ }
+
+ /// <summary>This method exists for LinqDataView to keep a level of abstraction away from the RBTree</summary>
+ internal Range FindRecords<TKey, TRow>(Index.ComparisonBySelector<TKey, TRow> comparison, TKey key) where TRow : DataRow
+ {
+ return _index.FindRecords(comparison, key);
+ }
+ }
+} \ No newline at end of file
diff --git a/mcs/class/System.Data/corefx/DbConnection.cs b/mcs/class/System.Data/corefx/DbConnection.cs
new file mode 100644
index 00000000000..d53b1d6d581
--- /dev/null
+++ b/mcs/class/System.Data/corefx/DbConnection.cs
@@ -0,0 +1,7 @@
+namespace System.Data.Common
+{
+ partial class DbConnection
+ {
+ internal DbProviderFactory ProviderFactory => DbProviderFactory;
+ }
+} \ No newline at end of file
diff --git a/mcs/class/System.Data/corefx/FieldNameLookup.cs b/mcs/class/System.Data/corefx/FieldNameLookup.cs
new file mode 100644
index 00000000000..80c5925c18a
--- /dev/null
+++ b/mcs/class/System.Data/corefx/FieldNameLookup.cs
@@ -0,0 +1,16 @@
+namespace System.Data.ProviderBase
+{
+ partial class FieldNameLookup
+ {
+ public int IndexOfName(string fieldName)
+ {
+ if (null == _fieldNameLookup)
+ {
+ GenerateLookup();
+ }
+ // via case sensitive search, first match with lowest ordinal matches
+ object value = _fieldNameLookup[fieldName];
+ return ((null != value) ? (int)value : -1);
+ }
+ }
+} \ No newline at end of file
diff --git a/mcs/class/System.Data/corefx/Index.cs b/mcs/class/System.Data/corefx/Index.cs
new file mode 100644
index 00000000000..7d6a3beeb78
--- /dev/null
+++ b/mcs/class/System.Data/corefx/Index.cs
@@ -0,0 +1,21 @@
+namespace System.Data
+{
+ partial class Index
+ {
+ internal delegate int ComparisonBySelector<TKey,TRow>(TKey key, TRow row) where TRow:DataRow;
+
+ /// <summary>This method exists for LinqDataView to keep a level of abstraction away from the RBTree</summary>
+ internal Range FindRecords<TKey,TRow>(ComparisonBySelector<TKey,TRow> comparison, TKey key) where TRow:DataRow
+ {
+ int x = _records.root;
+ while (IndexTree.NIL != x)
+ {
+ int c = comparison(key, (TRow)_table._recordManager[_records.Key(x)]);
+ if (c == 0) { break; }
+ if (c < 0) { x = _records.Left(x); }
+ else { x = _records.Right(x); }
+ }
+ return GetRangeFromNode(x);
+ }
+ }
+} \ No newline at end of file
diff --git a/mcs/class/System.Data/corefx/Selection.cs b/mcs/class/System.Data/corefx/Selection.cs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/mcs/class/System.Data/corefx/Selection.cs
diff --git a/mcs/class/System.Data/net_4_x_System.Data.dll.sources b/mcs/class/System.Data/net_4_x_System.Data.dll.sources
index 47d88bda4c5..755a08f5d52 100644
--- a/mcs/class/System.Data/net_4_x_System.Data.dll.sources
+++ b/mcs/class/System.Data/net_4_x_System.Data.dll.sources
@@ -16,6 +16,9 @@ ReferenceSources/Win32NativeMethods.cs
ReferenceSources/SqlInternalConnectionTds.cs
corefx/SR.cs
+corefx/DBCommandBuilder.cs
+corefx/FieldNameLookup.cs
+corefx/DbConnection.cs
Microsoft.SqlServer.Server/SqlDataRecord.cs
Microsoft.SqlServer.Server/SqlMetaData.cs