/** * @brief Construct a sanitized object[] from a list. * Also save the original list in case we need it later. */ public XMRArrayListKey(LSL_List key) { original = key; object[] given = key.Data; int len = given.Length; length = len; cleaned = new object[len]; int hc = len; for (int i = 0; i < len; i++) { object v = XMR_Array.FixKey(given[i]); hc += hc + ((hc < 0) ? 1 : 0); hc ^= v.GetHashCode(); cleaned[i] = v; } hashCode = hc; }
/** * Read many matching elements from database. * Input: * keylike = as given to xmrScriptDBWrite() * limit = maximum number of elements to return * offset = skip over this many elements * Output: * returns array of key=>val of elements matching keylike */ public override XMR_Array xmrScriptDBReadMany(string keylike, int limit, int offset) { lock (m_Engine.m_ScriptDBLock) { using (MySqlCommand cmd = getCommand()) { cmd.CommandText = "SELECT sdb_key,sdb_val FROM ScriptDBs WHERE sdb_key LIKE ?sdbkey ORDER BY sdb_key LIMIT " + limit + " OFFSET " + offset; cmd.Parameters.AddWithValue("?sdbkey", getPrefix() + keylike); using (IDataReader rdr = cmd.ExecuteReader()) { XMR_Array array = new XMR_Array(this); while (rdr.Read()) { string key = rdr["sdb_key"].ToString().Substring(prefix.Length); string val = rdr["sdb_val"].ToString(); array.SetByKey(key, val); } return(array); } } } }