This commit is contained in:
@@ -10,6 +10,8 @@ todo: I think query builder part is done for now
|
|||||||
todo: actualy return results bit in picklistfetcher that concatenates into space delimited segments as per template into name and id and active to return to user
|
todo: actualy return results bit in picklistfetcher that concatenates into space delimited segments as per template into name and id and active to return to user
|
||||||
todo: all template routes and actual backing code and also validation, needs to validate
|
todo: all template routes and actual backing code and also validation, needs to validate
|
||||||
todo: clean out unneeded leftovers from AyaPickListFieldDefinition
|
todo: clean out unneeded leftovers from AyaPickListFieldDefinition
|
||||||
|
todo: add pickers for all CORE objects (User...?)
|
||||||
|
todo: write a guide in ayatype for what to do when making a new core object as there are a few things now
|
||||||
todo: tests once it's all completed for server
|
todo: tests once it's all completed for server
|
||||||
- test regular, tags, non-text column, max-results, order, template routes etc
|
- test regular, tags, non-text column, max-results, order, template routes etc
|
||||||
|
|
||||||
|
|||||||
@@ -19,10 +19,6 @@ namespace AyaNova.PickList
|
|||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
//TODO: custom template routes and tests
|
|
||||||
//TODO: TESTS FOR ALL FORMS OF QUERY (tags, non text fields etc)
|
|
||||||
//TODO: Clean out unnneeded stuff in AyaPickListFieldDefinition (stuff from datalist copied over)
|
|
||||||
|
|
||||||
//determine this in advance as it will be used in a loop later
|
//determine this in advance as it will be used in a loop later
|
||||||
bool HasAutoCompleteQuery = !string.IsNullOrWhiteSpace(autoCompleteQuery);
|
bool HasAutoCompleteQuery = !string.IsNullOrWhiteSpace(autoCompleteQuery);
|
||||||
|
|
||||||
@@ -67,44 +63,60 @@ namespace AyaNova.PickList
|
|||||||
|
|
||||||
var valueColumnName = o.GetSqlValueColumnName();
|
var valueColumnName = o.GetSqlValueColumnName();
|
||||||
|
|
||||||
lSelect.Add(valueColumnName);
|
//
|
||||||
lOrderBy.Add(valueColumnName);
|
//
|
||||||
|
|
||||||
if (HasAutoCompleteQuery)
|
|
||||||
|
|
||||||
|
string sWhere = string.Empty;
|
||||||
|
|
||||||
|
//Tags column
|
||||||
|
if (o.ColumnDataType == UiFieldDataType.Tags)
|
||||||
{
|
{
|
||||||
string sWhere = string.Empty;
|
//Handle tags for each part of the sql query
|
||||||
|
//idea is they display as a comma separated list
|
||||||
|
//filter as a like comparison to each individual tag
|
||||||
|
//order by the array which appears to do it left to right as if it was a giant string
|
||||||
|
|
||||||
//Tag?
|
lSelect.Add($"(array_to_string({valueColumnName},',')");
|
||||||
if (o.ColumnDataType == UiFieldDataType.Tags)
|
//tags can order by without the arraytostring
|
||||||
{
|
lOrderBy.Add(valueColumnName);
|
||||||
//awidget.tags @> array['blah','blah3'::varchar(255)]
|
|
||||||
//or in real life: ((awidget.name like '%o34%') or (awidget.tags @> array['zone-0'::varchar(255)]) )
|
|
||||||
//but this means exact match only, not like comparison here
|
|
||||||
|
|
||||||
//This also works: ((awidget.name like '%o34%') or ('blue' like any(awidget.tags)) )
|
//THIS is the best filter method for a like comparison to each individual tag:
|
||||||
//but again, not a like query only exact match
|
//(array_to_string(awidget.tags,',') like '%zo%')
|
||||||
|
if (HasAutoCompleteQuery)
|
||||||
//THIS is the one:
|
|
||||||
//(array_to_string(awidget.tags,',') like '%zo%')
|
|
||||||
sWhere = $"(array_to_string({valueColumnName},',') like '%{autoCompleteQuery}%')";
|
sWhere = $"(array_to_string({valueColumnName},',') like '%{autoCompleteQuery}%')";
|
||||||
|
|
||||||
}
|
|
||||||
else if (o.ColumnDataType == UiFieldDataType.Text || o.ColumnDataType == UiFieldDataType.EmailAddress || o.ColumnDataType == UiFieldDataType.HTTP)
|
|
||||||
{
|
|
||||||
//regular text field
|
|
||||||
sWhere = $"({valueColumnName} LIKE '%{autoCompleteQuery}%')";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//needs to be cast to text
|
|
||||||
//(cast (awidget.serial as text) like '%some%')
|
|
||||||
sWhere = $"(cast ({valueColumnName} as text) LIKE '%{autoCompleteQuery}%')";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
lWhere.Add(sWhere);
|
|
||||||
}
|
}
|
||||||
|
else if (o.ColumnDataType == UiFieldDataType.Text || o.ColumnDataType == UiFieldDataType.EmailAddress || o.ColumnDataType == UiFieldDataType.HTTP)
|
||||||
|
{
|
||||||
|
//regular text field, no special requirements
|
||||||
|
lSelect.Add(valueColumnName);
|
||||||
|
lOrderBy.Add(valueColumnName);
|
||||||
|
if (HasAutoCompleteQuery)
|
||||||
|
sWhere = $"({valueColumnName} LIKE '%{autoCompleteQuery}%')";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
//if any part of a select contatenation query using the || postgres concat is text then all fields are automatically converted to text
|
||||||
|
//so no need to make it text here as the automatic spacing character will force the whole thing to a text concat anyway
|
||||||
|
//ref: https://stackoverflow.com/a/19943343/8939
|
||||||
|
lSelect.Add(valueColumnName);
|
||||||
|
|
||||||
|
//order by for now seems to be best as just order by it's value whatever it is
|
||||||
|
lOrderBy.Add(valueColumnName);
|
||||||
|
|
||||||
|
//needs to be cast to text to query on it
|
||||||
|
//(cast (awidget.serial as text) like '%some%')
|
||||||
|
if (HasAutoCompleteQuery)
|
||||||
|
sWhere = $"(cast ({valueColumnName} as text) LIKE '%{autoCompleteQuery}%')";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (HasAutoCompleteQuery)
|
||||||
|
lWhere.Add(sWhere);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -113,6 +125,7 @@ namespace AyaNova.PickList
|
|||||||
|
|
||||||
//SELECT
|
//SELECT
|
||||||
sb.Append("select ");
|
sb.Append("select ");
|
||||||
|
//select name || ' ' || serial || ' ' || array_to_string(tags,',') as display from awidget
|
||||||
foreach (string s in lSelect)
|
foreach (string s in lSelect)
|
||||||
{
|
{
|
||||||
sb.Append(s);
|
sb.Append(s);
|
||||||
|
|||||||
Reference in New Issue
Block a user