/// <summary> /// Adds a connection to the _connectionTable if already not present. /// Otherwise, increments the referrence count for it. /// </summary> /// <param name="connString"></param> /// <param name="connection">An initialized connection object</param> /// <returns></returns> public IDbConnection PoolConnection(string connString, IDbConnection connection) { lock (this) { string connKey = connString.ToLower(); DbResourceInfo connInfo = (DbResourceInfo)GetResource(connKey); if (connInfo == null) { connection.ConnectionString = connection.ConnectionString; connection.Open(); connInfo = new DbResourceInfo(connection); AddResource(connKey, connInfo); } else { if (connInfo.Connection.State == ConnectionState.Broken || connInfo.Connection.State == ConnectionState.Closed) { connection.Open(); } AddResource(connKey, null); //To increase the reference count } return(connInfo.Connection); } }
/// <summary> /// Remove all the stored sync information /// </summary> public void FlushSyncData() { lock (this) { IEnumerator em = Keys.GetEnumerator(); while (em.MoveNext()) { DbResourceInfo connInfo = (DbResourceInfo)GetResource((string)em.Current); connInfo.DbSyncInfo = null; } } }
/// <summary> /// Wrapper for ResourcePool.GetResource(string key). /// </summary> /// <param name="connString"></param> /// <returns></returns> public IDictionary GetResourceSyncInfo(string connString) { lock (this) { DbResourceInfo connInfo = (DbResourceInfo)GetResource(connString.ToLower()); if (connInfo != null) { return(connInfo.DbSyncInfo); } return(null); } }
/// <summary> /// Wrapper for ResourcePool.GetResource(string key). /// </summary> /// <param name="connString"></param> /// <returns></returns> public IDbConnection GetConnection(string connString) { lock (this) { DbResourceInfo connInfo = (DbResourceInfo)GetResource(connString.ToLower()); if (connInfo != null) { return(connInfo.Connection); } return(null); } }
/// <summary> /// Remove all the records where work_in_progress flag is set. /// </summary> /// <returns></returns> public void RemoveSyncData(string syncTable, string cacheName) { lock (this) { IEnumerator em = Keys.GetEnumerator(); while (em.MoveNext()) { DbResourceInfo connInfo = (DbResourceInfo)GetResource((string)em.Current); RemoveTableData(syncTable, cacheName, connInfo.Connection); connInfo.DbSyncInfo = null; } } }
/// <summary> /// Acquire the modified records in ncache_db_sync table /// </summary> /// <param name="syncTable"></param> /// <param name="cacheName"></param> public void AcquireSyncData(string syncTable, string cacheName) { lock (this) { IEnumerator em = Keys.GetEnumerator(); while (em.MoveNext()) { DbResourceInfo connInfo = (DbResourceInfo)GetResource((string)em.Current); IDictionary dbSyncInfo = LoadTableData(syncTable, cacheName, connInfo.Connection); connInfo.DbSyncInfo = dbSyncInfo; } } }
/// <summary> /// Gets the keys which have been modified in the database. /// call this method after acquiring the latest database state. /// </summary> /// <returns> array list of all the modified keys. </returns> internal ClusteredArrayList GetExpiredKeys() { ClusteredArrayList keys = new ClusteredArrayList(); lock (this) { IEnumerator em = Keys.GetEnumerator(); while (em.MoveNext()) { DbResourceInfo connInfo = (DbResourceInfo)GetResource((string)em.Current); if (connInfo != null && connInfo.DbSyncInfo != null) { keys.AddRange(connInfo.DbSyncInfo.Keys); connInfo.DbSyncInfo = null; } } } return(keys); }