예제 #1
0
        private static void _DropIndexData(SqlConnection conn, string bingo_schema,
                                           BingoIndexID id, bool throw_if_not_exists)
        {
            BingoIndexData data = _extractIndexData(conn, bingo_schema, id, throw_if_not_exists);

            if (data != null)
            {
                data.DropTables(conn);
                data.DropTriggers(conn);
            }

            BingoSqlUtils.ExecNonQueryNoThrow(conn, "DELETE FROM {0} WHERE obj_id = '{1}'",
                                              _contextTable(bingo_schema), id.table_id);

            for (int i = index_data_list.Count - 1; i >= 0; i--)
            {
                BingoIndexDataRefs refs = (BingoIndexDataRefs)index_data_list[i];
                if (refs.index_data.id.Equals(id))
                {
                    index_data_list.RemoveAt(i);
                    BingoLog.logMessage("Sessions for table {0} have been released", id.InformationName(conn));
                }
            }
            if (data != null)
            {
                BingoLog.logMessage("Bingo index for table {0} has been dropped", id.InformationName(conn));
            }
        }
예제 #2
0
        public void CreateTriggers(SqlConnection conn)
        {
            string cur_db_name = null;

            try
            {
                cur_db_name = BingoSqlUtils.ExecStringQuery(conn, "SELECT DB_NAME()");
                BingoSqlUtils.ExecNonQueryNoThrow(conn, "USE {0}", id.DatabaseName(conn));

                string bingo_db_schema = cur_db_name + "." + bingo_schema;

                string   full_name      = id.FullTableName(conn);
                object[] trigger_params = new object[] { null,
                                                         full_name, id_column, data_column, bingo_db_schema, id.table_id, id.database_id };

                trigger_params[0] = GetTriggerName("Insert", conn, cur_db_name);
                string insert_trigger = String.Format(resource.OnInsertTrigger, trigger_params);
                BingoSqlUtils.ExecNonQuery(conn, "{0}", insert_trigger);

                trigger_params[0] = GetTriggerName("Delete", conn, cur_db_name);
                string delete_trigger = String.Format(resource.OnDeleteTrigger, trigger_params);
                BingoSqlUtils.ExecNonQuery(conn, "{0}", delete_trigger);

                trigger_params[0] = GetTriggerName("Update", conn, cur_db_name);
                string update_trigger = String.Format(resource.OnUpdateTrigger, trigger_params);
                BingoSqlUtils.ExecNonQuery(conn, "{0}", update_trigger);
            }
            finally
            {
                if (cur_db_name != null)
                {
                    BingoSqlUtils.ExecNonQueryNoThrow(conn, "USE {0}", cur_db_name);
                }
            }
        }
예제 #3
0
        public override void DropTables(SqlConnection conn)
        {
            base.DropTables(conn);

            BingoSqlUtils.ExecNonQueryNoThrow(conn, "DROP TABLE " + shadowTable);
            BingoSqlUtils.ExecNonQueryNoThrow(conn, "DROP TABLE " + componentsTable);
        }
예제 #4
0
        public void DropTriggers(SqlConnection conn)
        {
            string cur_db_name = null;

            try
            {
                cur_db_name = BingoSqlUtils.ExecStringQuery(conn, "SELECT DB_NAME()");
                BingoSqlUtils.ExecNonQueryNoThrow(conn, "USE {0}", id.DatabaseName(conn));
                BingoSqlUtils.ExecNonQueryNoThrow(conn, "DROP TRIGGER {0}", GetTriggerName("Insert", conn, cur_db_name));
                BingoSqlUtils.ExecNonQueryNoThrow(conn, "DROP TRIGGER {0}", GetTriggerName("Delete", conn, cur_db_name));
                BingoSqlUtils.ExecNonQueryNoThrow(conn, "DROP TRIGGER {0}", GetTriggerName("Update", conn, cur_db_name));
            }
            finally
            {
                if (cur_db_name != null)
                {
                    BingoSqlUtils.ExecNonQueryNoThrow(conn, "USE {0}", cur_db_name);
                }
            }
        }
예제 #5
0
 public static void _remove(SqlConnection connection, string bingo_schema, string name, int id, string table)
 {
     BingoSqlUtils.ExecNonQueryNoThrow(connection, "DELETE FROM {0}.{1} where name='{2}' and n={3}",
                                       bingo_schema, table, name, id);
 }
예제 #6
0
 public void dropTables(SqlConnection conn)
 {
     BingoSqlUtils.ExecNonQueryNoThrow(conn, "DROP TABLE {0}", _index_data.storageTable);
 }
예제 #7
0
        private void _flushBlock(SqlConnection conn, _Block b)
        {
            BingoLog.logMessage("Flushing storage block {0}", b.block_index);

            BingoSqlUtils.ExecNonQueryNoThrow(conn, "DELETE FROM {0} WHERE id={1}",
                                              _index_data.storageTable, b.block_index);
            string text = String.Format(@"INSERT INTO {0} 
            ([id], [first_index], [count], [offsets], [lengths], [data]) 
            VALUES ({1}, {2}, {3}, @offsets, @lengths, @data)",
                                        _index_data.storageTable, b.block_index, b.first_index, b.end_index - b.first_index);

            using (SqlCommand command = new SqlCommand(text, conn))
            {
                command.CommandTimeout = 3600;

                byte[] data;
                if (b.pending_data != null)
                {
                    data = b.pending_data.ToArray();
                }
                else
                {
                    data = b.data;
                }
                SqlBinary binary_data = new SqlBinary(data);
                command.Parameters.AddWithValue("@data", binary_data);

                ICollection <int> offsets;
                if (b.pending_offsets != null)
                {
                    offsets = b.pending_offsets;
                }
                else
                {
                    offsets = b.offsets;
                }

                MemoryStream mem_stream = new MemoryStream(offsets.Count * 4);
                BinaryWriter writer     = new BinaryWriter(mem_stream);
                foreach (int offset in offsets)
                {
                    writer.Write(offset);
                }
                byte[] buffer = mem_stream.GetBuffer();
                command.Parameters.AddWithValue("@offsets", buffer);

                ICollection <short> lengths;
                if (b.pending_lengths != null)
                {
                    lengths = b.pending_lengths;
                }
                else
                {
                    lengths = b.lengths;
                }

                mem_stream = new MemoryStream(offsets.Count * 2);
                writer     = new BinaryWriter(mem_stream);
                foreach (short length in lengths)
                {
                    writer.Write(length);
                }
                buffer = mem_stream.GetBuffer();
                command.Parameters.AddWithValue("@lengths", buffer);

                command.ExecuteNonQuery();
            }
            _convertPendingBlockToNormal(b);
        }
예제 #8
0
 public void dropTables(SqlConnection conn)
 {
     BingoSqlUtils.ExecNonQueryNoThrow(conn, "DROP TABLE {0}", _index_data.fingerprintsTable);
     BingoSqlUtils.ExecNonQueryNoThrow(conn, "DROP TABLE {0}", _index_data.fingerprintBitsTable);
 }