Exemplo n.º 1
0
        /// <summary>
        /// Creates SQLite table in the passed connection for the passed object implementing iSQLitable.
        /// </summary>
        /// <param name="sqliteConnection">The SQLiteConnection object which points to the SQLite database.</param>
        /// <param name="sqliteEnabledType">Type of the object being </param>
        /// <returns>True on success. False on failure.</returns>
        public static bool CreateSQLiteTable(SQLiteConnection sqliteConnection, Type sqliteEnabledType)
        {
            // Will only work with classes that are sqliteEnabledType.
            if (sqliteEnabledType.BaseType != typeof(SQLiteEnabled))
            {
                return(false);
            }

            string CreateCommandText = "Create Table " + sqliteEnabledType.Name + "(";

            foreach (var ThisMember in sqliteEnabledType.GetMembers().Where(m => m.MemberType == System.Reflection.MemberTypes.Property).ToList())
            {
                if (!IsPropertySQLiteEnabledSerialized(ThisMember))
                {
                    continue;
                }

                string ThisPropertyType = ThisMember.ToString().Split(' ')[0].ToUpper();

                // This type mapping relies on the fact that SQLite actually has only a couple actual data types that are mapped.
                CreateCommandText += ThisMember.Name + " ";

                if (ThisPropertyType.Contains("INT"))
                {
                    CreateCommandText += "INTEGER";

                    // This needs to read the method on the type GetPrimaryKeyFieldName().
                    if (ThisMember.Name == "ID")
                    {
                        CreateCommandText += " PRIMARY KEY AUTOINCREMENT ";
                    }
                }
                else if (ThisPropertyType.Contains("DEC") || ThisPropertyType.Contains("DOUBLE"))
                {
                    CreateCommandText += "REAL";
                }
                else if (ThisPropertyType.Contains("STRING") || ThisPropertyType.Contains("CHAR"))
                {
                    CreateCommandText += "TEXT";
                }
                else if (ThisPropertyType.Contains("DATE"))
                {
                    CreateCommandText += "DATETIME";
                }
                else if (ThisPropertyType.Contains("BOOLEAN"))
                {
                    CreateCommandText += "BOOLEAN";
                }

                CreateCommandText += ", ";
            }
            CreateCommandText = CreateCommandText.SubstringBeforeLast(',') + ")";


            var CreateCommand = sqliteConnection.CreateCommand();

            CreateCommand.CommandText = CreateCommandText;

            return(0 <= CreateCommand.ExecuteNonQuery());
        }
