public virtual void Visit(SqlFreeTextTable node) { VisitInternal(node.Asterisk); foreach (SqlTableColumn column in node.Columns) { VisitInternal(column); } VisitInternal(node.FreeText); foreach (SqlTableColumn column in node.TargetColumns) { VisitInternal(column); } VisitInternal(node.TargetTable); }
public void Visit(SqlFreeTextTable node) { if (node.TargetTable != null) { Visit(node.TargetTable); } foreach (var column in node.Columns) { Visit(column); } foreach (var column in node.TargetColumns) { Visit(column); } }
public override void Visit(SqlFreeTextTable node) { string columns; if (node.TargetColumns.Count == 1) { columns = node.TargetColumns[0] == node.Asterisk ? node.TargetColumns[0].Name : translator.QuoteIdentifier(node.TargetColumns[0].Name); } else { columns = string.Join(", ", node.TargetColumns.Select(c => translator.QuoteIdentifier(c.Name)).ToArray()); } context.Output.AppendText(string.Format( "FREETEXTTABLE({0}, {1}, ", translator.Translate(context, node.TargetTable.DataTable), columns)); node.FreeText.AcceptVisitor(this); if (node.TopNByRank != null) { context.Output.AppendText(", "); node.TopNByRank.AcceptVisitor(this); } context.Output.AppendText(") "); }
public override void Visit(SqlFreeTextTable node) { if (node.TargetColumns.Count != 1 || node.TargetColumns[0] != node.TargetTable.Asterisk) { throw new NotSupportedException(Strings.ExFreeTextSearchOnCustomColumnsNotSupported); } var fullTextIndex = node.TargetTable.DataTable.Indexes.OfType <FullTextIndex>().Single(); var alias = context.TableNameProvider.GetName(node); var vector = ((Translator)translator).GetFulltextVector(context, fullTextIndex); var tableName = translator.QuoteIdentifier(node.TargetTable.Name); var internalColumnIndex = 0; while (node.Columns["column" + internalColumnIndex] != null) { internalColumnIndex++; } var vectorName = translator.QuoteIdentifier("column" + internalColumnIndex); internalColumnIndex++; while (node.Columns["column" + internalColumnIndex] != null) { internalColumnIndex++; } var queryName = translator.QuoteIdentifier("column" + internalColumnIndex); context.Output.AppendText("(SELECT "); for (var columnIndex = 0; columnIndex < node.Columns.Count - 1; columnIndex++) { if (columnIndex != 0) { context.Output.AppendText(translator.ColumnDelimiter); } context.Output.AppendText(translator.QuoteIdentifier(node.Columns[columnIndex].Name)); } context.Output.AppendText(translator.ColumnDelimiter); context.Output.AppendText("ts_rank_cd("); context.Output.AppendText(vectorName); context.Output.AppendText(translator.ArgumentDelimiter); context.Output.AppendText(queryName); context.Output.AppendText(") AS"); context.Output.AppendText(translator.QuoteIdentifier(node.Columns[node.Columns.Count - 1].Name)); context.Output.AppendText(" FROM (SELECT "); for (var columnIndex = 0; columnIndex < node.Columns.Count - 1; columnIndex++) { if (columnIndex != 0) { context.Output.AppendText(translator.ColumnDelimiter); } context.Output.AppendText(translator.QuoteIdentifier(node.Columns[columnIndex].Name)); } context.Output.AppendText(translator.ColumnDelimiter); context.Output.AppendText(string.Format("{0} AS {1}", vector, vectorName)); context.Output.AppendText(translator.ColumnDelimiter); var languages = fullTextIndex .Columns .SelectMany(column => column.Languages) .Select(language => language.Name) .Distinct(); context.Output.AppendText("("); var isFirst = true; foreach (var language in languages) { if (!isFirst) { context.Output.AppendText(" || "); } isFirst = false; context.Output.AppendText("to_tsquery('"); context.Output.AppendText(language); context.Output.AppendText("'::regconfig, "); context.Output.AppendText("replace(trim(regexp_replace("); node.FreeText.AcceptVisitor(this); context.Output.AppendText(@",'\\W+', ' ', 'g')),' ', '|')"); context.Output.AppendText(")"); } context.Output.AppendText(")"); context.Output.AppendText($" AS {queryName}"); context.Output.AppendText($" FROM {tableName}) AS {alias} WHERE {vectorName} @@ {queryName})"); }
public override void Visit(SqlFreeTextTable node) { throw SqlHelper.NotSupported("FreeText"); }
/// <inheritdoc/> public override void Visit(SqlFreeTextTable node) { //See Readme.txt point 6. throw SqlHelper.NotSupported("FreeText"); }