Example #1
0
        public void AddColumns(ColumnDef[] columns, bool dropExisting)
        {
            DbCommand cmd = connection.CreateCommand();
            cmd.CommandType = CommandType.Text;

            using (connection)
            {
                connection.ConnectionString = connString;
                connection.Open();

                if (dropExisting)
                    DropAllColumns(cmd);

                string Sql = string.Empty;
                string colList = string.Empty;
                string valList = string.Empty;
                foreach (ColumnDef column in columns)
                {
                    colList += string.Format("[{0}] {1} {3}, ", column.name, column.type,
                        (column.allowDBNull) ? "NULL" : string.Empty);
                    valList += string.Format("('{0}','{1}'), ", column.name, column.displayName);
                }

                Sql += string.Format("ALTER TABLE Items ADD {0};\n", colList.Substring(0, colList.Length - 2));
                Sql += string.Format("INSERT INTO ExtColumns (ColumnName, DisplayName) VALUES {0}", valList.Substring(0, valList.Length - 2));

                cmd.CommandText = Sql;
                cmd.ExecuteNonQuery();
            }
        }
Example #2
0
        // Manager
        public void AddColumns(string tableName, ColumnDef[] columns, bool dropExisting)
        {
            string quotedTableName = QuoteIdentifier(tableName);

            using (DbConnection cnn = GetConnection())
            {
                cnn.Open();

                DbCommand cmd = GetCommand(cnn);

                if (dropExisting)
                    DropAllColumns(cmd, quotedTableName);

                string Sql = string.Empty;
                string colList = string.Empty;
                string valList = string.Empty;
                foreach (ColumnDef column in columns)
                {
                    colList += string.Format("{0} {1} {3}, ", QuoteIdentifier(column.name), column.type,
                        (column.allowDBNull) ? "NULL" : string.Empty);
                    valList += string.Format("('{0}','{1}'), ", column.name, column.displayName);
                }

                Sql += string.Format("ALTER TABLE {0} ADD {1};\n", quotedTableName, colList.Substring(0, colList.Length - 2));
                Sql += string.Format("INSERT INTO ExtColumns (ColumnName, DisplayName) VALUES {0}", valList.Substring(0, valList.Length - 2));

                cmd.CommandText = Sql;
                cmd.ExecuteNonQuery();
            }
        }
Example #3
0
        void store_CreateSchema(object sender, SQLiteConnection cnn, int actualVersion)
        {
            // cnn connection running in transaction

            SQLiteStore store = (SQLiteStore)sender;

            if (actualVersion <= 2)
            {
                // expand new schema

                if (actualVersion == 2)
                {
                    store.DropTable(cnn, "Attributes");
                    store.DropTable(cnn, "Files");
                }

                TableDef tableDef = new TableDef
                {
                    name = "Attributes",
                    displayName = "File Attributes",
                    columns = new ColumnDef[] {
                        new ColumnDef {name = "Name", displayName = "Name", type = "NVARCHAR"},
                        new ColumnDef {name = "Value", displayName = "Value", type = "NVARCHAR"},
                        new ColumnDef {name = "FileId", displayName = "FileId", type = "TABLE", parentTable = "Files"}
                    }
                };

                store.AddTable(cnn, tableDef);

                tableDef = new TableDef
                {
                    name = "Files",
                    displayName = "My Files",
                    columns = new ColumnDef[] {
                        new ColumnDef {name = "FileName", displayName = "File name", type = "NVARCHAR"},
                        new ColumnDef {name = "FilePath", displayName = "Path", type = "NVARCHAR"},
                        new ColumnDef {name = "FileSize", displayName = "Size", type = "INT"}
                    }
                };

                store.AddTable(cnn, tableDef);
            }
            else if (actualVersion == 3)
            {
                ColumnDef[] newCols = new ColumnDef[] {
                    new ColumnDef{ name = "state", displayName = "State", type = "TEXT", defValue = "'n/a'"},
                    new ColumnDef{ name = "image_size", displayName = "Image Size", type = "TEXT", defValue = "''"},
                    new ColumnDef{ name = "pixel_format", displayName = "Pixel Format", type = "TEXT", defValue = "''"}
                };

                store.AddColumns(cnn, "Files", newCols);
            }
        }
