public ComputedIndex(DocumentMapping mapping, MemberInfo[] members) { _members = members; var field = mapping.FieldFor(members); _locator = field.SqlLocator.Replace("d.", ""); _table = mapping.Table; }
private IEnumerable<string> buildColumns() { foreach (var m in _members) { var field = _mapping.FieldFor(m); var casing = Casing; if (field.FieldType != typeof(string)) { // doesn't make sense to lower-case this particular member casing = Casings.Default; } var sql = field.TypedLocator.Replace("d.", ""); switch (casing) { case Casings.Upper: yield return $"upper({sql})"; break; case Casings.Lower: yield return $"lower({sql})"; break; default: yield return $"({sql})"; break; } } if (TenancyScope == TenancyScope.PerTenant) { yield return TenantIdColumn.Name; } }
public ComputedIndex(DocumentMapping mapping, MemberInfo[][] members) { _members = members; var mebersLocator = members .Select(m => { var sql = mapping.FieldFor(m).SqlLocator.Replace("d.", ""); switch (Casing) { case Casings.Upper: return($" upper({sql})"); case Casings.Lower: return($" lower({sql})"); default: return($" ({sql})"); } }) .Join(","); _locator = $" {mebersLocator}"; _table = mapping.Table; }
public ComputedIndex(DocumentMapping mapping, MemberInfo[] members) { _members = members; var field = mapping.FieldFor(members); _locator = field.SqlLocator.Replace("d.", ""); _table = mapping.Table; }
public string ToDDL() { var index = IsUnique ? "CREATE UNIQUE INDEX" : "CREATE INDEX"; if (IsConcurrent) { index += " CONCURRENTLY"; } index += $" {IndexName} ON {_mapping.Table.QualifiedName}"; if (Method != IndexMethod.btree) { index += $" USING {Method}"; } var membersLocator = _members .Select(m => { var sql = _mapping.FieldFor(m).SqlLocator.Replace("d.", ""); switch (Casing) { case Casings.Upper: return($" upper({sql})"); case Casings.Lower: return($" lower({sql})"); default: return($" ({sql})"); } }) .Join(","); var locator = $"{membersLocator}"; if (TenancyScope == TenancyScope.PerTenant) { locator = $"{locator}, tenant_id"; } index += " (" + locator + ")"; // Only the B-tree index type supports modifying the sort order, and ascending is the default if (Method == IndexMethod.btree && SortOrder == SortOrder.Desc) { index = index.Remove(index.Length - 1); index += " DESC)"; } if (Where.IsNotEmpty()) { index += $" WHERE ({Where})"; } return(index + ";"); }
public IField FieldFor(IEnumerable <MemberInfo> members) { return(Parent.FieldFor(members) ?? _inner.FieldFor(members)); }
// TODO -- use the mapping off of DocumentQuery later public string JsonLocator(DocumentMapping mapping, Expression expression) { var visitor = new FindMembers(); visitor.Visit(expression); //return new JsonLocatorField(visitor.Members.ToArray()).SqlLocator; var field = mapping.FieldFor(visitor.Members); _query.RegisterField(field); return field.SqlLocator; }