1 | /* |
2 | * Copyright 2004-2014 H2 Group. Multiple-Licensed under the MPL 2.0, |
3 | * and the EPL 1.0 (http://h2database.com/html/license.html). |
4 | * Initial Developer: H2 Group |
5 | */ |
6 | package org.h2.expression; |
7 | |
8 | import org.h2.command.Parser; |
9 | import org.h2.engine.Session; |
10 | import org.h2.table.ColumnResolver; |
11 | import org.h2.table.TableFilter; |
12 | import org.h2.value.Value; |
13 | |
14 | /** |
15 | * A column alias as in SELECT 'Hello' AS NAME ... |
16 | */ |
17 | public class Alias extends Expression { |
18 | |
19 | private final String alias; |
20 | private Expression expr; |
21 | private final boolean aliasColumnName; |
22 | |
23 | public Alias(Expression expression, String alias, boolean aliasColumnName) { |
24 | this.expr = expression; |
25 | this.alias = alias; |
26 | this.aliasColumnName = aliasColumnName; |
27 | } |
28 | |
29 | @Override |
30 | public Expression getNonAliasExpression() { |
31 | return expr; |
32 | } |
33 | |
34 | @Override |
35 | public Value getValue(Session session) { |
36 | return expr.getValue(session); |
37 | } |
38 | |
39 | @Override |
40 | public int getType() { |
41 | return expr.getType(); |
42 | } |
43 | |
44 | @Override |
45 | public void mapColumns(ColumnResolver resolver, int level) { |
46 | expr.mapColumns(resolver, level); |
47 | } |
48 | |
49 | @Override |
50 | public Expression optimize(Session session) { |
51 | expr = expr.optimize(session); |
52 | return this; |
53 | } |
54 | |
55 | @Override |
56 | public void setEvaluatable(TableFilter tableFilter, boolean b) { |
57 | expr.setEvaluatable(tableFilter, b); |
58 | } |
59 | |
60 | @Override |
61 | public int getScale() { |
62 | return expr.getScale(); |
63 | } |
64 | |
65 | @Override |
66 | public long getPrecision() { |
67 | return expr.getPrecision(); |
68 | } |
69 | |
70 | @Override |
71 | public int getDisplaySize() { |
72 | return expr.getDisplaySize(); |
73 | } |
74 | |
75 | @Override |
76 | public boolean isAutoIncrement() { |
77 | return expr.isAutoIncrement(); |
78 | } |
79 | |
80 | @Override |
81 | public String getSQL() { |
82 | return expr.getSQL() + " AS " + Parser.quoteIdentifier(alias); |
83 | } |
84 | |
85 | @Override |
86 | public void updateAggregate(Session session) { |
87 | expr.updateAggregate(session); |
88 | } |
89 | |
90 | @Override |
91 | public String getAlias() { |
92 | return alias; |
93 | } |
94 | |
95 | @Override |
96 | public int getNullable() { |
97 | return expr.getNullable(); |
98 | } |
99 | |
100 | @Override |
101 | public boolean isEverything(ExpressionVisitor visitor) { |
102 | return expr.isEverything(visitor); |
103 | } |
104 | |
105 | @Override |
106 | public int getCost() { |
107 | return expr.getCost(); |
108 | } |
109 | |
110 | @Override |
111 | public String getTableName() { |
112 | if (aliasColumnName) { |
113 | return super.getTableName(); |
114 | } |
115 | return expr.getTableName(); |
116 | } |
117 | |
118 | @Override |
119 | public String getColumnName() { |
120 | if (!(expr instanceof ExpressionColumn) || aliasColumnName) { |
121 | return super.getColumnName(); |
122 | } |
123 | return expr.getColumnName(); |
124 | } |
125 | |
126 | } |