Example #4
0
        void store_CreateSchema(object sender, SQLiteConnection cnn, int actualVersion)
        {
            // cnn connection running in transaction

            SQLiteStore store = (SQLiteStore)sender;

            if (actualVersion <= 2)
            {
                // expand new schema

                if (actualVersion == 2)
                {
                    store.DropTable(cnn, "Attributes");
                    store.DropTable(cnn, "Files");
                }

                TableDef tableDef = new TableDef
                {
                    name        = "Attributes",
                    displayName = "File Attributes",
                    columns     = new ColumnDef[] {
                        new ColumnDef {
                            name = "Name", displayName = "Name", type = "NVARCHAR"
                        },
                        new ColumnDef {
                            name = "Value", displayName = "Value", type = "NVARCHAR"
                        },
                        new ColumnDef {
                            name = "FileId", displayName = "FileId", type = "TABLE", parentTable = "Files"
                        }
                    }
                };

                store.AddTable(cnn, tableDef);

                tableDef = new TableDef
                {
                    name        = "Files",
                    displayName = "My Files",
                    columns     = new ColumnDef[] {
                        new ColumnDef {
                            name = "FileName", displayName = "File name", type = "NVARCHAR"
                        },
                        new ColumnDef {
                            name = "FilePath", displayName = "Path", type = "NVARCHAR"
                        },
                        new ColumnDef {
                            name = "FileSize", displayName = "Size", type = "INT"
                        }
                    }
                };

                store.AddTable(cnn, tableDef);
            }
            else if (actualVersion == 3)
            {
                ColumnDef[] newCols = new ColumnDef[] {
                    new ColumnDef {
                        name = "state", displayName = "State", type = "TEXT", defValue = "'n/a'"
                    },
                    new ColumnDef {
                        name = "image_size", displayName = "Image Size", type = "TEXT", defValue = "''"
                    },
                    new ColumnDef {
                        name = "pixel_format", displayName = "Pixel Format", type = "TEXT", defValue = "''"
                    }
                };

                store.AddColumns(cnn, "Files", newCols);
            }
        }
Example #5
0
        private void LoadTableDefs(SQLiteConnection cnn)
        {
            if (_tableDefs == null)
            {
                _tableDefs = new Dictionary <string, TableDef>(StringComparer.CurrentCultureIgnoreCase);
            }
            else
            {
                _tableDefs.Clear();
            }

            // read table defs

            SQLiteCommand    cmd    = GetCommand(cnn, "SELECT Id, Name, DisplayName FROM TableDefs");
            SQLiteDataReader reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                TableDef tableDef = new TableDef
                {
                    id          = reader.GetInt32(0),
                    name        = reader.GetString(1),
                    displayName = reader.GetString(2)
                };

                _tableDefs.Add(tableDef.name, tableDef);
            }
            reader.Close();

            // read column defs

            cmd.CommandText = "SELECT Id, Name, DisplayName, Type, ParentTable FROM ColumnDefs WHERE TableId = ?";
            SQLiteParameter idParam = new SQLiteParameter();

            cmd.Parameters.Add(idParam);
            cmd.Prepare();

            foreach (TableDef tableDef in _tableDefs.Values)
            {
                List <ColumnDef> colDefs = new List <ColumnDef>();

                idParam.Value = tableDef.id;
                reader        = cmd.ExecuteReader();
                while (reader.Read())
                {
                    ColumnDef colDef = new ColumnDef()
                    {
                        id          = reader.GetInt32(0),
                        name        = reader.GetString(1),
                        displayName = reader.GetString(2),
                        type        = reader.GetString(3),
                        parentTable = reader.GetString(4),
                        tableName   = tableDef.name
                    };

                    colDefs.Add(colDef);
                }

                reader.Close();

                tableDef.columns = colDefs.ToArray();
            }
        }
