<commit_before>/**
 * Copyright 1999-2015 dangdang.com.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * </p>
 */

package com.dangdang.ddframe.rdb.sharding.parser.result.merger;

import com.alibaba.druid.sql.ast.SQLOrderingSpecification;
import com.google.common.base.Optional;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.ToString;

/**
 * 排序列对象.
 * 
 * @author zhangliang
 */
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
@ToString
public final class OrderByColumn {
    
    private final Optional<String> name;
    
    private final Optional<Integer> index;
    
    private final OrderByType orderByType;
    
    public OrderByColumn(final String name, final OrderByType orderByType) {
        this(Optional.of(name), Optional.<Integer>absent(), orderByType);
    }
    
    public OrderByColumn(final int index, final OrderByType orderByType) {
        this(Optional.<String>absent(), Optional.of(index), orderByType);
    }
    
    /**
     * 排序类型.
     * 
     * @author gaohongtao, zhangliang
     */
    public enum OrderByType {
        ASC, 
        DESC;
        
        /**
         * 适配Druid的枚举类型.
         * 
         * @param sqlOrderingSpecification Druid的枚举类型<commit_msg>Update OrderByColumn.java<commit_after>/**
 * Copyright 1999-2015 dangdang.com.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * </p>
 */

package com.dangdang.ddframe.rdb.sharding.parser.result.merger;

import com.alibaba.druid.sql.ast.SQLOrderingSpecification;
import com.google.common.base.Optional;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.ToString;

/**
 * 排序列对象.
 * 
 * @author zhangliang
 */
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
@ToString
public final class OrderByColumn {
    
    private final Optional<String> name;
    
    private final Optional<Integer> index;
    
    private final Optional<String> alias;
    
    private final OrderByType orderByType;
    
    public OrderByColumn(final String name, final String alias, final OrderByType orderByType) {
        this(Optional.of(name), Optional.<Integer>absent(), Optional.fromNullable(alias), orderByType);
    }
    
    public OrderByColumn(final String name, final OrderByType orderByType) {
        this(Optional.of(name), Optional.<Integer>absent(), Optional.<String>absent(), orderByType);
    }
    
    public OrderByColumn(final int index, final OrderByType orderByType) {
        this(Optional.<String>absent(), Optional.of(index), Optional.<String>absent(), orderByType);
    }
    
    /**
     * 排序类型.
     * 
     * @author gaohongtao, zhangliang
     */
    public enum OrderByType {
        ASC, 
        DESC;
        
        /**
         * 适配Druid的枚举类型.
         * 
         * @param sqlOrderingSpecification Druid的枚举类型
{'fraction_non_alphanumeric': 0.09403023315398411, 'fraction_numerical': 0.006149116064565719, 'mean_word_length': 3.188841201716738, 'pattern_counts': {'":': 0, '<': 19, '<?xml version=': 0, '>': 19, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2659749', 'n_tokens_mistral': 1189, 'n_tokens_neox': 1168, 'n_words': 328}