diff options
-rw-r--r-- | OpenSim/Data/MySQL/MySQLAssetData.cs | 48 | ||||
-rw-r--r-- | OpenSim/Data/MySQL/Resources/005_AssetStore.sql | 6 |
2 files changed, 52 insertions, 2 deletions
diff --git a/OpenSim/Data/MySQL/MySQLAssetData.cs b/OpenSim/Data/MySQL/MySQLAssetData.cs index e270b9c..4b51bda 100644 --- a/OpenSim/Data/MySQL/MySQLAssetData.cs +++ b/OpenSim/Data/MySQL/MySQLAssetData.cs | |||
@@ -45,6 +45,7 @@ namespace OpenSim.Data.MySQL | |||
45 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 45 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
46 | 46 | ||
47 | private MySQLManager _dbConnection; | 47 | private MySQLManager _dbConnection; |
48 | private long TicksToEpoch; | ||
48 | 49 | ||
49 | #region IPlugin Members | 50 | #region IPlugin Members |
50 | 51 | ||
@@ -61,6 +62,8 @@ namespace OpenSim.Data.MySQL | |||
61 | /// <param name="connect">connect string</param> | 62 | /// <param name="connect">connect string</param> |
62 | override public void Initialise(string connect) | 63 | override public void Initialise(string connect) |
63 | { | 64 | { |
65 | TicksToEpoch = new System.DateTime(1970,1,1).Ticks; | ||
66 | |||
64 | // TODO: This will let you pass in the connect string in | 67 | // TODO: This will let you pass in the connect string in |
65 | // the config, though someone will need to write that. | 68 | // the config, though someone will need to write that. |
66 | if (connect == String.Empty) | 69 | if (connect == String.Empty) |
@@ -146,6 +149,8 @@ namespace OpenSim.Data.MySQL | |||
146 | dbReader.Close(); | 149 | dbReader.Close(); |
147 | cmd.Dispose(); | 150 | cmd.Dispose(); |
148 | } | 151 | } |
152 | if (asset != null) | ||
153 | UpdateAccessTime(asset); | ||
149 | } | 154 | } |
150 | catch (Exception e) | 155 | catch (Exception e) |
151 | { | 156 | { |
@@ -178,8 +183,8 @@ namespace OpenSim.Data.MySQL | |||
178 | 183 | ||
179 | MySqlCommand cmd = | 184 | MySqlCommand cmd = |
180 | new MySqlCommand( | 185 | new MySqlCommand( |
181 | "REPLACE INTO assets(id, name, description, assetType, local, temporary, data)" + | 186 | "insert INTO assets(id, name, description, assetType, local, temporary, create_time, access_time, data)" + |
182 | "VALUES(?id, ?name, ?description, ?assetType, ?local, ?temporary, ?data)", | 187 | "VALUES(?id, ?name, ?description, ?assetType, ?local, ?temporary, ?create_time, ?access_time, ?data)", |
183 | _dbConnection.Connection); | 188 | _dbConnection.Connection); |
184 | 189 | ||
185 | // need to ensure we dispose | 190 | // need to ensure we dispose |
@@ -187,12 +192,16 @@ namespace OpenSim.Data.MySQL | |||
187 | { | 192 | { |
188 | using (cmd) | 193 | using (cmd) |
189 | { | 194 | { |
195 | // create unix epoch time | ||
196 | int now = (int)((System.DateTime.Now.Ticks - TicksToEpoch) / 10000000); | ||
190 | cmd.Parameters.AddWithValue("?id", asset.FullID.ToString()); | 197 | cmd.Parameters.AddWithValue("?id", asset.FullID.ToString()); |
191 | cmd.Parameters.AddWithValue("?name", asset.Name); | 198 | cmd.Parameters.AddWithValue("?name", asset.Name); |
192 | cmd.Parameters.AddWithValue("?description", asset.Description); | 199 | cmd.Parameters.AddWithValue("?description", asset.Description); |
193 | cmd.Parameters.AddWithValue("?assetType", asset.Type); | 200 | cmd.Parameters.AddWithValue("?assetType", asset.Type); |
194 | cmd.Parameters.AddWithValue("?local", asset.Local); | 201 | cmd.Parameters.AddWithValue("?local", asset.Local); |
195 | cmd.Parameters.AddWithValue("?temporary", asset.Temporary); | 202 | cmd.Parameters.AddWithValue("?temporary", asset.Temporary); |
203 | cmd.Parameters.AddWithValue("?create_time", now); | ||
204 | cmd.Parameters.AddWithValue("?access_time", now); | ||
196 | cmd.Parameters.AddWithValue("?data", asset.Data); | 205 | cmd.Parameters.AddWithValue("?data", asset.Data); |
197 | cmd.ExecuteNonQuery(); | 206 | cmd.ExecuteNonQuery(); |
198 | cmd.Dispose(); | 207 | cmd.Dispose(); |
@@ -209,6 +218,41 @@ namespace OpenSim.Data.MySQL | |||
209 | } | 218 | } |
210 | } | 219 | } |
211 | 220 | ||
221 | private void UpdateAccessTime(AssetBase asset) | ||
222 | { | ||
223 | lock (_dbConnection) | ||
224 | { | ||
225 | _dbConnection.CheckConnection(); | ||
226 | |||
227 | MySqlCommand cmd = | ||
228 | new MySqlCommand("update assets set access_time=?access_time where id=?id", | ||
229 | _dbConnection.Connection); | ||
230 | |||
231 | // need to ensure we dispose | ||
232 | try | ||
233 | { | ||
234 | using (cmd) | ||
235 | { | ||
236 | // create unix epoch time | ||
237 | int now = (int)((System.DateTime.Now.Ticks - TicksToEpoch) / 10000000); | ||
238 | cmd.Parameters.AddWithValue("?id", asset.FullID.ToString()); | ||
239 | cmd.Parameters.AddWithValue("?access_time", now); | ||
240 | cmd.ExecuteNonQuery(); | ||
241 | cmd.Dispose(); | ||
242 | } | ||
243 | } | ||
244 | catch (Exception e) | ||
245 | { | ||
246 | m_log.ErrorFormat( | ||
247 | "[ASSETS DB]: " + | ||
248 | "MySql failure updating access_time for asset {0} with name {1}" + Environment.NewLine + e.ToString() | ||
249 | + Environment.NewLine + "Attempting reconnection", asset.FullID, asset.Name); | ||
250 | _dbConnection.Reconnect(); | ||
251 | } | ||
252 | } | ||
253 | |||
254 | } | ||
255 | |||
212 | /// <summary> | 256 | /// <summary> |
213 | /// Update a asset in database, see <see cref="CreateAsset"/> | 257 | /// Update a asset in database, see <see cref="CreateAsset"/> |
214 | /// </summary> | 258 | /// </summary> |
diff --git a/OpenSim/Data/MySQL/Resources/005_AssetStore.sql b/OpenSim/Data/MySQL/Resources/005_AssetStore.sql new file mode 100644 index 0000000..bfeb652 --- /dev/null +++ b/OpenSim/Data/MySQL/Resources/005_AssetStore.sql | |||
@@ -0,0 +1,6 @@ | |||
1 | BEGIN; | ||
2 | |||
3 | ALTER TABLE assets add create_time integer default 0; | ||
4 | ALTER TABLE assets add access_time integer default 0; | ||
5 | |||
6 | COMMIT; | ||