Example #6
0
        private void LoadTableDefs(SQLiteConnection cnn)
        {
            if (_tableDefs == null)
                _tableDefs = new Dictionary<string, TableDef>(StringComparer.CurrentCultureIgnoreCase);
            else
                _tableDefs.Clear();

            // read table defs

            SQLiteCommand cmd = GetCommand(cnn, "SELECT Id, Name, DisplayName FROM TableDefs");
            SQLiteDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                TableDef tableDef = new TableDef
                {
                    id = reader.GetInt32(0),
                    name = reader.GetString(1),
                    displayName = reader.GetString(2)
                };

                _tableDefs.Add(tableDef.name, tableDef);
            }
            reader.Close();

            // read column defs

            cmd.CommandText = "SELECT Id, Name, DisplayName, Type, ParentTable FROM ColumnDefs WHERE TableId = ?";
            SQLiteParameter idParam = new SQLiteParameter();
            cmd.Parameters.Add(idParam);
            cmd.Prepare();

            foreach (TableDef tableDef in _tableDefs.Values)
            {
                List<ColumnDef> colDefs = new List<ColumnDef>();

                idParam.Value = tableDef.id;
                reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    ColumnDef colDef = new ColumnDef()
                    {
                        id = reader.GetInt32(0),
                        name = reader.GetString(1),
                        displayName = reader.GetString(2),
                        type = reader.GetString(3),
                        parentTable = reader.GetString(4),
                        tableName = tableDef.name
                    };

                    colDefs.Add(colDef);
                }

                reader.Close();

                tableDef.columns = colDefs.ToArray();
            }
        }
Example #7
0
        public void AddColumns(SQLiteConnection cnn, string tableName, ColumnDef[] newColumns, int newSchemaVersion = 0)
        {
            if (_schemaVersion != 0 && _schemaVersion >= newSchemaVersion)
                throw new ArgumentException("New schema version should be greater then current");

            string quotedTableName = QuoteIdentifier(tableName);

            string sql = string.Empty;
            string colList = string.Empty;
            string valList = string.Empty;

            foreach (ColumnDef column in newColumns)
            {
                if (column.type.StartsWith("TABLE")) // TABLE parentTable
                    colList += string.Format("ALTER TABLE {0} ADD {1} INTEGER {2}, FOREIGN KEY({1}) REFERENCES {3}(Id), ",
                        quotedTableName,
                        QuoteIdentifier(column.name),
                        (column.allowDBNull) ? string.Empty : "NOT NULL",
                        QuoteIdentifier(column.parentTable)
                    );
                else
                    sql += string.Format("ALTER TABLE {0} ADD {1} {2} {3} {4};\n",
                        quotedTableName,
                        QuoteIdentifier(column.name),
                        column.type,
                        (column.allowDBNull) ? string.Empty : "NOT NULL",
                        (column.defValue != null) ? "DEFAULT " + column.defValue : string.Empty
                    );

                valList += string.Format("('{0}','{1}','{2}','{3}',(SELECT Id FROM TableDefs WHERE Name = '{4}')), ",
                    column.name, column.type, column.displayName, column.parentTable, tableName);
            }

            sql += string.Format("INSERT INTO ColumnDefs (Name,Type,DisplayName,ParentTable,TableId) VALUES {0};\n", valList.Remove(valList.Length - 2));

            if (newSchemaVersion != 0 && _schemaVersion != newSchemaVersion)
                sql += string.Format("UPDATE Store SET Version = '{0}';", newSchemaVersion);

            ExecuteNonQuery(cnn, sql);

            // update _tableDefs if schema already loaded
            if (_schemaVersion > 0)
            {
                LoadTableDefs(cnn);

                _adapters.Clear();
                foreach (TableDef tableDef in _tableDefs.Values)
                    ConfigureAdapter(tableDef);
            }

            if (newSchemaVersion != 0)
                _schemaVersion = newSchemaVersion;
        }