Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions doc/reference/modules/configuration.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1606,6 +1606,11 @@ in the parameter binding.</programlisting>
<entry><literal>NHibernate.Dialect.SybaseASE15Dialect</literal></entry>
<entry></entry>
</row>
<row>
<entry>Sybase Adaptive Server Enterprise 16</entry>
<entry><literal>NHibernate.Dialect.SybaseASE16Dialect</literal></entry>
<entry></entry>
</row>
<row>
<entry>Sybase SQL Anywhere 10</entry>
<entry><literal>NHibernate.Dialect.SybaseSQLAnywhere10Dialect</literal></entry>
Expand Down
62 changes: 62 additions & 0 deletions src/NHibernate/Dialect/SybaseASE16Dialect.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
using NHibernate.SqlCommand;

namespace NHibernate.Dialect
{
/// <summary>
/// An SQL dialect targeting Sybase Adaptive Server Enterprise (ASE) 16 and higher.
/// </summary>
/// <remarks>
/// The dialect defaults the following configuration properties:
/// <list type="table">
/// <listheader>
/// <term>Property</term>
/// <description>Default Value</description>
/// </listheader>
/// <item>
/// <term>connection.driver_class</term>
/// <description><see cref="NHibernate.Driver.SybaseAseClientDriver" /></description>
/// </item>
/// </list>
/// </remarks>
public class SybaseASE16Dialect : SybaseASE15Dialect
{
/// <summary>
/// ASE 16 supports limit statements, see https://help.sap.com/docs/SAP_ASE/e0d4539d39c34f52ae9ef822c2060077/26d84b4ddae94fed89d4e7c88bc8d1e6.html?locale=en-US
/// </summary>
/// <returns>true</returns>
public override bool SupportsLimit => true;

/// <inheritdoc />
/// <returns>true</returns>
public override bool SupportsLimitOffset => true;

/// <inheritdoc />
/// <returns>false</returns>
public override bool SupportsVariableLimit => false;

/// <inheritdoc />
public override SqlString GetLimitString(SqlString queryString, SqlString offset, SqlString limit)
{
if (offset == null && limit == null)
return queryString;

var pagingBuilder = new SqlStringBuilder();
pagingBuilder.Add(queryString);
pagingBuilder.Add(" rows ");

if (limit != null)
{
pagingBuilder.Add(" limit ");
pagingBuilder.Add(limit);
}

if (offset != null)
{
pagingBuilder.Add(" offset ");
pagingBuilder.Add(offset);
}

return pagingBuilder.ToSqlString();
}
}
}