コード例 #1
0
        /// <summary>
        /// Create a JET_INDEXCREATE for the specified index.
        /// </summary>
        /// <param name="name">Name of the index.</param>
        /// <param name="key">Index key.</param>
        /// <param name="mustBeTrue">Columns that must be null.</param>
        /// <param name="mustBeFalse">Columns that must not be null.</param>
        /// <returns>A JET_INDEXCREATE describing the index.</returns>
        private static JET_INDEXCREATE GetIndexCreate(string name, string key, string[] mustBeTrue, string[] mustBeFalse)
        {
            var conditionalcolumns = new JET_CONDITIONALCOLUMN[mustBeTrue.Length + mustBeFalse.Length];
            int i = 0;

            foreach (string column in mustBeTrue)
            {
                conditionalcolumns[i++] = new JET_CONDITIONALCOLUMN
                {
                    szColumnName = column,
                    grbit        = ConditionalColumnGrbit.ColumnMustBeNonNull,
                };
            }

            foreach (string column in mustBeFalse)
            {
                conditionalcolumns[i++] = new JET_CONDITIONALCOLUMN
                {
                    szColumnName = column,
                    grbit        = ConditionalColumnGrbit.ColumnMustBeNull,
                };
            }

            return(new JET_INDEXCREATE
            {
                szIndexName = name,
                szKey = key,
                cbKey = key.Length,
                rgconditionalcolumn = conditionalcolumns,
                cConditionalColumn = conditionalcolumns.Length,
            });
        }
コード例 #2
0
        public void VerifyConditionalColumnCanBeSerialized()
        {
            var expected = new JET_CONDITIONALCOLUMN {
                szColumnName = "column"
            };

            SerializeAndCompareContent(expected);
        }
コード例 #3
0
        public void JetConditionalColumnToString()
        {
            var conditionalcolumn = new JET_CONDITIONALCOLUMN {
                szColumnName = "Foo", grbit = ConditionalColumnGrbit.ColumnMustBeNull
            };

            Assert.AreEqual("JET_CONDITIONALCOLUMN(Foo:ColumnMustBeNull)", conditionalcolumn.ToString());
        }
コード例 #4
0
 public void Setup()
 {
     this.managed = new JET_CONDITIONALCOLUMN
     {
         szColumnName = "column",
         grbit        = ConditionalColumnGrbit.ColumnMustBeNonNull,
     };
     this.native = this.managed.GetNativeConditionalColumn();
 }
コード例 #5
0
        public void VerifyJetConditionalColumnEquality()
        {
            var x = new JET_CONDITIONALCOLUMN {
                szColumnName = "Column", grbit = ConditionalColumnGrbit.ColumnMustBeNonNull
            };
            var y = new JET_CONDITIONALCOLUMN {
                szColumnName = "Column", grbit = ConditionalColumnGrbit.ColumnMustBeNonNull
            };

            TestContentEquals(x, y);
        }
コード例 #6
0
        /// <summary>
        /// Converts a <see cref="IndexDefinition"/> to an array of <see cref="JET_CONDITIONALCOLUMN"/> objects.
        /// </summary>
        /// <param name="indexDefinition">The index definition.</param>
        /// <returns>An array of <see cref="JET_CONDITIONALCOLUMN"/> objects.</returns>
        internal static JET_CONDITIONALCOLUMN[] ConditionalColumnsFromIndexDefinition(IndexDefinition indexDefinition)
        {
            JET_CONDITIONALCOLUMN[] conditionalColumns = new JET_CONDITIONALCOLUMN[indexDefinition.ConditionalColumns.Count];
            for (int col = 0; col < conditionalColumns.Length; ++col)
            {
                conditionalColumns[col] = new JET_CONDITIONALCOLUMN();
            }

            int i = 0;

            foreach (ConditionalColumn conditionalColumn in indexDefinition.ConditionalColumns)
            {
                conditionalColumns[i].szColumnName = conditionalColumn.Name;
                conditionalColumns[i].grbit        = conditionalColumn.MustBeNull
                                                  ? ConditionalColumnGrbit.ColumnMustBeNull
                                                  : ConditionalColumnGrbit.ColumnMustBeNonNull;
                i++;
            }

            return(conditionalColumns);
        }
コード例 #7
0
        /// <summary>Add conditional columns data to the supplied <see cref="JET_INDEXCREATE" />.</summary>
        /// <param name="ic"></param>
        protected void setConditionalColumns(JET_INDEXCREATE ic)
        {
            if (String.IsNullOrEmpty(condition))
            {
                ic.cConditionalColumn  = 0;
                ic.rgconditionalcolumn = null;
                return;
            }

            var res = new List <JET_CONDITIONALCOLUMN>();

            var arrTokens = condition.Split(new char[1] {
                '\0'
            }, StringSplitOptions.None);

            foreach (string strToken in arrTokens)
            {
                JET_CONDITIONALCOLUMN cc = new JET_CONDITIONALCOLUMN();
                if ('+' == strToken[0])
                {
                    cc.grbit = ConditionalColumnGrbit.ColumnMustBeNonNull;
                }
                else if ('-' == strToken[0])
                {
                    cc.grbit = ConditionalColumnGrbit.ColumnMustBeNull;
                }
                else
                {
                    throw new System.Runtime.Serialization.SerializationException("existence specifier not found in the conditional column token " + strToken);
                }

                cc.szColumnName = strToken.Substring(1);

                res.Add(cc);
            }

            ic.cConditionalColumn  = res.Count;
            ic.rgconditionalcolumn = res.ToArray();
        }