diff --git a/server/AyaNova/PickList/PickListSqlBuilder.cs b/server/AyaNova/PickList/PickListSqlBuilder.cs index 3a8b22c3..5a9a1dd7 100644 --- a/server/AyaNova/PickList/PickListSqlBuilder.cs +++ b/server/AyaNova/PickList/PickListSqlBuilder.cs @@ -35,6 +35,7 @@ namespace AyaNova.PickList //lists to collect the clauses so to avoid comma fuckery List lSelect = new List(); List lWhere = new List(); + List lOrderBy = new List(); //Add rowid column as it's always required @@ -51,6 +52,7 @@ namespace AyaNova.PickList //it's ok if there is no active column, it could happen so just roll with it if (activeColumn != null) { + lSelect.Add(activeColumn.SqlValueColumnName); lWhere.Add(activeColumn.SqlValueColumnName + " = true"); } } @@ -70,25 +72,60 @@ namespace AyaNova.PickList var valueColumnName = o.GetSqlValueColumnName(); lSelect.Add(valueColumnName); + lOrderBy.Add(valueColumnName); if (HasAutoCompleteQuery) { - string sWhere = $"{valueColumnName} LIKE '%{autoCompleteQuery}%'"; + string sWhere = $"({valueColumnName} LIKE '%{autoCompleteQuery}%')"; lWhere.Add(sWhere); } } } + StringBuilder sb = new StringBuilder(); -//Now build up the return query -//select -//from -//where -//orderby -//limit, actual sql: "LIMIT {MAXIMUM_RESULT_COUNT}" + //SELECT + sb.Append("select "); + foreach (string s in lSelect) + { + sb.Append(s); + sb.Append(","); + } + //clear trailing comma + sb.Length--; - return sbSelect.ToString() + pickList.SQLFrom + sbWhere.ToString(); + //FROM + sb.Append(" "); + sb.Append(pickList.SQLFrom); + + + //WHERE + sb.Append(" "); + sb.Append("where "); + foreach (string s in lWhere) + { + sb.Append(s); + sb.Append(" or "); + } + //clear trailing or + sb.Length -= 4; + + //ORDER BY + sb.Append("ORDER BY "); + foreach (string s in lOrderBy) + { + sb.Append(s); + sb.Append(","); + } + //clear trailing comma + sb.Length--; + + //LIMIT + sb.Append(" "); + sb.Append($"LIMIT {MAXIMUM_RESULT_COUNT}"); + + return sb.ToString(); }