Example #1
0
        /// <summary>Get a prepared query for the specified column names.</summary>
        /// <param name="database">The database to write to.</param>
        public object GetPreparedQuery(IDatabaseConnection database)
        {
            // Get a list of column names.
            var columnNames = dataTable.Columns.Cast <DataColumn>().Select(col => col.ColumnName);

            int key = columnNames.Aggregate(0, (current, item) => current + item.GetHashCode());

            var foundQuery = queryCache.Find(q => q.Item1 == key);

            if (foundQuery == null)
            {
                object queryHandle = database.PrepareBindableInsertQuery(dataTable);
                queryCache.Add(new Tuple <int, object>(key, queryHandle));

                // Ensure the number of prepared queries doesn't exceed 5.
                if (queryCache.Count > 5)
                {
                    database.FinalizeBindableQuery(queryCache[0].Item2);
                    queryCache.RemoveAt(0);
                }
                return(queryHandle);
            }
            else
            {
                return(foundQuery.Item2);
            }
        }
Example #2
0
 internal void Close(IDatabaseConnection database)
 {
     foreach (var query in queryCache)
     {
         database.FinalizeBindableQuery(query.Item2);
     }
     queryCache.Clear();
 }