Exemplo n.º 2
0
        /// <summary>
        /// Updates sqliteEnabledObject in the database indicated by sqliteConnection.
        /// </summary>
        /// <param name="sqliteConnection">The SQLiteConnection object which points to the SQLite database.</param>
        /// <param name="sqliteEnabledObject">The SQLiteEnabled object to update.</param>
        /// <param name="sqliteEnabledType">The type of SQLiteEnabled object.</param>
        /// <returns>True on success or throws on exception.</returns>
        public static bool UpdateObject(SQLiteConnection sqliteConnection, dynamic sqliteEnabledObject, Type sqliteEnabledType)
        {
            var UpdateCommand = sqliteConnection.CreateCommand();

            UpdateCommand.CommandText = "UPDATE " + sqliteEnabledType.Name + " SET ";

            // Insert all the field settings except for ID.
            foreach (var ThisMember in sqliteEnabledType.GetMembers().Where(m => m.MemberType == System.Reflection.MemberTypes.Property).ToList())
            {
                if (ThisMember.Name == "ID")
                {
                    continue;
                }
                if (!IsPropertySQLiteEnabledSerialized(ThisMember))
                {
                    continue;
                }
                string ThisPropertyType = ThisMember.ToString().Split(' ')[0].ToUpper();
                string ThisPropertyName = ThisMember.Name;

                UpdateCommand.CommandText += ThisPropertyName + "=";

                if (ThisPropertyType.Contains("INT") || ThisPropertyType.Contains("DEC") || ThisPropertyType.Contains("DOUBLE"))
                {
                    // Numeric types can put into the command.
                    UpdateCommand.CommandText += sqliteEnabledType.GetProperty(ThisPropertyName).GetValue(sqliteEnabledObject).ToString();
                }
                else if (ThisPropertyType.Contains("STRING") || ThisPropertyType.Contains("CHAR"))
                {
                    // Character and DateTime types get wrapped in quotes.
                    UpdateCommand.CommandText += "'" + sqliteEnabledType.GetProperty(ThisPropertyName).GetValue(sqliteEnabledObject).ToString() + "'";
                }
                else if (ThisPropertyType.Contains("DATE"))
                {
                    // DateTime types must be parsed by SQLite properly.
                    var DateValue = sqliteEnabledType.GetProperty(ThisPropertyName).GetValue(sqliteEnabledObject).GetDateTimeFormats('s')[0];
                    UpdateCommand.CommandText += "DateTime('" + DateValue + "')";
                }
                else if (ThisPropertyType.Contains("BOOLEAN"))
                {
                    // Boolean
                    UpdateCommand.CommandText += sqliteEnabledType.GetProperty(ThisPropertyName).GetValue(sqliteEnabledObject) ? "1" : "0";
                }

                UpdateCommand.CommandText += ", ";
            }

            UpdateCommand.CommandText  = UpdateCommand.CommandText.SubstringBeforeLast(',');
            UpdateCommand.CommandText += " WHERE ID=" + sqliteEnabledObject.ID.ToString();

            // Execute update or insert.
            if (0 > UpdateCommand.ExecuteNonQuery())
            {
                throw new Exception("Error committing data");
            }

            return(true);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Function computes all the fields contained in the SQLiteEnabled object to a single byte array which can be stored and compared
        /// later to check if the object has been modified.
        /// </summary>
        /// <returns>A byte array containing the values from all the fields on the object.</returns>
        private byte[] ComputeByteArrayValue()
        {
            var ComputedValue = new List <byte>();

            foreach (var ThisMember in this.GetType().GetMembers().Where(m => m.MemberType == System.Reflection.MemberTypes.Property).ToList())
            {
                if (!IsPropertySQLiteEnabledSerialized(ThisMember))
                {
                    continue;
                }

                string ThisPropertyType = ThisMember.ToString().Split(' ')[0].ToUpper();
                string ThisPropertyName = ThisMember.Name;

                if (ThisPropertyType.Contains("INT") || ThisPropertyType.Contains("DEC") || ThisPropertyType.Contains("DOUBLE"))
                {
                    if (ThisPropertyType.Contains("INT"))
                    {
                        // 64-bit integers map to long.
                        long Value = (long)(this.GetType().GetProperty(ThisPropertyName).GetValue(this));
                        ComputedValue.AddRange(BitConverter.GetBytes(Value).ToList());
                    }
                    else
                    {
                        Double Value = (double)(this.GetType().GetProperty(ThisPropertyName).GetValue(this));
                        ComputedValue.AddRange(BitConverter.GetBytes(Value).ToList());
                    }
                }
                else if (ThisPropertyType.Contains("STRING") || ThisPropertyType.Contains("CHAR"))
                {
                    foreach (char c in this.GetType().GetProperty(ThisPropertyName).GetValue(this).ToString().ToCharArray())
                    {
                        ComputedValue.AddRange(BitConverter.GetBytes(c).ToList());
                    }
                }
                else if (ThisPropertyType.Contains("DATE"))
                {
                    DateTime Value = (DateTime)(this.GetType().GetProperty(ThisPropertyName).GetValue(this));

                    ComputedValue.AddRange(BitConverter.GetBytes(Value.Year).ToList());
                    ComputedValue.AddRange(BitConverter.GetBytes(Value.Month).ToList());
                    ComputedValue.AddRange(BitConverter.GetBytes(Value.Day).ToList());
                }
                else if (ThisPropertyType.Contains("BOOLEAN"))
                {
                    bool Value = (bool)(this.GetType().GetProperty(ThisPropertyName).GetValue(this));

                    ComputedValue.AddRange(BitConverter.GetBytes(Value));
                }
            }

            return(ComputedValue.ToArray());
        }
Exemplo n.º 4
0
        private void MedKitTreeViewItem_MouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            var member = this.GetSelectedMember(e);

            if (member != null && ThisMember.Equals(member))
            {
                if (!this.IsExpanded)
                {
                    this.IsExpanded = true;
                }
            }
        }
Exemplo n.º 5
0
        PairedMembers IMemberMappingDefinition.CreateMapping(MappingDefinitionInformation mappingDefinition, Type fromClass, Type toClass)
        {
            IMember memberFrom;

            if (this.aFromName == null)
            {
                memberFrom = new ThisMember <TFromType>();
            }
            else
            {
                memberFrom = new MemberFromNameParser(fromClass).ParseRead(this.aFromName);
            }
            IMember memberTo;

            if (this.aToName == null)
            {
                memberTo = new ThisMember <TToType>();
            }
            else
            {
                memberTo = new MemberFromNameParser(toClass).ParseWrite(this.aToName);
            }

            IUnresolvedMapping <TFromType, TToType> mapping;

            if (this.aRules == null)
            {
                mapping = mappingDefinition.UnresolvedMappings.GetUnresolvedMapping <TFromType, TToType>();
            }
            else
            {
                mapping = this.aRules.Create(mappingDefinition).AsUnresolved();
            }

            return(new PairedMembers(memberFrom, memberTo, mapping));
        }
