Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
SchemaMapping.cs
Go to the documentation of this file.
6using System.IO;
7using System.Xml;
8
10
11internal sealed class SchemaMapping
12{
13 private readonly DataSet _dataSet;
14
16
17 private readonly DataAdapter _adapter;
18
20
21 private readonly DataTable _schemaTable;
22
24
25 private readonly string[] _fieldNames;
26
27 private readonly object[] _readerDataValues;
28
29 private object[] _mappedDataValues;
30
31 private int[] _indexMap;
32
33 private bool[] _chapterMap;
34
35 private int[] _xmlMap;
36
37 private int _mappedMode;
38
39 private int _mappedLength;
40
41 private readonly LoadOption _loadOption;
42
44
46
47 internal object[] DataValues => _readerDataValues;
48
49 [RequiresUnreferencedCode("chapterValue and dataReader schema table rows DataTypes type cannot be statically analyzed.")]
51 {
54 _adapter = adapter;
56 if (keyInfo)
57 {
58 _schemaTable = dataReader.GetSchemaTable();
59 }
61 {
63 }
64 else if (adapter.AcceptChangesDuringFill)
65 {
67 }
68 else
69 {
71 }
74 if (SchemaType.Mapped == schemaType)
75 {
78 if (!string.IsNullOrEmpty(sourceTableName))
79 {
81 }
82 else if (_dataTable != null)
83 {
85 if (-1 != num)
86 {
88 }
89 else
90 {
92 {
97 };
98 }
99 }
100 }
101 else
102 {
103 if (SchemaType.Source != schemaType)
104 {
105 throw ADP.InvalidSchemaType(schemaType);
106 }
109 if (!string.IsNullOrEmpty(sourceTableName))
110 {
112 }
113 else if (_dataTable != null)
114 {
116 if (-1 != num2)
117 {
119 }
120 else
121 {
123 }
124 }
125 }
126 if (_tableMapping == null)
127 {
128 return;
129 }
130 if (_dataTable == null)
131 {
133 }
134 if (_dataTable != null)
135 {
137 if (_schemaTable == null)
138 {
140 }
141 else
142 {
144 }
145 }
146 }
147
149 {
150 DataColumnCollection columns = dataRow.Table.Columns;
152 object[] mappedValues = GetMappedValues();
153 bool[] array = new bool[mappedValues.Length];
154 for (int i = 0; i < array.Length; i++)
155 {
156 array[i] = columns[i].ReadOnly;
157 }
158 try
159 {
160 try
161 {
162 for (int j = 0; j < array.Length; j++)
163 {
164 if (columns[j].Expression.Length == 0)
165 {
166 columns[j].ReadOnly = false;
167 }
168 }
169 for (int k = 0; k < mappedValues.Length; k++)
170 {
171 object obj = mappedValues[k];
172 if (obj != null)
173 {
174 dataRow[k] = obj;
175 }
176 }
177 }
178 finally
179 {
180 for (int l = 0; l < array.Length; l++)
181 {
182 if (columns[l].Expression.Length == 0)
183 {
184 columns[l].ReadOnly = array[l];
185 }
186 }
187 }
188 }
189 finally
190 {
191 if (_chapterMap != null)
192 {
194 }
195 }
196 }
197
198 private void MappedChapterIndex()
199 {
201 for (int i = 0; i < mappedLength; i++)
202 {
203 int num = _indexMap[i];
204 if (0 <= num)
205 {
207 if (_chapterMap[i])
208 {
209 _mappedDataValues[num] = null;
210 }
211 }
212 }
213 }
214
215 private void MappedChapter()
216 {
218 for (int i = 0; i < mappedLength; i++)
219 {
221 if (_chapterMap[i])
222 {
223 _mappedDataValues[i] = null;
224 }
225 }
226 }
227
228 private void MappedIndex()
229 {
231 for (int i = 0; i < mappedLength; i++)
232 {
233 int num = _indexMap[i];
234 if (0 <= num)
235 {
237 }
238 }
239 }
240
241 private void MappedValues()
242 {
244 for (int i = 0; i < mappedLength; i++)
245 {
247 }
248 }
249
250 private object[] GetMappedValues()
251 {
252 if (_xmlMap != null)
253 {
254 for (int i = 0; i < _xmlMap.Length; i++)
255 {
256 if (_xmlMap[i] == 0)
257 {
258 continue;
259 }
260 string text = _readerDataValues[i] as string;
261 if (text == null && _readerDataValues[i] is SqlString sqlString)
262 {
263 if (!sqlString.IsNull)
264 {
265 text = sqlString.Value;
266 }
267 else
268 {
270 int num = i;
271 int num2 = _xmlMap[i];
272 object obj = ((num2 != 1) ? ((object)DBNull.Value) : ((object)SqlXml.Null));
273 readerDataValues[num] = obj;
274 }
275 }
276 if (text != null)
277 {
278 switch (_xmlMap[i])
279 {
280 case 1:
281 {
286 break;
287 }
288 case 2:
289 {
291 xmlDocument.LoadXml(text);
293 break;
294 }
295 }
296 }
297 }
298 }
299 switch (_mappedMode)
300 {
301 default:
302 return _readerDataValues;
303 case 1:
304 MappedValues();
305 break;
306 case 2:
307 MappedIndex();
308 break;
309 case 3:
311 break;
312 case 4:
314 break;
315 }
316 return _mappedDataValues;
317 }
318
319 [RequiresUnreferencedCode("Row chapter column types cannot be statically analyzed")]
320 internal void LoadDataRowWithClear()
321 {
322 for (int i = 0; i < _readerDataValues.Length; i++)
323 {
324 _readerDataValues[i] = null;
325 }
326 LoadDataRow();
327 }
328
329 [RequiresUnreferencedCode("Row chapter column types cannot be statically analyzed")]
330 internal void LoadDataRow()
331 {
332 try
333 {
335 object[] mappedValues = GetMappedValues();
337 switch (_loadOption)
338 {
339 case LoadOption.OverwriteChanges:
340 case LoadOption.PreserveChanges:
341 case LoadOption.Upsert:
343 break;
344 case (LoadOption)4:
346 break;
347 case (LoadOption)5:
349 break;
350 default:
352 }
353 if (_chapterMap != null && _dataSet != null)
354 {
356 }
357 }
358 finally
359 {
360 if (_chapterMap != null)
361 {
363 }
364 }
365 }
366
367 private void FreeDataRowChapters()
368 {
369 for (int i = 0; i < _chapterMap.Length; i++)
370 {
372 {
373 _readerDataValues[i] = null;
374 disposable.Dispose();
375 }
376 }
377 }
378
379 [RequiresUnreferencedCode("Row chapter column types cannot be statically analyzed")]
381 {
382 int num = 0;
383 int num2 = _chapterMap.Length;
384 for (int i = 0; i < num2; i++)
385 {
386 if (!_chapterMap[i])
387 {
388 continue;
389 }
390 object obj = _readerDataValues[i];
391 if (obj == null || Convert.IsDBNull(obj))
392 {
393 continue;
394 }
395 _readerDataValues[i] = null;
397 if (!dataReader.IsClosed)
398 {
400 object parentChapterValue;
401 if (_indexMap == null)
402 {
405 }
406 else
407 {
410 }
414 }
415 }
416 return num;
417 }
418
419 private int[] CreateIndexMap(int count, int index)
420 {
421 int[] array = new int[count];
422 for (int i = 0; i < index; i++)
423 {
424 array[i] = i;
425 }
426 return array;
427 }
428
430 {
431 string[] array = new string[dataReader.FieldCount];
432 for (int i = 0; i < array.Length; i++)
433 {
434 array[i] = dataReader.GetName(i);
435 }
437 return array;
438 }
439
441 {
444 return array;
445 }
446
447 private void AddItemToAllowRollback(ref List<object> items, object value)
448 {
449 if (items == null)
450 {
451 items = new List<object>();
452 }
453 items.Add(value);
454 }
455
457 {
458 if (items == null)
459 {
460 return;
461 }
462 int num = items.Count - 1;
463 while (0 <= num)
464 {
465 if (items[num] != null)
466 {
467 if (items[num] is DataColumn dataColumn)
468 {
469 if (dataColumn.Table != null)
470 {
471 dataColumn.Table.Columns.Remove(dataColumn);
472 }
473 }
474 else if (items[num] is DataTable { DataSet: not null } dataTable)
475 {
476 dataTable.DataSet.Tables.Remove(dataTable);
477 }
478 }
479 num--;
480 }
481 }
482
483 [RequiresUnreferencedCode("chapterValue's type cannot be statically analyzed")]
485 {
486 int[] array = null;
487 bool[] array2 = null;
488 int num = 0;
490 object[] result = null;
491 List<object> items = null;
492 try
493 {
495 columns.EnsureAdditionalCapacity(fieldCount + ((chapterValue != null) ? 1 : 0));
497 for (int i = 0; i < fieldCount; i++)
498 {
499 bool flag2 = false;
501 if (null == type)
502 {
504 }
505 if (typeof(IDataReader).IsAssignableFrom(type))
506 {
507 if (array2 == null)
508 {
509 array2 = new bool[fieldCount];
510 }
511 flag2 = (array2[i] = true);
512 type = typeof(int);
513 }
514 else if (typeof(SqlXml).IsAssignableFrom(type))
515 {
516 if (_xmlMap == null)
517 {
518 _xmlMap = new int[fieldCount];
519 }
520 _xmlMap[i] = 1;
521 }
522 else if (typeof(XmlReader).IsAssignableFrom(type))
523 {
524 type = typeof(string);
525 if (_xmlMap == null)
526 {
527 _xmlMap = new int[fieldCount];
528 }
529 _xmlMap[i] = 2;
530 }
532 if (dataColumn == null)
533 {
534 if (array == null)
535 {
537 }
538 array[i] = -1;
539 continue;
540 }
541 if (_xmlMap != null && _xmlMap[i] != 0)
542 {
543 if (typeof(SqlXml) == dataColumn.DataType)
544 {
545 _xmlMap[i] = 1;
546 }
547 else if (typeof(XmlDocument) == dataColumn.DataType)
548 {
549 _xmlMap[i] = 2;
550 }
551 else
552 {
553 _xmlMap[i] = 0;
554 int num2 = 0;
555 for (int j = 0; j < _xmlMap.Length; j++)
556 {
557 num2 += _xmlMap[j];
558 }
559 if (num2 == 0)
560 {
561 _xmlMap = null;
562 }
563 }
564 }
565 if (dataColumn.Table == null)
566 {
567 if (flag2)
568 {
571 dataColumn.ReadOnly = true;
572 }
575 }
576 else if (flag2 && !dataColumn.AutoIncrement)
577 {
579 }
580 if (array != null)
581 {
582 array[i] = dataColumn.Ordinal;
583 }
584 else if (i != dataColumn.Ordinal)
585 {
587 array[i] = dataColumn.Ordinal;
588 }
589 num++;
590 }
591 bool flag3 = false;
592 DataColumn dataColumn2 = null;
593 if (chapterValue != null)
594 {
595 Type type2 = chapterValue.GetType();
597 if (dataColumn2 != null)
598 {
599 if (dataColumn2.Table == null)
600 {
603 flag3 = parentChapterColumn != null;
604 }
605 num++;
606 }
607 }
608 if (0 < num)
609 {
610 if (_dataSet != null && _dataTable.DataSet == null)
611 {
614 }
615 if (gettingData)
616 {
617 if (columns == null)
618 {
620 }
624 }
625 else
626 {
627 _mappedMode = -1;
628 }
629 }
630 else
631 {
632 _dataTable = null;
633 }
634 if (flag3)
635 {
637 }
638 }
640 {
641 RollbackAddedItems(items);
642 throw;
643 }
644 return result;
645 }
646
647 [RequiresUnreferencedCode("chapterValue and _schemaTable schema rows DataTypes type cannot be statically analyzed. When _loadOption is set, members from types used in the expression column may be trimmed if not referenced directly.")]
649 {
651 if (sortedSchemaRows.Length == 0)
652 {
653 _dataTable = null;
654 return null;
655 }
656 bool flag = (_dataTable.PrimaryKey.Length == 0 && ((LoadOption)4 <= _loadOption || _dataTable.Rows.Count == 0)) || _dataTable.Columns.Count == 0;
657 DataColumn[] array = null;
658 int num = 0;
659 bool flag2 = true;
660 string text = null;
661 string text2 = null;
662 bool flag3 = false;
663 bool flag4 = false;
664 int[] array2 = null;
665 bool[] array3 = null;
666 int num2 = 0;
667 object[] result = null;
668 List<object> items = null;
670 try
671 {
672 for (int i = 0; i < sortedSchemaRows.Length; i++)
673 {
675 int unsortedIndex = dbSchemaRow.UnsortedIndex;
676 bool flag5 = false;
677 Type type = dbSchemaRow.DataType;
678 if (null == type)
679 {
681 }
682 if (null == type)
683 {
685 }
686 if (typeof(IDataReader).IsAssignableFrom(type))
687 {
688 if (array3 == null)
689 {
690 array3 = new bool[sortedSchemaRows.Length];
691 }
692 flag5 = (array3[unsortedIndex] = true);
693 type = typeof(int);
694 }
695 else if (typeof(SqlXml).IsAssignableFrom(type))
696 {
697 if (_xmlMap == null)
698 {
699 _xmlMap = new int[sortedSchemaRows.Length];
700 }
701 _xmlMap[i] = 1;
702 }
703 else if (typeof(XmlReader).IsAssignableFrom(type))
704 {
705 type = typeof(string);
706 if (_xmlMap == null)
707 {
708 _xmlMap = new int[sortedSchemaRows.Length];
709 }
710 _xmlMap[i] = 2;
711 }
712 DataColumn dataColumn = null;
713 if (!dbSchemaRow.IsHidden)
714 {
716 }
717 string baseTableName = dbSchemaRow.BaseTableName;
718 if (dataColumn == null)
719 {
720 if (array2 == null)
721 {
723 }
724 array2[unsortedIndex] = -1;
725 if (dbSchemaRow.IsKey && (flag3 || dbSchemaRow.BaseTableName == text))
726 {
727 flag = false;
728 array = null;
729 }
730 continue;
731 }
732 if (_xmlMap != null && _xmlMap[i] != 0)
733 {
734 if (typeof(SqlXml) == dataColumn.DataType)
735 {
736 _xmlMap[i] = 1;
737 }
738 else if (typeof(XmlDocument) == dataColumn.DataType)
739 {
740 _xmlMap[i] = 2;
741 }
742 else
743 {
744 _xmlMap[i] = 0;
745 int num3 = 0;
746 for (int j = 0; j < _xmlMap.Length; j++)
747 {
748 num3 += _xmlMap[j];
749 }
750 if (num3 == 0)
751 {
752 _xmlMap = null;
753 }
754 }
755 }
756 if (dbSchemaRow.IsKey && baseTableName != text)
757 {
758 if (text == null)
759 {
761 }
762 else
763 {
764 flag3 = true;
765 }
766 }
767 if (flag5)
768 {
769 if (dataColumn.Table == null)
770 {
773 dataColumn.ReadOnly = true;
774 }
775 else if (!dataColumn.AutoIncrement)
776 {
778 }
779 }
780 else
781 {
782 if (!flag4 && baseTableName != text2 && !string.IsNullOrEmpty(baseTableName))
783 {
784 if (text2 == null)
785 {
787 }
788 else
789 {
790 flag4 = true;
791 }
792 }
793 if ((LoadOption)4 <= _loadOption)
794 {
795 if (dbSchemaRow.IsAutoIncrement && DataColumn.IsAutoIncrementType(type))
796 {
798 if (!dbSchemaRow.AllowDBNull)
799 {
801 }
802 }
803 if (type == typeof(string))
804 {
805 dataColumn.MaxLength = ((dbSchemaRow.Size > 0) ? dbSchemaRow.Size : (-1));
806 }
808 {
809 dataColumn.ReadOnly = true;
810 }
811 if (!dbSchemaRow.AllowDBNull && (!dbSchemaRow.IsReadOnly || dbSchemaRow.IsKey))
812 {
814 }
815 if (dbSchemaRow.IsUnique && !dbSchemaRow.IsKey && !type.IsArray)
816 {
817 dataColumn.Unique = true;
818 if (!dbSchemaRow.AllowDBNull)
819 {
821 }
822 }
823 }
824 else if (dataColumn.Table == null)
825 {
826 dataColumn.AutoIncrement = dbSchemaRow.IsAutoIncrement;
830 if (type == typeof(string) || type == typeof(SqlString))
831 {
833 }
834 }
835 }
836 if (dataColumn.Table == null)
837 {
838 if ((LoadOption)4 > _loadOption)
839 {
841 }
844 }
845 if (flag && dbSchemaRow.IsKey)
846 {
847 if (array == null)
848 {
849 array = new DataColumn[sortedSchemaRows.Length];
850 }
851 array[num++] = dataColumn;
852 if (flag2 && dataColumn.AllowDBNull)
853 {
854 flag2 = false;
855 }
856 }
857 if (array2 != null)
858 {
860 }
861 else if (unsortedIndex != dataColumn.Ordinal)
862 {
865 }
866 num2++;
867 }
868 bool flag6 = false;
869 DataColumn dataColumn2 = null;
870 if (chapterValue != null)
871 {
872 Type type2 = chapterValue.GetType();
874 if (dataColumn2 != null)
875 {
876 if (dataColumn2.Table == null)
877 {
882 flag6 = parentChapterColumn != null;
883 }
884 num2++;
885 }
886 }
887 if (0 < num2)
888 {
889 if (_dataSet != null && _dataTable.DataSet == null)
890 {
893 }
894 if (flag && array != null)
895 {
896 if (num < array.Length)
897 {
899 }
900 if (flag2)
901 {
903 }
904 else
905 {
908 int count = constraints.Count;
909 for (int k = 0; k < count; k++)
910 {
911 if (uniqueConstraint.Equals(constraints[k]))
912 {
913 uniqueConstraint = null;
914 break;
915 }
916 }
917 if (uniqueConstraint != null)
918 {
920 }
921 }
922 }
923 if (!flag4 && !string.IsNullOrEmpty(text2) && string.IsNullOrEmpty(_dataTable.TableName))
924 {
926 }
927 if (gettingData)
928 {
932 }
933 else
934 {
935 _mappedMode = -1;
936 }
937 }
938 else
939 {
940 _dataTable = null;
941 }
942 if (flag6)
943 {
945 }
946 }
948 {
949 RollbackAddedItems(items);
950 throw;
951 }
952 return result;
953 }
954
955 [RequiresUnreferencedCode("Members from types used in the expression column may be trimmed if not referenced directly.")]
957 {
958 DataColumnCollection columns = schemaRow.Table.Columns;
960 if (dataColumn != null)
961 {
963 }
965 if (dataColumn != null)
966 {
967 object obj = schemaRow[dataColumn];
968 if (DBNull.Value != obj)
969 {
971 }
972 }
974 if (dataColumn != null)
975 {
976 object obj2 = schemaRow[dataColumn];
977 if (DBNull.Value != obj2)
978 {
980 }
981 }
983 if (dataColumn != null)
984 {
985 object obj3 = schemaRow[dataColumn];
986 if (DBNull.Value != obj3)
987 {
989 }
990 }
992 if (dataColumn != null)
993 {
994 object obj4 = schemaRow[dataColumn];
995 if (DBNull.Value != obj4)
996 {
998 }
999 }
1001 if (dataColumn != null)
1002 {
1003 object obj5 = schemaRow[dataColumn];
1004 if (DBNull.Value != obj5)
1005 {
1007 }
1008 }
1009 }
1010
1012 {
1013 if (_dataSet != null)
1014 {
1015 string columnName = chapterColumn.ColumnName;
1017 int num = 1;
1018 string relationName = columnName;
1020 while (-1 != relations.IndexOf(relationName))
1021 {
1022 relationName = columnName + num;
1023 num++;
1024 }
1027 }
1028 }
1029
1031 {
1032 object[] result = new object[count];
1033 if (_indexMap == null)
1034 {
1036 bool flag = _chapterMap != null;
1037 if (count != count2 || flag)
1038 {
1039 _mappedDataValues = new object[count2];
1040 if (flag)
1041 {
1042 _mappedMode = 3;
1044 }
1045 else
1046 {
1047 _mappedMode = 1;
1049 }
1050 }
1051 else
1052 {
1053 _mappedMode = 0;
1054 }
1055 }
1056 else
1057 {
1059 _mappedMode = ((_chapterMap == null) ? 2 : 4);
1061 }
1062 if (chapterColumn != null)
1063 {
1065 }
1066 return result;
1067 }
1068}
static unsafe void Copy(Array sourceArray, Array destinationArray, int length)
Definition Array.cs:624
bool ICollection< KeyValuePair< TKey, TValue > >. Remove(KeyValuePair< TKey, TValue > keyValuePair)
bool ICollection< KeyValuePair< TKey, TValue > >. IsReadOnly
void Add(TKey key, TValue value)
static bool IsDBNull([NotNullWhen(true)] object? value)
Definition Convert.cs:215
static readonly DBNull Value
Definition DBNull.cs:8
static ArgumentOutOfRangeException InvalidLoadOption(LoadOption value)
Definition ADP.cs:124
static ArgumentOutOfRangeException InvalidSchemaType(SchemaType value)
Definition ADP.cs:144
static Exception FillChapterAutoIncrement()
Definition ADP.cs:400
static InvalidOperationException MissingDataReaderFieldType(int index)
Definition ADP.cs:405
static InvalidOperationException MissingTableMappingDestination(string dstTable)
Definition ADP.cs:228
static void BuildSchemaTableInfoTableNames(string[] columnNameArray)
Definition ADP.cs:592
static bool IsCatchableOrSecurityExceptionType(Exception e)
Definition ADP.cs:800
static ArgumentOutOfRangeException InvalidMissingMappingAction(MissingMappingAction value)
Definition ADP.cs:129
MissingSchemaAction MissingSchemaAction
virtual bool ShouldSerializeFillLoadOption()
MissingMappingAction MissingMappingAction
int FillFromReader(DataSet dataset, DataTable datatable, string srcTable, DataReaderContainer dataReader, int startRecord, int maxRecords)
DataTableMappingCollection TableMappings
DataTableMapping GetTableMappingBySchemaAction(string sourceTableName, string dataSetTableName, MissingMappingAction mappingAction)
int IndexOfDataSetTable(string dataSetTable)
static DataColumn CreateDataColumnBySchemaAction(string sourceColumn, string dataSetColumn, DataTable dataTable, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields|DynamicallyAccessedMemberTypes.PublicProperties)] Type dataType, MissingSchemaAction schemaAction)
static ? DataTableMapping GetTableMappingBySchemaAction(DataTableMappingCollection? tableMappings, string sourceTable, string dataSetTable, MissingMappingAction mappingAction)
DataTable? GetDataTableBySchemaAction(DataSet dataSet, MissingSchemaAction schemaAction)
DataColumn? GetDataColumn(string sourceColumn, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields|DynamicallyAccessedMemberTypes.PublicProperties)] Type? dataType, DataTable dataTable, MissingMappingAction mappingAction, MissingSchemaAction schemaAction)
static DbSchemaRow[] GetSortedSchemaRows(DataTable dataTable, bool returnProviderSpecificTypes)
static bool IsAutoIncrementType(Type dataType)
DataRelationCollection Relations
Definition DataSet.cs:393
DataTableCollection Tables
Definition DataSet.cs:396
DataRowCollection Rows
Definition DataTable.cs:701
ConstraintCollection Constraints
Definition DataTable.cs:332
DataColumnCollection Columns
Definition DataTable.cs:327
DataRow LoadDataRow(object?[] values, bool fAcceptChanges)
static DataReaderContainer Create(IDataReader dataReader, bool returnProviderSpecificTypes)
object[] SetupMapping(int count, DataColumnCollection columnCollection, DataColumn chapterColumn, object chapterValue)
static string[] GenerateFieldNames(DataReaderContainer dataReader)
readonly DataReaderContainer _dataReader
void RollbackAddedItems(List< object > items)
void AddItemToAllowRollback(ref List< object > items, object value)
DataColumn[] ResizeColumnArray(DataColumn[] rgcol, int len)
SchemaMapping(DataAdapter adapter, DataSet dataset, DataTable datatable, DataReaderContainer dataReader, bool keyInfo, SchemaType schemaType, string sourceTableName, bool gettingData, DataColumn parentChapterColumn, object parentChapterValue)
readonly DataTableMapping _tableMapping
int[] CreateIndexMap(int count, int index)
object[] SetupSchemaWithKeyInfo(MissingMappingAction mappingAction, MissingSchemaAction schemaAction, bool gettingData, DataColumn parentChapterColumn, object chapterValue)
object[] SetupSchemaWithoutKeyInfo(MissingMappingAction mappingAction, MissingSchemaAction schemaAction, bool gettingData, DataColumn parentChapterColumn, object chapterValue)
void AddAdditionalProperties(DataColumn targetColumn, DataRow schemaRow)
void AddRelation(DataColumn parentChapterColumn, DataColumn chapterColumn)
static CultureInfo InvariantCulture
static byte Min(byte val1, byte val2)
Definition Math.cs:912
static XmlReader Create(string inputUri)