/// <summary> /// The MySqlCommand initialized for this query, including any and all parameters. /// </summary> public DBHelperCommandArgs ModelQueryCommand() { List <string> lstWhereTerms = new List <string>(); List <MySqlParameter> lstParams = new List <MySqlParameter>(); // Add each of the terms string[] rgTerms = FullText.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < rgTerms.Length; i++) { AddQueryTerm(rgTerms[i], String.Format(CultureInfo.InvariantCulture, "FullText{0}", i), "Concat(model, ' ', manufacturers.manufacturer, ' ', typename, ' ', family, ' ', modelname, ' ', categoryclass.CatClass)", lstWhereTerms, lstParams); } string szPreferred = "0"; if (PreferModelNameMatch) { string szModelMatch = String.Format(CultureInfo.InvariantCulture, "%{0}%", ConvertWildcards(FullText)); szPreferred = "IF(model LIKE ?modelMatch, 1, 0)"; lstParams.Add(new MySqlParameter("modelMatch", szModelMatch)); } AddQueryTerm(CatClass, "qCatClass", "catclass", lstWhereTerms, lstParams); AddQueryTerm(rNormalizeModel.Replace(Model, string.Empty), "qModel", "REPLACE(REPLACE(model, ' ', ''), '-', '')", lstWhereTerms, lstParams); if (ModelName.StartsWith(ICAOPrefix, StringComparison.CurrentCultureIgnoreCase)) { AddQueryTerm(ModelName.Substring(ICAOPrefix.Length), "qFamilyName", "family", lstWhereTerms, lstParams); } else { AddQueryTerm(ModelName, "qModelName", "modelname", lstWhereTerms, lstParams); } AddQueryTerm(ManufacturerName, "qMan", "manufacturer", lstWhereTerms, lstParams); AddQueryTerm(TypeName, "qType", "typename", lstWhereTerms, lstParams); if (ManufacturerID != Manufacturer.UnsavedID) { lstWhereTerms.Add(" (models.idManufacturer = ?manID) "); lstParams.Add(new MySqlParameter("manID", ManufacturerID)); } string szHavingPredicate = String.Join(" AND ", lstWhereTerms.ToArray()); const string szQTemplate = @"SELECT models.*, manufacturers.manufacturer, categoryclass.CatClass as 'Category/Class', {0} AS AircraftIDs, {1} AS preferred FROM models INNER JOIN manufacturers on manufacturers.idManufacturer = models.idmanufacturer INNER JOIN categoryclass on categoryclass.idCatClass = models.idcategoryclass {2} {3} {4} {5}"; const string szQSamplesTemplate = @"LEFT OUTER JOIN (SELECT ac.idmodel, group_concat(DISTINCT img.imageKey separator ',') AS AircraftIDs FROM Images img INNER JOIN aircraft ac ON CAST(img.imageKey AS Unsigned)=ac.idaircraft WHERE img.VirtPathID=1 GROUP BY ac.idmodel) Samples ON models.idmodel=Samples.idmodel"; string szQ = String.Format(CultureInfo.InvariantCulture, szQTemplate, IncludeSampleImages ? "Samples.AircraftIDs" : "NULL", szPreferred, IncludeSampleImages ? szQSamplesTemplate : string.Empty, szHavingPredicate.Length == 0 ? string.Empty : String.Format(CultureInfo.InvariantCulture, " WHERE {0} ", szHavingPredicate), SortOrderFromSortModeAndDirection(SortMode, SortDir), (Limit > 0 && Skip >= 0) ? String.Format(CultureInfo.InvariantCulture, " LIMIT {0},{1} ", Skip, Limit) : string.Empty); DBHelperCommandArgs args = new DBHelperCommandArgs(szQ, lstParams); return(args); }