Exemplo n.º 6
0
        /// <summary>
        /// Inserts sqliteEnabledObject into the database indicated by sqliteConnection.
        /// </summary>
        /// <param name="sqliteConnection">The SQLiteConnection object which points to the SQLite database.</param>
        /// <param name="sqliteEnabledObject">The SQLiteEnabled object to insert.</param>
        /// <param name="sqliteEnabledType">The type of SQLiteEnabled object.</param>
        /// <returns>True on success or throws on exception.</returns>
        public static bool InsertObject(SQLiteConnection sqliteConnection, dynamic sqliteEnabledObject, Type sqliteEnabledType)
        {
            var InsertCommand = sqliteConnection.CreateCommand();

            InsertCommand.CommandText = "INSERT INTO " + sqliteEnabledType.Name + "(";

            foreach (var ThisMember in sqliteEnabledType.GetMembers().Where(m => m.MemberType == System.Reflection.MemberTypes.Property).ToList())
            {
                if (ThisMember.Name == "ID")
                {
                    continue;
                }
                if (!IsPropertySQLiteEnabledSerialized(ThisMember))
                {
                    continue;
                }

                string ThisPropertyName = ThisMember.Name;

                InsertCommand.CommandText += ThisPropertyName + ", ";
            }
            InsertCommand.CommandText = InsertCommand.CommandText.SubstringBeforeLast(',') + ") VALUES (";

            foreach (var ThisMember in sqliteEnabledType.GetMembers().Where(m => m.MemberType == System.Reflection.MemberTypes.Property).ToList())
            {
                if (ThisMember.Name == "ID")
                {
                    continue;
                }
                if (!IsPropertySQLiteEnabledSerialized(ThisMember))
                {
                    continue;
                }

                string ThisPropertyType = ThisMember.ToString().Split(' ')[0].ToUpper();
                string ThisPropertyName = ThisMember.Name;

                if (ThisPropertyType.Contains("INT") || ThisPropertyType.Contains("DEC") || ThisPropertyType.Contains("DOUBLE"))
                {
                    // Numeric types can put into the command.
                    InsertCommand.CommandText += sqliteEnabledType.GetProperty(ThisPropertyName).GetValue(sqliteEnabledObject).ToString();
                }
                else if (ThisPropertyType.Contains("STRING") || ThisPropertyType.Contains("CHAR"))
                {
                    // Character and DateTime types get wrapped in quotes.
                    InsertCommand.CommandText += "'" + sqliteEnabledType.GetProperty(ThisPropertyName).GetValue(sqliteEnabledObject).ToString() + "'";
                }
                else if (ThisPropertyType.Contains("DATE"))
                {
                    // DateTime types must be parsed by SQLite properly.
                    var DateValue = sqliteEnabledType.GetProperty(ThisPropertyName).GetValue(sqliteEnabledObject).GetDateTimeFormats('s')[0];
                    InsertCommand.CommandText += "DateTime('" + DateValue + "')";
                }
                else if (ThisPropertyType.Contains("BOOLEAN"))
                {
                    InsertCommand.CommandText += sqliteEnabledType.GetProperty(ThisPropertyName).GetValue(sqliteEnabledObject) ? "1" : "0";
                }

                InsertCommand.CommandText += ", ";
            }

            InsertCommand.CommandText = InsertCommand.CommandText.SubstringBeforeLast(',') + ")";

            // Execute update or insert.
            if (0 > InsertCommand.ExecuteNonQuery())
            {
                throw new Exception("Error committing data");
            }

            // Read back inserted id.
            var SelectCommand = sqliteConnection.CreateCommand();

            SelectCommand.CommandText = "SELECT ID FROM " + sqliteEnabledType.Name + " ORDER BY ID DESC LIMIT 1";
            var SQLiteReader = SelectCommand.ExecuteReader();

            if (SQLiteReader.Read())
            {
                sqliteEnabledObject.ID = (Int64)SQLiteReader["ID"];
            }
            else
            {
                throw new Exception("Error getting last inserted id.");
            }

            return(true);
        }