Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ CreateIndex()

void System.Data.Select.CreateIndex ( )
inlineprivate

Definition at line 322 of file Select.cs.

323 {
324 if (_index != null)
325 {
326 return;
327 }
328 if (_nCandidates == 0)
329 {
331 _index.AddRef();
332 return;
333 }
334 int num = _candidateColumns.Length;
335 int num2 = _indexFields.Length;
336 bool flag = true;
337 int i;
338 for (i = 0; i < num; i++)
339 {
340 if (_candidateColumns[i] != null && !_candidateColumns[i].equalsOperator)
341 {
342 flag = false;
343 break;
344 }
345 }
346 int num3 = 0;
347 for (i = 0; i < num2; i++)
348 {
350 if (columnInfo != null)
351 {
352 columnInfo.flag = true;
353 num3++;
354 }
355 }
356 int num4 = num2 - num3;
357 IndexField[] array = new IndexField[_nCandidates + num4];
358 if (flag)
359 {
360 num3 = 0;
361 for (i = 0; i < num; i++)
362 {
363 if (_candidateColumns[i] != null)
364 {
365 array[num3++] = new IndexField(_table.Columns[i], isDescending: false);
366 _candidateColumns[i].flag = false;
367 }
368 }
369 for (i = 0; i < num2; i++)
370 {
372 if (columnInfo2 == null || columnInfo2.flag)
373 {
374 array[num3++] = _indexFields[i];
375 if (columnInfo2 != null)
376 {
377 columnInfo2.flag = false;
378 }
379 }
380 }
381 for (i = 0; i < _candidateColumns.Length; i++)
382 {
383 if (_candidateColumns[i] != null)
384 {
385 _candidateColumns[i].flag = false;
386 }
387 }
388 _index = new Index(_table, array, _recordStates, null);
390 {
391 _index.AddRef();
392 }
394 return;
395 }
396 for (i = 0; i < num2; i++)
397 {
398 array[i] = _indexFields[i];
400 if (columnInfo3 != null)
401 {
402 columnInfo3.flag = true;
403 }
404 }
405 num3 = i;
406 for (i = 0; i < num; i++)
407 {
408 if (_candidateColumns[i] != null)
409 {
410 if (!_candidateColumns[i].flag)
411 {
412 array[num3++] = new IndexField(_table.Columns[i], isDescending: false);
413 }
414 else
415 {
416 _candidateColumns[i].flag = false;
417 }
418 }
419 }
420 _index = new Index(_table, array, _recordStates, null);
423 {
424 IndexField[] indexFields = _index._indexFields;
425 while (_matchedCandidates < num3)
426 {
427 ColumnInfo columnInfo4 = _candidateColumns[indexFields[_matchedCandidates].Column.Ordinal];
428 if (columnInfo4 == null || columnInfo4.expr == null)
429 {
430 break;
431 }
433 if (!columnInfo4.equalsOperator)
434 {
435 break;
436 }
437 }
438 }
439 for (i = 0; i < _candidateColumns.Length; i++)
440 {
441 if (_candidateColumns[i] != null)
442 {
443 _candidateColumns[i].flag = false;
444 }
445 }
446 }
DataColumnCollection Columns
Definition DataTable.cs:327
void AddRef()
Definition Index.cs:196
readonly IndexField[] _indexFields
Definition Index.cs:34
ColumnInfo[] _candidateColumns
Definition Select.cs:39
int _matchedCandidates
Definition Select.cs:43
ExpressionNode _linearExpression
Definition Select.cs:35
readonly DataViewRowState _recordStates
Definition Select.cs:23
readonly DataTable _table
Definition Select.cs:19
bool IsOperatorIn(ExpressionNode enode)
Definition Select.cs:448
readonly ExpressionNode _expression
Definition Select.cs:27
readonly IndexField[] _indexFields
Definition Select.cs:21
readonly DataColumn Column
Definition IndexField.cs:7

References System.Data.Select._candidateColumns, System.Data.Select._expression, System.Data.Select._index, System.Data.Index._indexFields, System.Data.Select._indexFields, System.Data.Select._linearExpression, System.Data.Select._matchedCandidates, System.Data.Select._nCandidates, System.Data.Select._recordStates, System.Data.Select._table, System.Data.Index.AddRef(), System.array, System.Data.IndexField.Column, System.Data.DataTable.Columns, System.Data.Select.ColumnInfo.flag, System.Data.Select.IsOperatorIn(), and System.Data.DataColumn.Ordinal.

Referenced by System.Data.Select.SelectRows().