Skip to content

Commit 936d55a

Browse files
author
B Vadlamani
committed
improve_cast_documentation
1 parent c7aad67 commit 936d55a

2 files changed

Lines changed: 146 additions & 1 deletion

File tree

docs/source/user-guide/latest/compatibility.md

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,3 +192,122 @@ or strings containing null bytes (e.g \\u0000) |
192192

193193
Any cast not listed in the previous tables is currently unsupported. We are working on adding more. See the
194194
[tracking issue](https://github.com/apache/datafusion-comet/issues/286) for more details.
195+
196+
### Cast Support by Eval Mode
197+
198+
The following table shows cast support levels for each evaluation mode (LEGACY, ANSI, TRY).
199+
200+
<!--BEGIN:CAST_EVAL_MODE_TABLE-->
201+
<!-- prettier-ignore-start -->
202+
| From Type | To Type | LEGACY | ANSI | TRY |
203+
|-|-|-|-|-|
204+
| boolean | byte | Compatible | Compatible | Compatible |
205+
| boolean | short | Compatible | Compatible | Compatible |
206+
| boolean | integer | Compatible | Compatible | Compatible |
207+
| boolean | long | Compatible | Compatible | Compatible |
208+
| boolean | float | Compatible | Compatible | Compatible |
209+
| boolean | double | Compatible | Compatible | Compatible |
210+
| boolean | decimal | Unsupported | Unsupported | Unsupported |
211+
| boolean | string | Compatible | Compatible | Compatible |
212+
| boolean | timestamp | Unsupported | Unsupported | Unsupported |
213+
| byte | boolean | Compatible | Compatible | Compatible |
214+
| byte | short | Compatible | Compatible | Compatible |
215+
| byte | integer | Compatible | Compatible | Compatible |
216+
| byte | long | Compatible | Compatible | Compatible |
217+
| byte | float | Compatible | Compatible | Compatible |
218+
| byte | double | Compatible | Compatible | Compatible |
219+
| byte | decimal | Compatible | Compatible | Compatible |
220+
| byte | string | Compatible | Compatible | Compatible |
221+
| byte | binary | Unsupported | Unsupported | Unsupported |
222+
| byte | timestamp | Unsupported | Unsupported | Unsupported |
223+
| short | boolean | Compatible | Compatible | Compatible |
224+
| short | byte | Compatible | Compatible | Compatible |
225+
| short | integer | Compatible | Compatible | Compatible |
226+
| short | long | Compatible | Compatible | Compatible |
227+
| short | float | Compatible | Compatible | Compatible |
228+
| short | double | Compatible | Compatible | Compatible |
229+
| short | decimal | Compatible | Compatible | Compatible |
230+
| short | string | Compatible | Compatible | Compatible |
231+
| short | binary | Unsupported | Unsupported | Unsupported |
232+
| short | timestamp | Unsupported | Unsupported | Unsupported |
233+
| integer | boolean | Compatible | Compatible | Compatible |
234+
| integer | byte | Compatible | Compatible | Compatible |
235+
| integer | short | Compatible | Compatible | Compatible |
236+
| integer | long | Compatible | Compatible | Compatible |
237+
| integer | float | Compatible | Compatible | Compatible |
238+
| integer | double | Compatible | Compatible | Compatible |
239+
| integer | decimal | Compatible | Compatible | Compatible |
240+
| integer | string | Compatible | Compatible | Compatible |
241+
| integer | binary | Unsupported | Unsupported | Unsupported |
242+
| integer | timestamp | Unsupported | Unsupported | Unsupported |
243+
| long | boolean | Compatible | Compatible | Compatible |
244+
| long | byte | Compatible | Compatible | Compatible |
245+
| long | short | Compatible | Compatible | Compatible |
246+
| long | integer | Compatible | Compatible | Compatible |
247+
| long | float | Compatible | Compatible | Compatible |
248+
| long | double | Compatible | Compatible | Compatible |
249+
| long | decimal | Compatible | Compatible | Compatible |
250+
| long | string | Compatible | Compatible | Compatible |
251+
| long | binary | Unsupported | Unsupported | Unsupported |
252+
| long | timestamp | Unsupported | Unsupported | Unsupported |
253+
| float | boolean | Compatible | Compatible | Compatible |
254+
| float | byte | Compatible | Compatible | Compatible |
255+
| float | short | Compatible | Compatible | Compatible |
256+
| float | integer | Compatible | Compatible | Compatible |
257+
| float | long | Compatible | Compatible | Compatible |
258+
| float | double | Compatible | Compatible | Compatible |
259+
| float | decimal | Incompatible | Incompatible | Incompatible |
260+
| float | string | Compatible | Compatible | Compatible |
261+
| float | timestamp | Unsupported | Unsupported | Unsupported |
262+
| double | boolean | Compatible | Compatible | Compatible |
263+
| double | byte | Compatible | Compatible | Compatible |
264+
| double | short | Compatible | Compatible | Compatible |
265+
| double | integer | Compatible | Compatible | Compatible |
266+
| double | long | Compatible | Compatible | Compatible |
267+
| double | float | Compatible | Compatible | Compatible |
268+
| double | decimal | Incompatible | Incompatible | Incompatible |
269+
| double | string | Compatible | Compatible | Compatible |
270+
| double | timestamp | Unsupported | Unsupported | Unsupported |
271+
| decimal | boolean | Compatible | Compatible | Compatible |
272+
| decimal | byte | Compatible | Compatible | Compatible |
273+
| decimal | short | Compatible | Compatible | Compatible |
274+
| decimal | integer | Compatible | Compatible | Compatible |
275+
| decimal | long | Compatible | Compatible | Compatible |
276+
| decimal | float | Compatible | Compatible | Compatible |
277+
| decimal | double | Compatible | Compatible | Compatible |
278+
| decimal | string | Compatible | Compatible | Compatible |
279+
| decimal | timestamp | Unsupported | Unsupported | Unsupported |
280+
| string | boolean | Compatible | Compatible | Compatible |
281+
| string | byte | Compatible | Compatible | Compatible |
282+
| string | short | Compatible | Compatible | Compatible |
283+
| string | integer | Compatible | Compatible | Compatible |
284+
| string | long | Compatible | Compatible | Compatible |
285+
| string | float | Compatible | Compatible | Compatible |
286+
| string | double | Compatible | Compatible | Compatible |
287+
| string | decimal | Incompatible | Incompatible | Incompatible |
288+
| string | binary | Compatible | Compatible | Compatible |
289+
| string | date | Compatible | Compatible | Compatible |
290+
| string | timestamp | Incompatible | Incompatible | Incompatible |
291+
| binary | string | Compatible | Compatible | Compatible |
292+
| date | boolean | Unsupported | Unsupported | Unsupported |
293+
| date | byte | Unsupported | Unsupported | Unsupported |
294+
| date | short | Unsupported | Unsupported | Unsupported |
295+
| date | integer | Unsupported | Unsupported | Unsupported |
296+
| date | long | Unsupported | Unsupported | Unsupported |
297+
| date | float | Unsupported | Unsupported | Unsupported |
298+
| date | double | Unsupported | Unsupported | Unsupported |
299+
| date | decimal | Unsupported | Unsupported | Unsupported |
300+
| date | string | Compatible | Compatible | Compatible |
301+
| date | timestamp | Unsupported | Unsupported | Unsupported |
302+
| timestamp | boolean | Unsupported | Unsupported | Unsupported |
303+
| timestamp | byte | Unsupported | Unsupported | Unsupported |
304+
| timestamp | short | Unsupported | Unsupported | Unsupported |
305+
| timestamp | integer | Unsupported | Unsupported | Unsupported |
306+
| timestamp | long | Compatible | Compatible | Compatible |
307+
| timestamp | float | Unsupported | Unsupported | Unsupported |
308+
| timestamp | double | Unsupported | Unsupported | Unsupported |
309+
| timestamp | decimal | Unsupported | Unsupported | Unsupported |
310+
| timestamp | string | Compatible | Compatible | Compatible |
311+
| timestamp | date | Compatible | Compatible | Compatible |
312+
<!-- prettier-ignore-end -->
313+
<!--END:CAST_EVAL_MODE_TABLE-->

spark/src/main/scala/org/apache/comet/GenerateDocs.scala

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import org.apache.spark.sql.catalyst.expressions.Cast
2727

2828
import org.apache.comet.CometConf.COMET_ONHEAP_MEMORY_OVERHEAD
2929
import org.apache.comet.expressions.{CometCast, CometEvalMode}
30-
import org.apache.comet.serde.{Compatible, Incompatible, QueryPlanSerde}
30+
import org.apache.comet.serde.{Compatible, Incompatible, QueryPlanSerde, SupportLevel, Unsupported}
3131

3232
/**
3333
* Utility for generating markdown documentation from the configs.
@@ -148,11 +148,37 @@ object GenerateDocs {
148148
}
149149
}
150150
w.write("<!-- prettier-ignore-end -->\n".getBytes)
151+
} else if (line.trim == "<!--BEGIN:CAST_EVAL_MODE_TABLE-->") {
152+
w.write("<!-- prettier-ignore-start -->\n".getBytes)
153+
w.write("| From Type | To Type | LEGACY | ANSI | TRY |\n".getBytes)
154+
w.write("|-|-|-|-|-|\n".getBytes)
155+
for (fromType <- CometCast.supportedTypes) {
156+
for (toType <- CometCast.supportedTypes) {
157+
if (Cast.canCast(fromType, toType) && fromType != toType) {
158+
val fromTypeName = fromType.typeName.replace("(10,2)", "")
159+
val toTypeName = toType.typeName.replace("(10,2)", "")
160+
val legacy = supportLevelStr(
161+
CometCast.isSupported(fromType, toType, None, CometEvalMode.LEGACY))
162+
val ansi = supportLevelStr(
163+
CometCast.isSupported(fromType, toType, None, CometEvalMode.ANSI))
164+
val tryMode = supportLevelStr(
165+
CometCast.isSupported(fromType, toType, None, CometEvalMode.TRY))
166+
w.write(s"| $fromTypeName | $toTypeName | $legacy | $ansi | $tryMode |\n".getBytes)
167+
}
168+
}
169+
}
170+
w.write("<!-- prettier-ignore-end -->\n".getBytes)
151171
}
152172
}
153173
w.close()
154174
}
155175

176+
private def supportLevelStr(level: SupportLevel): String = level match {
177+
case Compatible(_) => "Compatible"
178+
case Incompatible(_) => "Incompatible"
179+
case Unsupported(_) => "Unsupported"
180+
}
181+
156182
/** Read file into memory */
157183
private def readFile(filename: String): Seq[String] = {
158184
val r = new BufferedReader(new FileReader(filename))

0 commit comments

Comments
 (0)