コード例 #1
0
ファイル: SQLiteTable.cs プロジェクト: meziantou/SQLNado
        private bool CanBeRowId(SQLiteColumn column)
        {
            if (!column.IsPrimaryKey)
            {
                return(false);
            }

            if (!column.Type.EqualsIgnoreCase(SQLiteColumnType.INTEGER.ToString()))
            {
                return(false);
            }

            // https://sqlite.org/lang_createtable.html#rowid
            // http://www.sqlite.org/pragma.html#pragma_index_xinfo
            var apk = AutoPrimaryKey;

            if (apk != null)
            {
                var col = apk.IndexColumns.FirstOrDefault(c => c.Name.EqualsIgnoreCase(column.Name));
                if (col != null)
                {
                    return(col.IsRowId);
                }
            }
            return(true);
        }
コード例 #2
0
        public virtual bool IsSynchronized(SQLiteColumn column, SQLiteObjectColumnSynchronizationOptions options)
        {
            if (column == null)
            {
                throw new ArgumentNullException(nameof(column));
            }

            if (!Name.EqualsIgnoreCase(column.Name))
            {
                return(false);
            }

            if (IsNullable == column.IsNotNullable)
            {
                return(false);
            }

            if (HasDefaultValue)
            {
                if (DefaultValue == null)
                {
                    if (column.DefaultValue != null)
                    {
                        return(false);
                    }

                    // else ok
                }
                else
                {
                    var def = Table.Database.ChangeType(column.DefaultValue, DefaultValue.GetType());
                    if (!DefaultValue.Equals(def))
                    {
                        return(false);
                    }
                }
            }
            else if (column.DefaultValue != null)
            {
                return(false);
            }

            if (IsPrimaryKey != column.IsPrimaryKey)
            {
                return(false);
            }

            if (!AreCollationsEqual(Collation, column.Collation))
            {
                return(false);
            }

            if (AutoIncrements != column.AutoIncrements)
            {
                return(false);
            }

            if (options.HasFlag(SQLiteObjectColumnSynchronizationOptions.CheckDataType))
            {
                if (!DataType.EqualsIgnoreCase(column.Type))
                {
                    return(false);
                }
            }
            else
            {
                if (Affinity != column.Affinity)
                {
                    return(false);
                }
            }

            return(true);
        }