diff options
Diffstat (limited to 'OpenSim/Data/MySQL/MySQLUserAccountData.cs')
-rw-r--r-- | OpenSim/Data/MySQL/MySQLUserAccountData.cs | 150 |
1 files changed, 25 insertions, 125 deletions
diff --git a/OpenSim/Data/MySQL/MySQLUserAccountData.cs b/OpenSim/Data/MySQL/MySQLUserAccountData.cs index 3cb0010..aa69d68 100644 --- a/OpenSim/Data/MySQL/MySQLUserAccountData.cs +++ b/OpenSim/Data/MySQL/MySQLUserAccountData.cs | |||
@@ -35,150 +35,50 @@ using MySql.Data.MySqlClient; | |||
35 | 35 | ||
36 | namespace OpenSim.Data.MySQL | 36 | namespace OpenSim.Data.MySQL |
37 | { | 37 | { |
38 | public class MySqlUserAccountData : MySqlFramework, IUserAccountData | 38 | public class MySqlUserAccountData : MySQLGenericTableHandler<UserAccountData>, IUserAccountData |
39 | { | 39 | { |
40 | private string m_Realm; | ||
41 | private List<string> m_ColumnNames; | ||
42 | // private string m_connectionString; | ||
43 | |||
44 | public MySqlUserAccountData(string connectionString, string realm) | 40 | public MySqlUserAccountData(string connectionString, string realm) |
45 | : base(connectionString) | 41 | : base(connectionString, realm, "UserAccount") |
46 | { | ||
47 | m_Realm = realm; | ||
48 | m_connectionString = connectionString; | ||
49 | |||
50 | using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) | ||
51 | { | ||
52 | dbcon.Open(); | ||
53 | Migration m = new Migration(dbcon, GetType().Assembly, "UserStore"); | ||
54 | m.Update(); | ||
55 | } | ||
56 | } | ||
57 | |||
58 | public List<UserAccountData> Query(UUID principalID, UUID scopeID, string query) | ||
59 | { | 42 | { |
60 | return null; | ||
61 | } | 43 | } |
62 | 44 | ||
63 | public UserAccountData Get(UUID principalID, UUID scopeID) | 45 | public UserAccountData[] GetUsers(UUID scopeID, string query) |
64 | { | 46 | { |
65 | UserAccountData ret = new UserAccountData(); | 47 | string[] words = query.Split(new char[] {' '}); |
66 | ret.Data = new Dictionary<string, object>(); | ||
67 | |||
68 | string command = "select * from `"+m_Realm+"` where UUID = ?principalID"; | ||
69 | if (scopeID != UUID.Zero) | ||
70 | command += " and ScopeID = ?scopeID"; | ||
71 | 48 | ||
72 | using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) | 49 | for (int i = 0 ; i < words.Length ; i++) |
73 | { | 50 | { |
74 | dbcon.Open(); | 51 | if (words[i].Length < 3) |
75 | MySqlCommand cmd = new MySqlCommand(command, dbcon); | ||
76 | |||
77 | cmd.Parameters.AddWithValue("?principalID", principalID.ToString()); | ||
78 | cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString()); | ||
79 | |||
80 | IDataReader result = cmd.ExecuteReader(); | ||
81 | |||
82 | if (result.Read()) | ||
83 | { | 52 | { |
84 | ret.PrincipalID = principalID; | 53 | if (i != words.Length - 1) |
85 | UUID scope; | 54 | Array.Copy(words, i + 1, words, i, words.Length - i - 1); |
86 | UUID.TryParse(result["ScopeID"].ToString(), out scope); | 55 | Array.Resize(ref words, words.Length - 1); |
87 | ret.ScopeID = scope; | ||
88 | |||
89 | if (m_ColumnNames == null) | ||
90 | { | ||
91 | m_ColumnNames = new List<string>(); | ||
92 | |||
93 | DataTable schemaTable = result.GetSchemaTable(); | ||
94 | foreach (DataRow row in schemaTable.Rows) | ||
95 | m_ColumnNames.Add(row["ColumnName"].ToString()); | ||
96 | } | ||
97 | |||
98 | foreach (string s in m_ColumnNames) | ||
99 | { | ||
100 | if (s == "UUID") | ||
101 | continue; | ||
102 | if (s == "ScopeID") | ||
103 | continue; | ||
104 | |||
105 | ret.Data[s] = result[s].ToString(); | ||
106 | } | ||
107 | |||
108 | return ret; | ||
109 | } | ||
110 | else | ||
111 | { | ||
112 | return null; | ||
113 | } | 56 | } |
114 | } | 57 | } |
115 | } | ||
116 | 58 | ||
117 | public bool Store(UserAccountData data) | 59 | if (words.Length == 0) |
118 | { | 60 | return new UserAccountData[0]; |
119 | if (data.Data.ContainsKey("UUID")) | ||
120 | data.Data.Remove("UUID"); | ||
121 | if (data.Data.ContainsKey("ScopeID")) | ||
122 | data.Data.Remove("ScopeID"); | ||
123 | |||
124 | string[] fields = new List<string>(data.Data.Keys).ToArray(); | ||
125 | |||
126 | using (MySqlCommand cmd = new MySqlCommand()) | ||
127 | { | ||
128 | string update = "update `" + m_Realm + "` set "; | ||
129 | bool first = true; | ||
130 | foreach (string field in fields) | ||
131 | { | ||
132 | if (!first) | ||
133 | update += ", "; | ||
134 | update += "`" + field + "` = ?" + field; | ||
135 | 61 | ||
136 | first = false; | 62 | if (words.Length > 2) |
63 | return new UserAccountData[0]; | ||
137 | 64 | ||
138 | cmd.Parameters.AddWithValue("?" + field, data.Data[field]); | 65 | MySqlCommand cmd = new MySqlCommand(); |
139 | } | ||
140 | |||
141 | update += " where UUID = ?principalID"; | ||
142 | |||
143 | if (data.ScopeID != UUID.Zero) | ||
144 | update += " and ScopeID = ?scopeID"; | ||
145 | 66 | ||
146 | cmd.CommandText = update; | 67 | if (words.Length == 1) |
147 | cmd.Parameters.AddWithValue("?principalID", data.PrincipalID.ToString()); | 68 | { |
148 | cmd.Parameters.AddWithValue("?scopeID", data.ScopeID.ToString()); | 69 | cmd.CommandText = String.Format("select * from {0} where (ScopeID=?ScopeID or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like ?search or LastName like ?search)", m_Realm); |
149 | 70 | cmd.Parameters.AddWithValue("?search", "%" + words[0] + "%"); | |
150 | if (ExecuteNonQuery(cmd) < 1) | 71 | cmd.Parameters.AddWithValue("?ScopeID", scopeID.ToString()); |
151 | { | ||
152 | string insert = "insert into `" + m_Realm + "` (`UUID`, `ScopeID`, `" + | ||
153 | String.Join("`, `", fields) + | ||
154 | "`) values (?principalID, ?scopeID, ?" + String.Join(", ?", fields) + ")"; | ||
155 | |||
156 | cmd.CommandText = insert; | ||
157 | |||
158 | if (ExecuteNonQuery(cmd) < 1) | ||
159 | { | ||
160 | cmd.Dispose(); | ||
161 | return false; | ||
162 | } | ||
163 | } | ||
164 | } | 72 | } |
165 | 73 | else | |
166 | return true; | ||
167 | } | ||
168 | |||
169 | public bool SetDataItem(UUID principalID, string item, string value) | ||
170 | { | ||
171 | using (MySqlCommand cmd = new MySqlCommand("update `" + m_Realm + "` set `" + | ||
172 | item + "` = ?" + item + " where UUID = ?UUID")) | ||
173 | { | 74 | { |
174 | cmd.Parameters.AddWithValue("?" + item, value); | 75 | cmd.CommandText = String.Format("select * from {0} where (ScopeID=?ScopeID or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like ?searchFirst or LastName like ?searchLast)", m_Realm); |
175 | cmd.Parameters.AddWithValue("?UUID", principalID.ToString()); | 76 | cmd.Parameters.AddWithValue("?searchFirst", "%" + words[0] + "%"); |
176 | 77 | cmd.Parameters.AddWithValue("?searchLast", "%" + words[1] + "%"); | |
177 | if (ExecuteNonQuery(cmd) > 0) | 78 | cmd.Parameters.AddWithValue("?ScopeID", scopeID.ToString()); |
178 | return true; | ||
179 | } | 79 | } |
180 | 80 | ||
181 | return false; | 81 | return DoQuery(cmd); |
182 | } | 82 | } |
183 | } | 83 | } |
184 | } | 84 | } |