All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.tonivade.puredbc.sql.Alias Maven / Gradle / Ivy

There is a newer version: 1.0
Show newest version
/*
 * Copyright (c) 2020, Antonio Gabriel Muñoz Conejo 
 * Distributed under the terms of the MIT License
 */
package com.github.tonivade.puredbc.sql;

import static com.github.tonivade.purefun.type.Validation.mapN;
import static com.github.tonivade.purefun.type.Validation.requireNonEmpty;
import static com.github.tonivade.purefun.type.Validation.requireNonNull;

import java.util.Objects;

import com.github.tonivade.purefun.Equal;
import com.github.tonivade.purefun.type.Validation;
import com.github.tonivade.purefun.type.Validation.Result;

public interface Alias extends Field {

  static  Alias of(String alias, Field field) {
    Validation, AliasImpl> validation =
        mapN(requireNonEmpty(alias), requireNonNull(field), AliasImpl::new);
    return validation.getOrElseThrow();
  }
}

class AliasImpl implements Alias {

  private static final Equal> EQUAL =
      Equal.>of().comparing(x -> x.alias).comparing(x -> x.field);

  private final String alias;
  private final Field field;

  AliasImpl(String alias, Field field) {
    this.alias = alias;
    this.field = field;
  }

  @Override
  public String name() {
    return field.name() + " as " + alias;
  }

  @Override
  public boolean equals(Object obj) {
    return EQUAL.applyTo(this, obj);
  }

  @Override
  public int hashCode() {
    return Objects.hash(alias, field);
  }

  @Override
  public String toString() {
    return String.format("Alias{alias='%s', field=%s}", alias, field);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy