public static void SavePartialCommand(CommandExecutor executor, string alias) { using (var connection = DatabaseUtil.GetConnection()) using (var trans = connection.BeginTransaction()) { const string deleteCmdText = @"DELETE FROM PartialCommands WHERE Alias = @Alias"; const string insertCmdText = @"INSERT INTO PartialCommands (CommandId, Alias) VALUES (@CommandId, @Alias)"; const string insertArgText = @"INSERT INTO PartialCommandArguments (PartialCommandId, FacetMonikerId, Ordinal) VALUES (@PartialCommandId, @FacetMonikerId, @Ordinal)"; int partialCommandId; using (var cmd = new SqlCeCommand(deleteCmdText, connection, trans)) { cmd.Parameters.AddWithValue("@Alias", alias); cmd.ExecuteNonQuery(); } using (var cmd = new SqlCeCommand(insertCmdText, connection, trans)) { cmd.Parameters.AddWithValue("@CommandId", Loader.GetCommandInfo(executor.Command).DatabaseId); cmd.Parameters.AddWithValue("@Alias", alias); cmd.ExecuteNonQuery(); partialCommandId = connection.GetLastInsertedId(trans); } using (var cmd = new SqlCeCommand(insertArgText, connection, trans)) { cmd.Parameters.AddWithValue("@PartialCommandId", partialCommandId); cmd.Parameters.AddWithValue("@FacetMonikerId", 0); cmd.Parameters.AddWithValue("@Ordinal", 0); for (var ordinal = 0; ordinal < executor.Arguments.Count; ordinal++) { var arg = executor.Arguments[ordinal]; if (!arg.IsSpecified) { continue; } cmd.Parameters["@Ordinal"].Value = ordinal; cmd.Parameters["@FacetMonikerId"].Value = FacetIndex.SaveFacetMoniker(arg.FacetMoniker, connection: connection, trans: trans); cmd.ExecuteNonQuery(); } } trans.Commit(); } }
public static void SaveExecutedCommand(CommandExecutor executor) { using (var connection = DatabaseUtil.GetConnection()) { using (var trans = connection.BeginTransaction()) { const string insertCmdText = @"INSERT INTO CommandUsages (Text, At, CommandId) VALUES (@Text, @At, @CommandId)"; const string insertArgText = @"INSERT INTO CommandUsageArguments (CommandUsageId, FacetMonikerId, Ordinal, RangeStartIndex, RangeLength, Relevance, MatchedText) VALUES (@CommandUsageId, @FacetMonikerId, @Ordinal, @RangeStartIndex, @RangeLength, 0.0, @MatchedText)"; int commandUsageId; using (var cmd = new SqlCeCommand(insertCmdText, connection, trans)) { cmd.Parameters.AddWithValue("@CommandId", Loader.GetCommandInfo(executor.Command).DatabaseId); cmd.Parameters.AddWithValue("@Text", executor.Input == null ? "" : executor.Input.Text); cmd.Parameters.AddWithValue("@At", DateTime.Now); cmd.ExecuteNonQuery(); commandUsageId = connection.GetLastInsertedId(trans); } using (var cmd = new SqlCeCommand(insertArgText, connection, trans)) { cmd.Parameters.AddWithValue("@CommandUsageId", commandUsageId); cmd.Parameters.AddWithValue("@FacetMonikerId", 0); cmd.Parameters.AddWithValue("@Ordinal", 0); cmd.Parameters.AddWithValue("@RangeStartIndex", 0); cmd.Parameters.AddWithValue("@RangeLength", 0); cmd.Parameters.AddWithValue("@MatchedText", ""); for (var ordinal = 0; ordinal < executor.Arguments.Count; ordinal++) { var arg = executor.Arguments[ordinal]; if (!arg.IsSpecified) { continue; } cmd.Parameters["@Ordinal"].Value = ordinal; cmd.Parameters["@FacetMonikerId"].Value = FacetIndex.SaveFacetMoniker(arg.FacetMoniker, connection: connection, trans: trans); if (arg.ParseRange != null) { cmd.Parameters["@RangeStartIndex"].Value = arg.ParseRange.StartIndex; cmd.Parameters["@RangeLength"].Value = arg.ParseRange.Length; cmd.Parameters["@MatchedText"].Value = executor.Input == null ? "" : executor.Input.GetTextForRange(arg.ParseRange); } else { cmd.Parameters["@RangeStartIndex"].Value = -1; cmd.Parameters["@RangeLength"].Value = -1; cmd.Parameters["@MatchedText"].Value = ""; } cmd.ExecuteNonQuery(); } } trans.Commit(); } } }