diff --git a/server/AyaNova/biz/AyaObjectFieldDefinitions.cs b/server/AyaNova/biz/AyaObjectFieldDefinitions.cs index e6b81f4e..59bfa1a9 100644 --- a/server/AyaNova/biz/AyaObjectFieldDefinitions.cs +++ b/server/AyaNova/biz/AyaObjectFieldDefinitions.cs @@ -230,7 +230,7 @@ namespace AyaNova.Biz UiFieldDataType = (int)AyaUiFieldDataType.Text, AyaObjectType = (int)AyaType.Widget, SqlIdColumnName = "awidget.id", - SqlDisplayColumnName = "awidget.name" + SqlValueColumnName = "awidget.name" }); l.Add(new AyaObjectFieldDefinition { @@ -239,13 +239,13 @@ namespace AyaNova.Biz UiFieldDataType = (int)AyaUiFieldDataType.Text, AyaObjectType = (int)AyaType.User, SqlIdColumnName = "auser.id", - SqlDisplayColumnName = "auser.name" + SqlValueColumnName = "auser.name" }); l.Add(new AyaObjectFieldDefinition { LtKey = "UserEmailAddress", FieldKey = "emailaddress", - SqlDisplayColumnName = "auseroptions.emailaddress", + SqlValueColumnName = "auseroptions.emailaddress", UiFieldDataType = (int)AyaUiFieldDataType.EmailAddress }); break; @@ -365,7 +365,7 @@ namespace AyaNova.Biz //SERVER - for building sql queries public string SqlIdColumnName { get; set; } - public string SqlDisplayColumnName { get; set; } + public string SqlValueColumnName { get; set; } public AyaObjectFieldDefinition() @@ -381,15 +381,15 @@ namespace AyaNova.Biz } //Get column to query for display name or use FieldName if there is no difference - public string GetSqlDisplayColumnName() + public string GetSqlValueColumnName() { - if (string.IsNullOrEmpty(SqlDisplayColumnName)) + if (string.IsNullOrEmpty(SqlValueColumnName)) { return FieldKey.ToLowerInvariant(); } else { - return SqlDisplayColumnName; + return SqlValueColumnName; } } diff --git a/server/AyaNova/biz/SqlSelectBuilder.cs b/server/AyaNova/biz/SqlSelectBuilder.cs index 6a3d9d34..035932f0 100644 --- a/server/AyaNova/biz/SqlSelectBuilder.cs +++ b/server/AyaNova/biz/SqlSelectBuilder.cs @@ -65,7 +65,7 @@ namespace AyaNova.Biz {//Ignore missing fields in production sb.Append(", "); - sb.Append(o.GetSqlDisplayColumnName()); + sb.Append(o.GetSqlValueColumnName()); //does it also have an ID column? if (!string.IsNullOrWhiteSpace(o.SqlIdColumnName)) diff --git a/server/AyaNova/biz/WidgetBiz.cs b/server/AyaNova/biz/WidgetBiz.cs index 1a642d14..00d62e21 100644 --- a/server/AyaNova/biz/WidgetBiz.cs +++ b/server/AyaNova/biz/WidgetBiz.cs @@ -471,6 +471,7 @@ namespace AyaNova.Biz int returnRowCount = AyaObjectFields.Count(); List> rows = new List>(); long totalRecordCount = 0; + //RUN THE QUERY using (var command = ct.Database.GetDbConnection().CreateCommand()) @@ -485,17 +486,26 @@ namespace AyaNova.Biz while (dr.Read()) { List row = new List(returnRowCount); - + //GetOrdinal is flakey in npgsql so need an alternative, probably faster this way anyway + int nCurrentColumnPointer=0; + //flag to handle first column which has no display value, just an id instead + bool isFirstDFColumn=true; //Iterate object fields, build return row list as required //INSERT INTO THE RETURN ROWS LIST foreach (AyaObjectFieldDefinition f in AyaObjectFields) { - AyaFieldData d = new AyaFieldData(); - d.v = dr.GetValue(dr.GetOrdinal(f.SqlDisplayColumnName)); - if (f.SqlIdColumnName != null) + AyaFieldData AyaField = new AyaFieldData(); + AyaField.v = dr.GetValue(nCurrentColumnPointer); + + nCurrentColumnPointer++; + if (!isFirstDFColumn && f.SqlIdColumnName != null)//skip over df column id, it's not there { - d.Id = dr.GetInt64(dr.GetOrdinal(f.SqlIdColumnName)); + AyaField.Id = dr.GetInt64(nCurrentColumnPointer); + nCurrentColumnPointer++; } + + isFirstDFColumn=false; + row.Add(AyaField); } rows.Add(row); }