code: package it.unibz.inf.ontop.generation.serializer.impl;
  
  import com.google.inject.Inject;
  import com.google.inject.Singleton;
  import it.unibz.inf.ontop.dbschema.DBParameters;
  import it.unibz.inf.ontop.dbschema.RelationID;
  import it.unibz.inf.ontop.generation.algebra.SelectFromWhereWithModifiers;
  import it.unibz.inf.ontop.generation.serializer.SelectFromWhereSerializer;
  import it.unibz.inf.ontop.model.term.TermFactory;
  import it.unibz.inf.ontop.model.type.DBTermType;
  
  @Singleton
  public class DuckDBSelectFromWhereSerializer extends DefaultSelectFromWhereSerializer implements SelectFromWhereSerializer {
  
      @Inject
      private DuckDBSelectFromWhereSerializer(TermFactory termFactory) {
          super(new DefaultSQLTermSerializer(termFactory) {
              @Override
              protected String serializeDatetimeConstant(String datetime, DBTermType dbType) {
                  return String.format("TIMESTAMP %s", serializeStringConstant(datetime));
              }
          });
      }
  
      @Override
      public QuerySerialization serialize(SelectFromWhereWithModifiers selectFromWhere, DBParameters dbParameters) {
          return selectFromWhere.acceptVisitor(
                  new DefaultRelationVisitingSerializer(dbParameters.getQuotedIDFactory()) {
  
                      @Override
                      protected String serializeLimitOffset(long limit, long offset, boolean noSortCondition) {
                          return String.format("OFFSET %d LIMIT %d", offset, limit);
                      }
  
                      @Override
                      protected String serializeOffset(long offset, boolean noSortCondition) {
                          return String.format("OFFSET %d", offset);
                      }
  
                  });
      }
  }
  