mirror of
https://github.com/enso-org/enso.git
synced 2024-12-23 11:41:56 +03:00
Linting and Groups update (#8357)
- Fix issues from the linter. - Rename the constructors for `Blank_Selector`. - Update various GROUP tags.
This commit is contained in:
parent
8eed0f1dd6
commit
347b5a7cf5
@ -33,7 +33,8 @@ list_buckets credentials:(AWS_Credential | Nothing)=Nothing = handle_s3_errors <
|
|||||||
buckets = client.listBuckets.buckets
|
buckets = client.listBuckets.buckets
|
||||||
buckets.map b->b.name
|
buckets.map b->b.name
|
||||||
|
|
||||||
## Gets the list of the items inside a bucket.
|
## GROUP Standard.Base.Input
|
||||||
|
Gets the list of the items inside a bucket.
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
- bucket: the name of the bucket.
|
- bucket: the name of the bucket.
|
||||||
|
@ -30,22 +30,25 @@ type S3_File
|
|||||||
## PRIVATE
|
## PRIVATE
|
||||||
Value bucket:Text prefix:Text credentials:(AWS_Credential | Nothing)
|
Value bucket:Text prefix:Text credentials:(AWS_Credential | Nothing)
|
||||||
|
|
||||||
## Gets the URI of this file
|
## GROUP Standard.Base.Metadata
|
||||||
|
Gets the URI of this file
|
||||||
uri : Text
|
uri : Text
|
||||||
uri self = "s3://" + (if self.bucket=="" then "" else (self.bucket+"/"+self.prefix))
|
uri self = "s3://" + (if self.bucket=="" then "" else (self.bucket+"/"+self.prefix))
|
||||||
|
|
||||||
## Checks if the folder or file exists
|
## GROUP Standard.Base.Metadata
|
||||||
|
Checks if the folder or file exists
|
||||||
exists : Boolean
|
exists : Boolean
|
||||||
exists self = if self.bucket == "" then True else
|
exists self = if self.bucket == "" then True else
|
||||||
if self.prefix == "" then S3.head self.bucket "" self.credentials . is_error . not else
|
if self.prefix == "" then S3.head self.bucket "" self.credentials . is_error . not else
|
||||||
pair = S3.read_bucket self.bucket self.prefix self.credentials max_count=1
|
pair = S3.read_bucket self.bucket self.prefix self.credentials max_count=1
|
||||||
pair.second.length > 0
|
pair.second.length > 0
|
||||||
|
|
||||||
## Checks if this is a folder
|
## GROUP Standard.Base.Metadata
|
||||||
|
Checks if this is a folder
|
||||||
is_directory : Boolean
|
is_directory : Boolean
|
||||||
is_directory self = self.prefix=="" || self.prefix.ends_with "/"
|
is_directory self = self.prefix=="" || self.prefix.ends_with "/"
|
||||||
|
|
||||||
## GROUP Metadata
|
## GROUP Standard.Base.Metadata
|
||||||
Gets the size of a file in bytes.
|
Gets the size of a file in bytes.
|
||||||
size : Integer
|
size : Integer
|
||||||
size self =
|
size self =
|
||||||
@ -92,7 +95,7 @@ type S3_File
|
|||||||
response_body.with_stream action
|
response_body.with_stream action
|
||||||
|
|
||||||
## ALIAS load, open
|
## ALIAS load, open
|
||||||
GROUP Input
|
GROUP Standard.Base.Input
|
||||||
Read a file using the specified file format
|
Read a file using the specified file format
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
@ -136,7 +139,7 @@ type S3_File
|
|||||||
read_text self (encoding=Encoding.utf_8) (on_problems=Problem_Behavior.Report_Warning) =
|
read_text self (encoding=Encoding.utf_8) (on_problems=Problem_Behavior.Report_Warning) =
|
||||||
self.read (Plain_Text encoding) on_problems
|
self.read (Plain_Text encoding) on_problems
|
||||||
|
|
||||||
## GROUP Operators
|
## GROUP Standard.Base.Operators
|
||||||
Join two path segments together.
|
Join two path segments together.
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
@ -159,7 +162,7 @@ type S3_File
|
|||||||
path = loop initial parts
|
path = loop initial parts
|
||||||
S3_File.Value self.bucket path self.credentials
|
S3_File.Value self.bucket path self.credentials
|
||||||
|
|
||||||
## GROUP Calculations
|
## GROUP Standard.Base.Calculations
|
||||||
Join two or more path segments together, normalizing the `..` and `.` subpaths.
|
Join two or more path segments together, normalizing the `..` and `.` subpaths.
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
@ -169,7 +172,7 @@ type S3_File
|
|||||||
_ : Vector -> (subpaths.fold self c->p-> c / p)
|
_ : Vector -> (subpaths.fold self c->p-> c / p)
|
||||||
_ -> self.join [subpaths]
|
_ -> self.join [subpaths]
|
||||||
|
|
||||||
## GROUP Metadata
|
## GROUP Standard.Base.Metadata
|
||||||
Returns the name of this file.
|
Returns the name of this file.
|
||||||
name : Text
|
name : Text
|
||||||
name self = if self.prefix == "" then self.bucket else
|
name self = if self.prefix == "" then self.bucket else
|
||||||
@ -177,7 +180,7 @@ type S3_File
|
|||||||
last_index = trimmed.lastIndexOf "/"
|
last_index = trimmed.lastIndexOf "/"
|
||||||
if last_index == Nothing then trimmed else trimmed.drop (First last_index+1)
|
if last_index == Nothing then trimmed else trimmed.drop (First last_index+1)
|
||||||
|
|
||||||
## GROUP Metadata
|
## GROUP Standard.Base.Metadata
|
||||||
Returns the extension of the file.
|
Returns the extension of the file.
|
||||||
extension : Text
|
extension : Text
|
||||||
extension self = if self.is_directory then Error.throw (S3_Error.Error "Directories do not have extensions." self.uri) else
|
extension self = if self.is_directory then Error.throw (S3_Error.Error "Directories do not have extensions." self.uri) else
|
||||||
@ -187,7 +190,7 @@ type S3_File
|
|||||||
extension = name.drop (Index_Sub_Range.First last_dot.start)
|
extension = name.drop (Index_Sub_Range.First last_dot.start)
|
||||||
if extension == "." then "" else extension
|
if extension == "." then "" else extension
|
||||||
|
|
||||||
## GROUP Input
|
## GROUP Standard.Base.Input
|
||||||
Lists files contained in the directory denoted by this file.
|
Lists files contained in the directory denoted by this file.
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
|
@ -21,7 +21,7 @@ import project.System.Input_Stream.Input_Stream
|
|||||||
import project.System.Output_Stream.Output_Stream
|
import project.System.Output_Stream.Output_Stream
|
||||||
from project.Data.Boolean import Boolean, False, True
|
from project.Data.Boolean import Boolean, False, True
|
||||||
from project.Data.Text.Extensions import all
|
from project.Data.Text.Extensions import all
|
||||||
from project.System.File_Format import Auto_Detect, File_Format, Bytes, Plain_Text_Format
|
from project.System.File_Format import Auto_Detect, Bytes, File_Format, Plain_Text_Format
|
||||||
|
|
||||||
type Enso_File
|
type Enso_File
|
||||||
## PRIVATE
|
## PRIVATE
|
||||||
@ -45,14 +45,16 @@ type Enso_File
|
|||||||
Enso_Asset_Type.Data_Link -> Utils.secrets_api + "/" + self.id
|
Enso_Asset_Type.Data_Link -> Utils.secrets_api + "/" + self.id
|
||||||
Enso_Asset_Type.Secret -> Error.throw (Illegal_Argument.Error "Secrets cannot be accessed directly.")
|
Enso_Asset_Type.Secret -> Error.throw (Illegal_Argument.Error "Secrets cannot be accessed directly.")
|
||||||
|
|
||||||
## Checks if the folder or file exists
|
## GROUP Metadata
|
||||||
|
Checks if the folder or file exists
|
||||||
exists : Boolean
|
exists : Boolean
|
||||||
exists self =
|
exists self =
|
||||||
auth_header = Utils.authorization_header
|
auth_header = Utils.authorization_header
|
||||||
response = HTTP.fetch self.internal_uri HTTP_Method.Get [auth_header]
|
response = HTTP.fetch self.internal_uri HTTP_Method.Get [auth_header]
|
||||||
response.code.is_success
|
response.code.is_success
|
||||||
|
|
||||||
## Checks if this is a folder
|
## GROUP Metadata
|
||||||
|
Checks if this is a folder
|
||||||
is_directory : Boolean
|
is_directory : Boolean
|
||||||
is_directory self = self.asset_type == Enso_Asset_Type.Directory
|
is_directory self = self.asset_type == Enso_Asset_Type.Directory
|
||||||
|
|
||||||
@ -163,7 +165,8 @@ type Enso_File
|
|||||||
extension = name.drop (Index_Sub_Range.First last_dot.start)
|
extension = name.drop (Index_Sub_Range.First last_dot.start)
|
||||||
if extension == "." then "" else extension
|
if extension == "." then "" else extension
|
||||||
|
|
||||||
## Gets a list of assets within self.
|
## GROUP Input
|
||||||
|
Gets a list of assets within self.
|
||||||
list : Vector Enso_File
|
list : Vector Enso_File
|
||||||
list self = if self.asset_type != Enso_Asset_Type.Directory then Error.throw (Illegal_Argument.Error "Only directories can be listed.") else
|
list self = if self.asset_type != Enso_Asset_Type.Directory then Error.throw (Illegal_Argument.Error "Only directories can be listed.") else
|
||||||
auth_header = Utils.authorization_header
|
auth_header = Utils.authorization_header
|
||||||
|
@ -27,7 +27,7 @@ type Enso_Secret
|
|||||||
- parent: The parent folder for the secret. If `Nothing` then it will be
|
- parent: The parent folder for the secret. If `Nothing` then it will be
|
||||||
created in the root folder.
|
created in the root folder.
|
||||||
create : Text -> Text -> Enso_File | Nothing -> Enso_Secret
|
create : Text -> Text -> Enso_File | Nothing -> Enso_Secret
|
||||||
create name:Text value:Text parent:(Enso_File|Nothing)=Nothing = if name == "" then Error.throw (Illegal_Argument.Error "Secret name cannot be empty") else
|
create name:Text value:Text parent:(Enso_File | Nothing)=Nothing = if name == "" then Error.throw (Illegal_Argument.Error "Secret name cannot be empty") else
|
||||||
if Context.Output.is_enabled.not then Error.throw (Forbidden_Operation.Error "Creating a secret is forbidden as the Output context is disabled.") else
|
if Context.Output.is_enabled.not then Error.throw (Forbidden_Operation.Error "Creating a secret is forbidden as the Output context is disabled.") else
|
||||||
if name.starts_with "connection-" then Error.throw (Illegal_Argument.Error "Secret name cannot start with 'connection-'") else
|
if name.starts_with "connection-" then Error.throw (Illegal_Argument.Error "Secret name cannot start with 'connection-'") else
|
||||||
if Enso_Secret.exists name parent then Error.throw (Illegal_Argument.Error "Secret with this name already exists") else
|
if Enso_Secret.exists name parent then Error.throw (Illegal_Argument.Error "Secret with this name already exists") else
|
||||||
@ -38,7 +38,8 @@ type Enso_Secret
|
|||||||
response.if_not_error <|
|
response.if_not_error <|
|
||||||
Enso_Secret.get name parent
|
Enso_Secret.get name parent
|
||||||
|
|
||||||
## Deletes a secret.
|
## GROUP Output
|
||||||
|
Deletes a secret.
|
||||||
delete : Enso_Secret
|
delete : Enso_Secret
|
||||||
delete self =
|
delete self =
|
||||||
if Context.Output.is_enabled.not then Error.throw (Forbidden_Operation.Error "Deleting a secret is forbidden as the Output context is disabled.") else
|
if Context.Output.is_enabled.not then Error.throw (Forbidden_Operation.Error "Deleting a secret is forbidden as the Output context is disabled.") else
|
||||||
@ -47,13 +48,14 @@ type Enso_Secret
|
|||||||
response = HTTP.post uri Request_Body.Empty HTTP_Method.Delete [auth_header]
|
response = HTTP.post uri Request_Body.Empty HTTP_Method.Delete [auth_header]
|
||||||
response.if_not_error self
|
response.if_not_error self
|
||||||
|
|
||||||
## Gets a list of all the secrets in the folder.
|
## GROUP Input
|
||||||
|
Gets a list of all the secrets in the folder.
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
- folder: The folder to get the secrets from. If `Nothing` then will get
|
- folder: The folder to get the secrets from. If `Nothing` then will get
|
||||||
the secrets from the root folder.
|
the secrets from the root folder.
|
||||||
list : Enso_File | Nothing -> Vector Enso_Secret
|
list : Enso_File | Nothing -> Vector Enso_Secret
|
||||||
list parent:(Enso_File|Nothing)=Nothing =
|
list parent:(Enso_File | Nothing)=Nothing =
|
||||||
auth_header = Utils.authorization_header
|
auth_header = Utils.authorization_header
|
||||||
auth_header.if_not_error <|
|
auth_header.if_not_error <|
|
||||||
headers = if parent.is_nothing then [auth_header] else [auth_header, ["parent_id", Enso_File.id]]
|
headers = if parent.is_nothing then [auth_header] else [auth_header, ["parent_id", Enso_File.id]]
|
||||||
@ -71,17 +73,18 @@ type Enso_Secret
|
|||||||
- parent: The parent folder for the secret. If `Nothing` then will check
|
- parent: The parent folder for the secret. If `Nothing` then will check
|
||||||
in the root folder.
|
in the root folder.
|
||||||
get : Text -> Enso_File | Nothing -> Enso_Secret ! Not_Found
|
get : Text -> Enso_File | Nothing -> Enso_Secret ! Not_Found
|
||||||
get name:Text parent:(Enso_File|Nothing)=Nothing =
|
get name:Text parent:(Enso_File | Nothing)=Nothing =
|
||||||
Enso_Secret.list parent . find s-> s.name == name
|
Enso_Secret.list parent . find s-> s.name == name
|
||||||
|
|
||||||
## Checks if a Secret exists.
|
## GROUP Metadata
|
||||||
|
Checks if a Secret exists.
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
- name: The name of the secret
|
- name: The name of the secret
|
||||||
- parent: The parent folder for the secret. If `Nothing` then will check
|
- parent: The parent folder for the secret. If `Nothing` then will check
|
||||||
in the root folder.
|
in the root folder.
|
||||||
exists : Text -> Enso_File | Nothing -> Boolean
|
exists : Text -> Enso_File | Nothing -> Boolean
|
||||||
exists name:Text parent:(Enso_File|Nothing)=Nothing =
|
exists name:Text parent:(Enso_File | Nothing)=Nothing =
|
||||||
Enso_Secret.list parent . any s-> s.name == name
|
Enso_Secret.list parent . any s-> s.name == name
|
||||||
|
|
||||||
## PRIVATE
|
## PRIVATE
|
||||||
|
@ -275,8 +275,8 @@ sql_like_to_regex sql_pattern =
|
|||||||
Regex.compile regex_pattern
|
Regex.compile regex_pattern
|
||||||
|
|
||||||
## PRIVATE
|
## PRIVATE
|
||||||
unify_condition_or_predicate : Filter_Condition|(Any->Boolean) -> (Any -> Boolean)
|
unify_condition_or_predicate : Filter_Condition | (Any -> Boolean) -> (Any -> Boolean)
|
||||||
unify_condition_or_predicate (condition_or_predicate : Filter_Condition | Function) =
|
unify_condition_or_predicate (condition_or_predicate : Filter_Condition | (Any -> Boolean)) =
|
||||||
case condition_or_predicate of
|
case condition_or_predicate of
|
||||||
condition : Filter_Condition -> condition.to_predicate
|
condition : Filter_Condition -> condition.to_predicate
|
||||||
predicate -> handle_constructor_missing_arguments predicate predicate
|
predicate -> handle_constructor_missing_arguments predicate predicate
|
||||||
|
@ -19,7 +19,7 @@ from project.Data.Boolean import Boolean, False, True
|
|||||||
from project.Data.Range.Extensions import all
|
from project.Data.Range.Extensions import all
|
||||||
from project.Metadata.Choice import Option
|
from project.Metadata.Choice import Option
|
||||||
from project.Metadata.Widget import Single_Choice
|
from project.Metadata.Widget import Single_Choice
|
||||||
from project.Random import Random, get_default_seed
|
from project.Random import get_default_seed, Random
|
||||||
|
|
||||||
type Index_Sub_Range
|
type Index_Sub_Range
|
||||||
## Select the first `count` items.
|
## Select the first `count` items.
|
||||||
|
@ -210,7 +210,8 @@ type JS_Object
|
|||||||
to_default_visualization_data self =
|
to_default_visualization_data self =
|
||||||
render self
|
render self
|
||||||
|
|
||||||
## Creates an Enso object from the JS_Object.
|
## GROUP Conversions
|
||||||
|
Creates an Enso object from the JS_Object.
|
||||||
into : Any -> Any
|
into : Any -> Any
|
||||||
into self target_type = case target_type of
|
into self target_type = case target_type of
|
||||||
JS_Object -> self
|
JS_Object -> self
|
||||||
|
@ -199,8 +199,8 @@ type Date_Time_Formatter
|
|||||||
pattern. If not specified, defaults to `Locale.default`. If passing a
|
pattern. If not specified, defaults to `Locale.default`. If passing a
|
||||||
`DateTimeFormatter` instance and this argument is set, it will
|
`DateTimeFormatter` instance and this argument is set, it will
|
||||||
overwrite the original locale of that formatter.
|
overwrite the original locale of that formatter.
|
||||||
from_java : Text|DateTimeFormatter -> Locale -> Date_Time_Formatter ! Illegal_Argument
|
from_java : Text | DateTimeFormatter -> Locale | Nothing -> Date_Time_Formatter ! Illegal_Argument
|
||||||
from_java pattern (locale:Locale|Nothing=Nothing) = case pattern of
|
from_java pattern locale:(Locale | Nothing)=Nothing = case pattern of
|
||||||
java_formatter : DateTimeFormatter ->
|
java_formatter : DateTimeFormatter ->
|
||||||
amended_formatter = case locale of
|
amended_formatter = case locale of
|
||||||
Nothing -> java_formatter
|
Nothing -> java_formatter
|
||||||
|
@ -159,7 +159,8 @@ type Time_Zone
|
|||||||
zone_id : Text
|
zone_id : Text
|
||||||
zone_id self = @Builtin_Method "Time_Zone.zone_id"
|
zone_id self = @Builtin_Method "Time_Zone.zone_id"
|
||||||
|
|
||||||
## Get the offset in seconds at given date time.
|
## GROUP DateTime
|
||||||
|
Get the offset in seconds at given date time.
|
||||||
Arguments:
|
Arguments:
|
||||||
- at: The date to compute offset at.
|
- at: The date to compute offset at.
|
||||||
|
|
||||||
|
@ -89,8 +89,8 @@ type Vector a
|
|||||||
> Example
|
> Example
|
||||||
Turn a list into a vector.
|
Turn a list into a vector.
|
||||||
Vector.collect (List.Cons 1 <| List.Cons 2 <| List.Nil) .x .xs stop_at=(_==List.Nil)
|
Vector.collect (List.Cons 1 <| List.Cons 2 <| List.Nil) .x .xs stop_at=(_==List.Nil)
|
||||||
collect : Any -> (Any -> Any) -> (Any -> Any) -> Integer | Nothing -> ((Any -> Boolean) | Nothing) -> Vector Any
|
collect : Any -> (Any -> Any) -> (Any -> Any) -> Integer | Nothing -> (Any -> Boolean) -> Vector Any
|
||||||
collect seq element:(Any -> Any) next:(Any->Any) limit:(Integer|Nothing)=Nothing stop_at:(Any->Boolean)=(_==Nothing) =
|
collect seq element:(Any -> Any) next:(Any -> Any) limit:(Integer | Nothing)=Nothing stop_at:(Any -> Boolean)=(_==Nothing) =
|
||||||
b = Vector.new_builder (if limit.is_nothing then 10 else limit)
|
b = Vector.new_builder (if limit.is_nothing then 10 else limit)
|
||||||
iterate item remaining = if remaining == 0 || (stop_at item) then b.to_vector else
|
iterate item remaining = if remaining == 0 || (stop_at item) then b.to_vector else
|
||||||
b.append <| element item
|
b.append <| element item
|
||||||
@ -722,8 +722,8 @@ type Vector a
|
|||||||
Concatenate two single-element vectors.
|
Concatenate two single-element vectors.
|
||||||
|
|
||||||
[1] + [2]
|
[1] + [2]
|
||||||
+ : Vector Any -> Vector Any
|
+ : Vector Any | Array -> Vector Any
|
||||||
+ self that:(Array|Vector) = case that of
|
+ self that:(Vector | Array) = case that of
|
||||||
_ : Vector -> Vector.insert_builtin self self.length that
|
_ : Vector -> Vector.insert_builtin self self.length that
|
||||||
_ : Array -> self + Vector.from_polyglot_array that
|
_ : Array -> self + Vector.from_polyglot_array that
|
||||||
|
|
||||||
|
@ -36,7 +36,8 @@ polyglot java import org.xml.sax.SAXException
|
|||||||
polyglot java import org.xml.sax.SAXParseException
|
polyglot java import org.xml.sax.SAXParseException
|
||||||
|
|
||||||
type XML_Document
|
type XML_Document
|
||||||
## Read an XML document from a file.
|
## GROUP Input
|
||||||
|
Read an XML document from a file.
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
- file: the `File` to read the XML document from.
|
- file: the `File` to read the XML document from.
|
||||||
@ -71,7 +72,8 @@ type XML_Document
|
|||||||
XML_Error.handle_java_exceptions <|
|
XML_Error.handle_java_exceptions <|
|
||||||
input_stream.with_java_stream java_stream-> XML_Document.from_source java_stream
|
input_stream.with_java_stream java_stream-> XML_Document.from_source java_stream
|
||||||
|
|
||||||
## Read an XML document from a string.
|
## GROUP Conversions
|
||||||
|
Read an XML document from a string.
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
- xml_string: The string to read the XML document from.
|
- xml_string: The string to read the XML document from.
|
||||||
@ -98,7 +100,8 @@ type XML_Document
|
|||||||
XML_Utils.setCustomErrorHandler document_builder
|
XML_Utils.setCustomErrorHandler document_builder
|
||||||
XML_Document.Value (document_builder.parse input_source)
|
XML_Document.Value (document_builder.parse input_source)
|
||||||
|
|
||||||
## Get the root element of the document.
|
## GROUP Metadata
|
||||||
|
Get the root element of the document.
|
||||||
|
|
||||||
> Example
|
> Example
|
||||||
Get the root element of a document.
|
Get the root element of a document.
|
||||||
@ -125,7 +128,8 @@ type XML_Document
|
|||||||
Value (java_document:Document)
|
Value (java_document:Document)
|
||||||
|
|
||||||
type XML_Element
|
type XML_Element
|
||||||
## Gets the tag of an XML element.
|
## GROUP Metadata
|
||||||
|
Gets the tag of an XML element.
|
||||||
|
|
||||||
> Example
|
> Example
|
||||||
Get the tag of an XML element.
|
Get the tag of an XML element.
|
||||||
@ -137,7 +141,8 @@ type XML_Element
|
|||||||
XML_Error.handle_java_exceptions <|
|
XML_Error.handle_java_exceptions <|
|
||||||
self.java_element.getNodeName
|
self.java_element.getNodeName
|
||||||
|
|
||||||
## Gets a child of an XML element.
|
## GROUP Selections
|
||||||
|
Gets a child of an XML element.
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
- key: If an `Integer`, returns the element at position `at` in its list
|
- key: If an `Integer`, returns the element at position `at` in its list
|
||||||
@ -156,12 +161,13 @@ type XML_Element
|
|||||||
root.get "@bar"
|
root.get "@bar"
|
||||||
# => "one"
|
# => "one"
|
||||||
get : Text | Integer -> Any -> Any | Text | XML_Element | Vector (Text | XML_Element) ! No_Such_Key | Index_Out_Of_Bounds | XML_Error
|
get : Text | Integer -> Any -> Any | Text | XML_Element | Vector (Text | XML_Element) ! No_Such_Key | Index_Out_Of_Bounds | XML_Error
|
||||||
get self key:(Text|Integer) ~if_missing=Nothing =
|
get self key:(Text | Integer) ~if_missing=Nothing =
|
||||||
case key of
|
case key of
|
||||||
_ : Integer -> self.children_cache.get key if_missing
|
_ : Integer -> self.children_cache.get key if_missing
|
||||||
_ : Text -> if is_attribute_key key then self.get_xpath key . get 0 if_missing else self.get_xpath key
|
_ : Text -> if is_attribute_key key then self.get_xpath key . get 0 if_missing else self.get_xpath key
|
||||||
|
|
||||||
## Gets a child or attribute of an XML element.
|
## GROUP Selections
|
||||||
|
Gets a child or attribute of an XML element.
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
- key: If an `Integer`, returns the element at position `at` in its list
|
- key: If an `Integer`, returns the element at position `at` in its list
|
||||||
@ -182,7 +188,7 @@ type XML_Element
|
|||||||
root.at "@bar"
|
root.at "@bar"
|
||||||
# => "one"
|
# => "one"
|
||||||
at : Text | Integer -> Text | XML_Element | Vector (Text | XML_Element) ! No_Such_Key | Index_Out_Of_Bounds | XML_Error
|
at : Text | Integer -> Text | XML_Element | Vector (Text | XML_Element) ! No_Such_Key | Index_Out_Of_Bounds | XML_Error
|
||||||
at self key:(Text|Integer) =
|
at self key:(Text | Integer) =
|
||||||
if_missing = case key of
|
if_missing = case key of
|
||||||
_ : Integer -> Error.throw (Index_Out_Of_Bounds.Error key self.child_count)
|
_ : Integer -> Error.throw (Index_Out_Of_Bounds.Error key self.child_count)
|
||||||
_ : Text -> Error.throw (No_Such_Key.Error self key)
|
_ : Text -> Error.throw (No_Such_Key.Error self key)
|
||||||
@ -205,7 +211,8 @@ type XML_Element
|
|||||||
xpath = XPathFactory.newInstance.newXPath
|
xpath = XPathFactory.newInstance.newXPath
|
||||||
only_wanted_nodes (xpath.evaluate key self.java_element XPathConstants.NODESET)
|
only_wanted_nodes (xpath.evaluate key self.java_element XPathConstants.NODESET)
|
||||||
|
|
||||||
## Gets the child elements of an XML element.
|
## GROUP Selections
|
||||||
|
Gets the child elements of an XML element.
|
||||||
|
|
||||||
`children` only returns child elements and child text nodes that are not
|
`children` only returns child elements and child text nodes that are not
|
||||||
100% whitespace. Other node types, such as comments, are not included.
|
100% whitespace. Other node types, such as comments, are not included.
|
||||||
@ -216,7 +223,8 @@ type XML_Element
|
|||||||
children : Vector (XML_Element | Text) ! XML_Error
|
children : Vector (XML_Element | Text) ! XML_Error
|
||||||
children self = self.children_cache
|
children self = self.children_cache
|
||||||
|
|
||||||
## Gets the number children of an XML element.
|
## GROUP Metadata
|
||||||
|
Gets the number children of an XML element.
|
||||||
|
|
||||||
`child_count` only counts child elements and child text nodes that are
|
`child_count` only counts child elements and child text nodes that are
|
||||||
not 100% whitespace. Other node types, such as comments, are not included
|
not 100% whitespace. Other node types, such as comments, are not included
|
||||||
@ -230,7 +238,8 @@ type XML_Element
|
|||||||
child_count : Integer ! XML_Error
|
child_count : Integer ! XML_Error
|
||||||
child_count self = self.children_cache.length
|
child_count self = self.children_cache.length
|
||||||
|
|
||||||
## Get an attribute of an XML element.
|
## GROUP Selections
|
||||||
|
Get an attribute of an XML element.
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
- name: The name of the attribute to get.
|
- name: The name of the attribute to get.
|
||||||
@ -248,7 +257,8 @@ type XML_Element
|
|||||||
attr = self.java_element.getAttributeNode name
|
attr = self.java_element.getAttributeNode name
|
||||||
if attr.is_nothing then if_missing else attr.getValue
|
if attr.is_nothing then if_missing else attr.getValue
|
||||||
|
|
||||||
## Gets a map containing f the attributes of an XML element.
|
## GROUP Selections
|
||||||
|
Gets a map containing of the attributes of an XML element.
|
||||||
|
|
||||||
> Example
|
> Example
|
||||||
XML_Document.from_text '<foo bar="one">hello</foo>' . root_element . attributes
|
XML_Document.from_text '<foo bar="one">hello</foo>' . root_element . attributes
|
||||||
@ -262,7 +272,8 @@ type XML_Element
|
|||||||
[node.getNodeName, node.getNodeValue]
|
[node.getNodeName, node.getNodeValue]
|
||||||
Map.from_vector keys_and_values
|
Map.from_vector keys_and_values
|
||||||
|
|
||||||
## Gets the text (non-markup) contents of the element and its descendants,
|
## GROUP Selections
|
||||||
|
Gets the text (non-markup) contents of the element and its descendants,
|
||||||
if any.
|
if any.
|
||||||
|
|
||||||
> Example
|
> Example
|
||||||
@ -300,7 +311,8 @@ type XML_Element
|
|||||||
XML_Error.handle_java_exceptions <|
|
XML_Error.handle_java_exceptions <|
|
||||||
XML_Utils.innerXML self.java_element
|
XML_Utils.innerXML self.java_element
|
||||||
|
|
||||||
## Gets elements matching a given tag name.
|
## GROUP Metadata
|
||||||
|
Gets elements matching a given tag name.
|
||||||
|
|
||||||
This searches through all descendants of the node, not just immediate children.
|
This searches through all descendants of the node, not just immediate children.
|
||||||
|
|
||||||
|
@ -634,7 +634,7 @@ type Instrumentor
|
|||||||
- fn: The callback function accepting UUID and computed value
|
- fn: The callback function accepting UUID and computed value
|
||||||
- expression: Expression to evaluate on_return - by default Nothing -
|
- expression: Expression to evaluate on_return - by default Nothing -
|
||||||
e.g. to provide the return value of the function
|
e.g. to provide the return value of the function
|
||||||
on_return self (fn : Text -> Any -> Nothing) (expression : Text|Nothing)=Nothing =
|
on_return self (fn : Text -> Any -> Nothing) expression:(Text | Nothing)=Nothing =
|
||||||
new = instrumentor_builtin "onReturn" [ self.impl, fn, expression ]
|
new = instrumentor_builtin "onReturn" [ self.impl, fn, expression ]
|
||||||
Instrumentor.Value new
|
Instrumentor.Value new
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ type Header
|
|||||||
|
|
||||||
example_new = Header.new "My_Header" "my header's value"
|
example_new = Header.new "My_Header" "my header's value"
|
||||||
new : Text -> Text | Enso_Secret -> Header
|
new : Text -> Text | Enso_Secret -> Header
|
||||||
new name:Text value:(Text|Enso_Secret) = Header.Value name value
|
new name:Text value:(Text | Enso_Secret) = Header.Value name value
|
||||||
|
|
||||||
## Create an "Accept" header.
|
## Create an "Accept" header.
|
||||||
|
|
||||||
@ -115,7 +115,7 @@ type Header
|
|||||||
|
|
||||||
example_content_type = Header.content_type "my_type"
|
example_content_type = Header.content_type "my_type"
|
||||||
content_type : Text -> Encoding | Nothing -> Header
|
content_type : Text -> Encoding | Nothing -> Header
|
||||||
content_type value:Text encoding:(Encoding|Nothing)=Nothing =
|
content_type value:Text encoding:(Encoding | Nothing)=Nothing =
|
||||||
charset = if encoding.is_nothing then "" else "; charset="+encoding.character_set
|
charset = if encoding.is_nothing then "" else "; charset="+encoding.character_set
|
||||||
Header.Value Header.content_type_header_name value+charset
|
Header.Value Header.content_type_header_name value+charset
|
||||||
|
|
||||||
|
@ -64,7 +64,8 @@ type Response
|
|||||||
content_type_optional = self.internal_http_response.headers.firstValue "Content-Type"
|
content_type_optional = self.internal_http_response.headers.firstValue "Content-Type"
|
||||||
if content_type_optional.isPresent then content_type_optional.get else Nothing
|
if content_type_optional.isPresent then content_type_optional.get else Nothing
|
||||||
|
|
||||||
## Get the response content length in bytes.
|
## GROUP Metadata
|
||||||
|
Get the response content length in bytes.
|
||||||
This method uses the `Content-Length` header, and does not read the body.
|
This method uses the `Content-Length` header, and does not read the body.
|
||||||
If the header is not present will return Nothing.
|
If the header is not present will return Nothing.
|
||||||
content_length : Integer | Nothing
|
content_length : Integer | Nothing
|
||||||
|
@ -108,7 +108,7 @@ type Response_Body
|
|||||||
_ -> self
|
_ -> self
|
||||||
|
|
||||||
## ALIAS parse
|
## ALIAS parse
|
||||||
GROUP Conversions
|
GROUP Input
|
||||||
Uses the format to decode the body.
|
Uses the format to decode the body.
|
||||||
If using `Auto_Detect`, the content-type will be used to determine the
|
If using `Auto_Detect`, the content-type will be used to determine the
|
||||||
format.
|
format.
|
||||||
|
@ -141,13 +141,14 @@ type URI
|
|||||||
query : Text | Nothing
|
query : Text | Nothing
|
||||||
query self = self.internal_uri.getQuery
|
query self = self.internal_uri.getQuery
|
||||||
|
|
||||||
## Adds a query parameter to the URI
|
## GROUP Calculations
|
||||||
|
Adds a query parameter to the URI
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
- key: The key of the query parameter.
|
- key: The key of the query parameter.
|
||||||
- value: The value of the query parameter.
|
- value: The value of the query parameter.
|
||||||
add_query_argument : Text -> Text | Enso_Secret -> URI
|
add_query_argument : Text -> Text | Enso_Secret -> URI
|
||||||
add_query_argument self key:Text value:(Text|Enso_Secret) =
|
add_query_argument self key:Text value:(Text | Enso_Secret) =
|
||||||
URI_With_Query.Value self [Pair.new key value]
|
URI_With_Query.Value self [Pair.new key value]
|
||||||
|
|
||||||
## Get the fragment part of this URI.
|
## Get the fragment part of this URI.
|
||||||
|
@ -43,13 +43,14 @@ type URI_With_Query
|
|||||||
(EnsoSecretHelper.encodeArg p.first True) + "=" + (EnsoSecretHelper.encodeArg p.second False)
|
(EnsoSecretHelper.encodeArg p.first True) + "=" + (EnsoSecretHelper.encodeArg p.second False)
|
||||||
(if base_query == "" then "" else base_query + "&") + (query_params.join "&")
|
(if base_query == "" then "" else base_query + "&") + (query_params.join "&")
|
||||||
|
|
||||||
## Adds a query parameter to the URI
|
## GROUP Calculations
|
||||||
|
Adds a query parameter to the URI
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
- key: The key of the query parameter.
|
- key: The key of the query parameter.
|
||||||
- value: The value of the query parameter.
|
- value: The value of the query parameter.
|
||||||
add_query_argument : Text -> Text | Enso_Secret -> URI
|
add_query_argument : Text -> Text | Enso_Secret -> URI
|
||||||
add_query_argument self key:Text value:(Text|Enso_Secret) =
|
add_query_argument self key:Text value:(Text | Enso_Secret) =
|
||||||
URI_With_Query.Value self.uri self.parameters+[Pair.new key value]
|
URI_With_Query.Value self.uri self.parameters+[Pair.new key value]
|
||||||
|
|
||||||
## PRIVATE
|
## PRIVATE
|
||||||
@ -94,11 +95,13 @@ type URI_With_Query
|
|||||||
host : Text | Nothing
|
host : Text | Nothing
|
||||||
host self = self.uri.host
|
host self = self.uri.host
|
||||||
|
|
||||||
## Get the authority (user info and host) part of this URI.
|
## GROUP Metadata
|
||||||
|
Get the authority (user info and host) part of this URI.
|
||||||
authority : Text | Nothing
|
authority : Text | Nothing
|
||||||
authority self = self.uri.authority
|
authority self = self.uri.authority
|
||||||
|
|
||||||
## Get the port part of this URI.
|
## GROUP Metadata
|
||||||
|
Get the port part of this URI.
|
||||||
port : Text | Nothing
|
port : Text | Nothing
|
||||||
port self = self.uri.port
|
port self = self.uri.port
|
||||||
|
|
||||||
@ -107,6 +110,7 @@ type URI_With_Query
|
|||||||
path : Text | Nothing
|
path : Text | Nothing
|
||||||
path self = self.uri.path
|
path self = self.uri.path
|
||||||
|
|
||||||
## Get the fragment part of this URI.
|
## GROUP Metadata
|
||||||
|
Get the fragment part of this URI.
|
||||||
fragment : Text | Nothing
|
fragment : Text | Nothing
|
||||||
fragment self = self.uri.fragment
|
fragment self = self.uri.fragment
|
||||||
|
@ -25,6 +25,7 @@ polyglot java import java.util.UUID
|
|||||||
polyglot java import org.enso.base.random.Random_Utils
|
polyglot java import org.enso.base.random.Random_Utils
|
||||||
polyglot java import org.enso.base.random.RandomInstanceHolder
|
polyglot java import org.enso.base.random.RandomInstanceHolder
|
||||||
|
|
||||||
|
## Type for creating random values.
|
||||||
type Random
|
type Random
|
||||||
## PRIVATE
|
## PRIVATE
|
||||||
GROUP Random
|
GROUP Random
|
||||||
@ -41,8 +42,8 @@ type Random
|
|||||||
|
|
||||||
rng = Random.oew_generator 42
|
rng = Random.oew_generator 42
|
||||||
i = rng.integer 0 10
|
i = rng.integer 0 10
|
||||||
new_generator : Integer -> Random_Generator
|
new_generator : Integer | Nothing -> Random_Generator
|
||||||
new_generator (seed:Integer|Nothing=Nothing) = Random_Generator.new seed
|
new_generator seed:(Integer | Nothing)=Nothing = Random_Generator.new seed
|
||||||
|
|
||||||
## GROUP Random
|
## GROUP Random
|
||||||
TEXT_ONLY
|
TEXT_ONLY
|
||||||
|
@ -100,7 +100,7 @@ type Column
|
|||||||
- warn_if_more_rows: if set to `True`, a warning is attached to the
|
- warn_if_more_rows: if set to `True`, a warning is attached to the
|
||||||
result if the number of rows returned by the query exceeds `max_rows`.
|
result if the number of rows returned by the query exceeds `max_rows`.
|
||||||
read : (Nothing | Integer) -> Boolean -> Materialized_Column
|
read : (Nothing | Integer) -> Boolean -> Materialized_Column
|
||||||
read self (max_rows : Integer | Nothing = 1000) (warn_if_more_rows:Boolean = True) =
|
read self (max_rows : Nothing | Integer = 1000) (warn_if_more_rows:Boolean = True) =
|
||||||
self.to_table.read max_rows warn_if_more_rows . at 0
|
self.to_table.read max_rows warn_if_more_rows . at 0
|
||||||
|
|
||||||
## GROUP Standard.Base.Conversions
|
## GROUP Standard.Base.Conversions
|
||||||
@ -1108,7 +1108,7 @@ type Column
|
|||||||
sort self order=Sort_Direction.Ascending =
|
sort self order=Sort_Direction.Ascending =
|
||||||
self.to_table.order_by [Sort_Column.Index 0 order] . at 0
|
self.to_table.order_by [Sort_Column.Index 0 order] . at 0
|
||||||
|
|
||||||
## ALIAS first, last, slice, sample
|
## ALIAS first, last, sample, slice
|
||||||
GROUP Standard.Base.Selections
|
GROUP Standard.Base.Selections
|
||||||
Creates a new Column with the specified range of rows from the input
|
Creates a new Column with the specified range of rows from the input
|
||||||
Column.
|
Column.
|
||||||
@ -1417,7 +1417,7 @@ type Column
|
|||||||
unusual events like DST.
|
unusual events like DST.
|
||||||
@period Date_Time_Helpers.make_period_selector_for_column
|
@period Date_Time_Helpers.make_period_selector_for_column
|
||||||
date_add : (Column | Integer) -> Date_Period | Time_Period -> Column ! Invalid_Value_Type | Illegal_Argument
|
date_add : (Column | Integer) -> Date_Period | Time_Period -> Column ! Invalid_Value_Type | Illegal_Argument
|
||||||
date_add self amount (period : Date_Period|Time_Period = default_date_period self) =
|
date_add self amount (period : Date_Period | Time_Period = default_date_period self) =
|
||||||
Value_Type.expect_type self .is_date_or_time "date/time" <|
|
Value_Type.expect_type self .is_date_or_time "date/time" <|
|
||||||
my_type = self.inferred_precise_value_type
|
my_type = self.inferred_precise_value_type
|
||||||
Value_Type.expect_integer amount <|
|
Value_Type.expect_integer amount <|
|
||||||
@ -1602,7 +1602,8 @@ type Column
|
|||||||
check_cast_compatibility self.value_type value_type <|
|
check_cast_compatibility self.value_type value_type <|
|
||||||
self.internal_do_cast value_type on_problems
|
self.internal_do_cast value_type on_problems
|
||||||
|
|
||||||
## Change the value type of the column to a more specific one, based on its
|
## GROUP Standard.Base.Conversions
|
||||||
|
Change the value type of the column to a more specific one, based on its
|
||||||
contents.
|
contents.
|
||||||
|
|
||||||
This operation is currently not available in the Database backend.
|
This operation is currently not available in the Database backend.
|
||||||
@ -1657,7 +1658,7 @@ type Column
|
|||||||
_ = [function, skip_nothing, expected_value_type]
|
_ = [function, skip_nothing, expected_value_type]
|
||||||
Error.throw <| Unsupported_Database_Operation.Error "`Column.map` is not supported in the Database backends."
|
Error.throw <| Unsupported_Database_Operation.Error "`Column.map` is not supported in the Database backends."
|
||||||
|
|
||||||
## ALIAS combine, merge, join by row position
|
## ALIAS combine, join by row position, merge
|
||||||
|
|
||||||
Applies `function` to consecutive pairs of elements of `self` and `that`
|
Applies `function` to consecutive pairs of elements of `self` and `that`
|
||||||
and returns a column of results.
|
and returns a column of results.
|
||||||
|
@ -64,7 +64,7 @@ import project.Internal.IR.SQL_Expression.SQL_Expression
|
|||||||
import project.Internal.IR.SQL_Join_Kind.SQL_Join_Kind
|
import project.Internal.IR.SQL_Join_Kind.SQL_Join_Kind
|
||||||
import project.Internal.SQL_Type_Reference.SQL_Type_Reference
|
import project.Internal.SQL_Type_Reference.SQL_Type_Reference
|
||||||
from project.Data.Take_Drop_Helpers import Take_Drop
|
from project.Data.Take_Drop_Helpers import Take_Drop
|
||||||
from project.Errors import Integrity_Error, Table_Not_Found, Unsupported_Database_Operation, SQL_Error
|
from project.Errors import Integrity_Error, SQL_Error, Table_Not_Found, Unsupported_Database_Operation
|
||||||
|
|
||||||
polyglot java import java.sql.JDBCType
|
polyglot java import java.sql.JDBCType
|
||||||
polyglot java import java.util.UUID
|
polyglot java import java.util.UUID
|
||||||
@ -275,7 +275,7 @@ type Table
|
|||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
- when: By default, only columns consisting of all blank cells are
|
- when: By default, only columns consisting of all blank cells are
|
||||||
selected. If set to Blank_Selector.Any_Cell_Blank, columns with one or
|
selected. If set to Blank_Selector.Any_Cell, columns with one or
|
||||||
more blank values are selected.
|
more blank values are selected.
|
||||||
- treat_nans_as_blank: specified whether `Number.nan` is considered as
|
- treat_nans_as_blank: specified whether `Number.nan` is considered as
|
||||||
blank. By default, it is not.
|
blank. By default, it is not.
|
||||||
@ -288,7 +288,7 @@ type Table
|
|||||||
|
|
||||||
table.select_blank_columns
|
table.select_blank_columns
|
||||||
select_blank_columns : Blank_Selector -> Boolean -> Table
|
select_blank_columns : Blank_Selector -> Boolean -> Table
|
||||||
select_blank_columns self (when:Blank_Selector = Blank_Selector.All_Cells_Blank) treat_nans_as_blank=False =
|
select_blank_columns self (when:Blank_Selector = Blank_Selector.All_Cells) treat_nans_as_blank=False =
|
||||||
new_columns = self.columns_helper.select_blank_columns_helper when treat_nans_as_blank
|
new_columns = self.columns_helper.select_blank_columns_helper when treat_nans_as_blank
|
||||||
if new_columns.length == 0 then Error.throw (No_Output_Columns) else
|
if new_columns.length == 0 then Error.throw (No_Output_Columns) else
|
||||||
self.updated_columns new_columns
|
self.updated_columns new_columns
|
||||||
@ -301,7 +301,7 @@ type Table
|
|||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
- when: By default, only columns consisting of all blank cells are
|
- when: By default, only columns consisting of all blank cells are
|
||||||
selected. If set to Blank_Selector.Any_Cell_Blank, columns with one or
|
selected. If set to Blank_Selector.Any_Cell, columns with one or
|
||||||
more blank values are selected.
|
more blank values are selected.
|
||||||
- treat_nans_as_blank: specified whether `Number.nan` is considered as
|
- treat_nans_as_blank: specified whether `Number.nan` is considered as
|
||||||
blank. By default, it is not.
|
blank. By default, it is not.
|
||||||
@ -314,7 +314,7 @@ type Table
|
|||||||
|
|
||||||
table.remove_blank_columns
|
table.remove_blank_columns
|
||||||
remove_blank_columns : Blank_Selector -> Boolean -> Table
|
remove_blank_columns : Blank_Selector -> Boolean -> Table
|
||||||
remove_blank_columns self (when:Blank_Selector = Blank_Selector.All_Cells_Blank) treat_nans_as_blank=False =
|
remove_blank_columns self (when:Blank_Selector = Blank_Selector.All_Cells) treat_nans_as_blank=False =
|
||||||
new_columns = self.columns_helper.select_blank_columns_helper when treat_nans_as_blank invert_selection=True
|
new_columns = self.columns_helper.select_blank_columns_helper when treat_nans_as_blank invert_selection=True
|
||||||
if new_columns.length == 0 then Error.throw (No_Output_Columns) else
|
if new_columns.length == 0 then Error.throw (No_Output_Columns) else
|
||||||
self.updated_columns new_columns
|
self.updated_columns new_columns
|
||||||
@ -558,8 +558,8 @@ type Table
|
|||||||
people.filter "age" (age -> (age%10 == 0))
|
people.filter "age" (age -> (age%10 == 0))
|
||||||
@column Widget_Helpers.make_column_name_selector
|
@column Widget_Helpers.make_column_name_selector
|
||||||
@filter Widget_Helpers.make_filter_condition_selector
|
@filter Widget_Helpers.make_filter_condition_selector
|
||||||
filter : (Column | Text | Integer) -> (Filter_Condition|(Any->Boolean)) -> Problem_Behavior -> Table ! No_Such_Column | Index_Out_Of_Bounds | Invalid_Value_Type
|
filter : (Column | Text | Integer) -> (Filter_Condition | (Any -> Boolean)) -> Problem_Behavior -> Table ! No_Such_Column | Index_Out_Of_Bounds | Invalid_Value_Type
|
||||||
filter self column (filter : Filter_Condition | Function = Filter_Condition.Equal True) on_problems=Report_Warning = case column of
|
filter self column (filter : Filter_Condition | (Any -> Boolean) = Filter_Condition.Equal True) on_problems=Report_Warning = case column of
|
||||||
_ : Column ->
|
_ : Column ->
|
||||||
mask filter_column = case Helpers.check_integrity self filter_column of
|
mask filter_column = case Helpers.check_integrity self filter_column of
|
||||||
False ->
|
False ->
|
||||||
@ -1335,7 +1335,8 @@ type Table
|
|||||||
on_problems.attach_problems_before limit_problems <|
|
on_problems.attach_problems_before limit_problems <|
|
||||||
self.join_or_cross_join right join_kind=Join_Kind_Cross.Cross on=[] right_prefix on_problems
|
self.join_or_cross_join right join_kind=Join_Kind_Cross.Cross on=[] right_prefix on_problems
|
||||||
|
|
||||||
## Replaces values in this table by values from a lookup table.
|
## GROUP Standard.Base.Calculations
|
||||||
|
Replaces values in this table by values from a lookup table.
|
||||||
New values are looked up in the lookup table based on the `key_columns`.
|
New values are looked up in the lookup table based on the `key_columns`.
|
||||||
Columns found in the lookup table values are replaced by values from the
|
Columns found in the lookup table values are replaced by values from the
|
||||||
lookup. Columns not found are left unchanged.
|
lookup. Columns not found are left unchanged.
|
||||||
@ -1534,7 +1535,7 @@ type Table
|
|||||||
retyped to the `Mixed` type to indicate that intention. Note that the
|
retyped to the `Mixed` type to indicate that intention. Note that the
|
||||||
`Mixed` type may not be supported by most Database backends.
|
`Mixed` type may not be supported by most Database backends.
|
||||||
union : (Table | Vector Table) -> Match_Columns -> Boolean | Report_Unmatched -> Boolean -> Problem_Behavior -> Table
|
union : (Table | Vector Table) -> Match_Columns -> Boolean | Report_Unmatched -> Boolean -> Problem_Behavior -> Table
|
||||||
union self tables:Vector|Table match_columns=Match_Columns.By_Name keep_unmatched_columns=Report_Unmatched allow_type_widening=True on_problems=Report_Warning =
|
union self tables:(Table | Vector) match_columns=Match_Columns.By_Name keep_unmatched_columns=Report_Unmatched allow_type_widening=True on_problems=Report_Warning =
|
||||||
all_tables = case tables of
|
all_tables = case tables of
|
||||||
v : Vector -> [self] + (v.map t-> Table.from t)
|
v : Vector -> [self] + (v.map t-> Table.from t)
|
||||||
single_table -> [self, single_table]
|
single_table -> [self, single_table]
|
||||||
@ -2080,7 +2081,7 @@ type Table
|
|||||||
_ = [column, pattern, case_sensitivity, parse_values, on_problems]
|
_ = [column, pattern, case_sensitivity, parse_values, on_problems]
|
||||||
Error.throw (Unsupported_Database_Operation.Error "Table.parse_to_columns is not implemented yet for the Database backends.")
|
Error.throw (Unsupported_Database_Operation.Error "Table.parse_to_columns is not implemented yet for the Database backends.")
|
||||||
|
|
||||||
## GROUP Standard.Base.Conversions
|
## GROUP Standard.Base.Calculations
|
||||||
Expand a column of objects to a new set of columns.
|
Expand a column of objects to a new set of columns.
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
@ -2094,7 +2095,7 @@ type Table
|
|||||||
_ = [column, fields, prefix]
|
_ = [column, fields, prefix]
|
||||||
Error.throw (Unsupported_Database_Operation.Error "Table.expand_column is currently not implemented for the Database backend. You may download the table to memory using `.read` to use this feature.")
|
Error.throw (Unsupported_Database_Operation.Error "Table.expand_column is currently not implemented for the Database backend. You may download the table to memory using `.read` to use this feature.")
|
||||||
|
|
||||||
## GROUP Standard.Base.Conversions
|
## GROUP Standard.Base.Calculations
|
||||||
Expand aggregate values in a column to separate rows.
|
Expand aggregate values in a column to separate rows.
|
||||||
|
|
||||||
For each value in the specified column, if it is an aggregate (`Vector`,
|
For each value in the specified column, if it is an aggregate (`Vector`,
|
||||||
@ -2190,7 +2191,8 @@ type Table
|
|||||||
new_column = column_to_cast.cast value_type on_problems
|
new_column = column_to_cast.cast value_type on_problems
|
||||||
table.set new_column new_name=column_to_cast.name set_mode=Set_Mode.Update
|
table.set new_column new_name=column_to_cast.name set_mode=Set_Mode.Update
|
||||||
|
|
||||||
## Change the value type of table columns to a more specific one, based on
|
## GROUP Standard.Base.Conversions
|
||||||
|
Change the value type of table columns to a more specific one, based on
|
||||||
their contents.
|
their contents.
|
||||||
|
|
||||||
This operation is currently not available in the Database backend.
|
This operation is currently not available in the Database backend.
|
||||||
@ -2204,15 +2206,15 @@ type Table
|
|||||||
Remove rows which are all blank or containing blank values.
|
Remove rows which are all blank or containing blank values.
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
- when: If Blank_Selector.Any_Cell_Blank, then remove any row containing
|
- when: If Blank_Selector.Any_Cell, then remove any row containing
|
||||||
any blank values.
|
any blank values.
|
||||||
If Blank_Selector.All_Cells_Blank, then only remove rows with all blank values.
|
If Blank_Selector.All_Cells, then only remove rows with all blank values.
|
||||||
- treat_nans_as_blank: If `True`, then `Number.nan` is considered as blank.
|
- treat_nans_as_blank: If `True`, then `Number.nan` is considered as blank.
|
||||||
|
|
||||||
? Blank values
|
? Blank values
|
||||||
Blank values are `Nothing`, `""` and depending on setting `Number.nan`.
|
Blank values are `Nothing`, `""` and depending on setting `Number.nan`.
|
||||||
filter_blank_rows : Blank_Selector -> Boolean -> Table
|
filter_blank_rows : Blank_Selector -> Boolean -> Table
|
||||||
filter_blank_rows self (when:Blank_Selector = Blank_Selector.All_Cells_Blank) treat_nans_as_blank=False =
|
filter_blank_rows self (when:Blank_Selector = Blank_Selector.All_Cells) treat_nans_as_blank=False =
|
||||||
Table_Helpers.filter_blank_rows self when treat_nans_as_blank
|
Table_Helpers.filter_blank_rows self when treat_nans_as_blank
|
||||||
|
|
||||||
## ALIAS count
|
## ALIAS count
|
||||||
|
@ -716,6 +716,7 @@ make_date_diff arguments (metadata : Date_Period_Metadata) =
|
|||||||
as_int64 <|
|
as_int64 <|
|
||||||
((extract_seconds ++ " * 1000000").paren ++ " + " ++ (micros ++ " % 1000000").paren).paren
|
((extract_seconds ++ " * 1000000").paren ++ " + " ++ (micros ++ " % 1000000").paren).paren
|
||||||
|
|
||||||
|
## PRIVATE
|
||||||
make_date_trunc_to_day arguments =
|
make_date_trunc_to_day arguments =
|
||||||
if arguments.length != 1 then Error.throw (Illegal_State.Error "date_trunc_to_day expects exactly one sub expression. This is a bug in Database library.") else
|
if arguments.length != 1 then Error.throw (Illegal_State.Error "date_trunc_to_day expects exactly one sub expression. This is a bug in Database library.") else
|
||||||
expr = arguments.at 0
|
expr = arguments.at 0
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
from Standard.Base import all
|
from Standard.Base import all
|
||||||
|
|
||||||
from project.Errors import SQL_Error, Invariant_Violation
|
from project.Errors import Invariant_Violation, SQL_Error
|
||||||
|
|
||||||
## PRIVATE
|
## PRIVATE
|
||||||
type Postgres_Error_Mapper
|
type Postgres_Error_Mapper
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
from Standard.Base import all
|
from Standard.Base import all
|
||||||
|
|
||||||
from project.Errors import SQL_Error, Invariant_Violation
|
from project.Errors import Invariant_Violation, SQL_Error
|
||||||
|
|
||||||
polyglot java import org.sqlite.SQLiteErrorCode
|
polyglot java import org.sqlite.SQLiteErrorCode
|
||||||
polyglot java import org.sqlite.SQLiteException
|
polyglot java import org.sqlite.SQLiteException
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
from Standard.Base import all
|
from Standard.Base import all
|
||||||
from Standard.Base.Runtime import assert
|
|
||||||
import Standard.Base.Errors.Common.Dry_Run_Operation
|
import Standard.Base.Errors.Common.Dry_Run_Operation
|
||||||
import Standard.Base.Errors.Common.Forbidden_Operation
|
import Standard.Base.Errors.Common.Forbidden_Operation
|
||||||
import Standard.Base.Errors.Illegal_Argument.Illegal_Argument
|
import Standard.Base.Errors.Illegal_Argument.Illegal_Argument
|
||||||
import Standard.Base.Errors.Illegal_State.Illegal_State
|
import Standard.Base.Errors.Illegal_State.Illegal_State
|
||||||
import Standard.Base.Runtime.Context
|
import Standard.Base.Runtime.Context
|
||||||
|
from Standard.Base.Runtime import assert
|
||||||
|
|
||||||
import Standard.Table.Data.Table.Table as In_Memory_Table
|
import Standard.Table.Data.Table.Table as In_Memory_Table
|
||||||
import Standard.Table.Internal.Problem_Builder.Problem_Builder
|
import Standard.Table.Internal.Problem_Builder.Problem_Builder
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
## TODO Documents
|
## Specifies the condition for selecting blank cells.
|
||||||
type Blank_Selector
|
type Blank_Selector
|
||||||
## Blank_Selector is used as a constructor for other functions.
|
## Select when any cell is blank or Nothing.
|
||||||
Any_Cell_Blank
|
Any_Cell
|
||||||
|
|
||||||
All_Cells_Blank
|
## Select when all the cells are blank or Nothing.
|
||||||
|
All_Cells
|
||||||
|
@ -122,7 +122,7 @@ type Column_Operation
|
|||||||
|
|
||||||
## PRIVATE
|
## PRIVATE
|
||||||
Create a widget for operation
|
Create a widget for operation
|
||||||
default_widget : Table_Ref -> Widget
|
default_widget : Table_Ref -> Display -> Widget
|
||||||
default_widget table:Table_Ref display=Display.Always =
|
default_widget table:Table_Ref display=Display.Always =
|
||||||
col_refs = Widget_Helpers.make_column_ref_by_name_selector table
|
col_refs = Widget_Helpers.make_column_ref_by_name_selector table
|
||||||
filter_cond = Widget_Helpers.make_filter_condition_selector table
|
filter_cond = Widget_Helpers.make_filter_condition_selector table
|
||||||
|
@ -1485,7 +1485,7 @@ type Column
|
|||||||
unusual events like DST.
|
unusual events like DST.
|
||||||
@period Date_Time_Helpers.make_period_selector_for_column
|
@period Date_Time_Helpers.make_period_selector_for_column
|
||||||
date_add : (Column | Integer) -> Date_Period | Time_Period -> Column ! Invalid_Value_Type | Illegal_Argument
|
date_add : (Column | Integer) -> Date_Period | Time_Period -> Column ! Invalid_Value_Type | Illegal_Argument
|
||||||
date_add self amount (period : Date_Period|Time_Period = default_date_period self) =
|
date_add self amount (period : Date_Period | Time_Period = default_date_period self) =
|
||||||
Value_Type.expect_type self .is_date_or_time "date/time" <|
|
Value_Type.expect_type self .is_date_or_time "date/time" <|
|
||||||
my_type = self.inferred_precise_value_type
|
my_type = self.inferred_precise_value_type
|
||||||
Value_Type.expect_integer amount <|
|
Value_Type.expect_integer amount <|
|
||||||
@ -1774,7 +1774,8 @@ type Column
|
|||||||
new_storage = self.java_column.getStorage.cast target_storage_type cast_problem_builder
|
new_storage = self.java_column.getStorage.cast target_storage_type cast_problem_builder
|
||||||
Column.from_storage self.name new_storage
|
Column.from_storage self.name new_storage
|
||||||
|
|
||||||
## Change the value type of the column to a more specific one, based on its
|
## GROUP Standard.Base.Conversions
|
||||||
|
Change the value type of the column to a more specific one, based on its
|
||||||
contents.
|
contents.
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
@ -1845,7 +1846,7 @@ type Column
|
|||||||
new_st = self.to_vector.map new_fn
|
new_st = self.to_vector.map new_fn
|
||||||
Column.from_vector self.name new_st value_type=expected_value_type
|
Column.from_vector self.name new_st value_type=expected_value_type
|
||||||
|
|
||||||
## ALIAS combine, merge, join by row position
|
## ALIAS combine, join by row position, merge
|
||||||
|
|
||||||
Applies `function` to consecutive pairs of elements of `self` and `that`
|
Applies `function` to consecutive pairs of elements of `self` and `that`
|
||||||
and returns a column of results.
|
and returns a column of results.
|
||||||
@ -1989,7 +1990,7 @@ type Column
|
|||||||
- warn_if_more_rows: if set to `True`, a warning is attached to the
|
- warn_if_more_rows: if set to `True`, a warning is attached to the
|
||||||
result if the number of rows returned by the query exceeds `max_rows`.
|
result if the number of rows returned by the query exceeds `max_rows`.
|
||||||
read : (Nothing | Integer) -> Boolean -> Column
|
read : (Nothing | Integer) -> Boolean -> Column
|
||||||
read self (max_rows : Integer | Nothing = Nothing) (warn_if_more_rows:Boolean = True) =
|
read self (max_rows : Nothing | Integer = Nothing) (warn_if_more_rows:Boolean = True) =
|
||||||
if max_rows.is_nothing then self else
|
if max_rows.is_nothing then self else
|
||||||
self.to_table.read max_rows warn_if_more_rows . at 0
|
self.to_table.read max_rows warn_if_more_rows . at 0
|
||||||
|
|
||||||
@ -2121,7 +2122,7 @@ type Column
|
|||||||
sorted = self.to_vector.sort order by=wrapped
|
sorted = self.to_vector.sort order by=wrapped
|
||||||
Column.from_vector self.name sorted
|
Column.from_vector self.name sorted
|
||||||
|
|
||||||
## ALIAS first, last, slice, sample
|
## ALIAS first, last, sample, slice
|
||||||
GROUP Standard.Base.Selections
|
GROUP Standard.Base.Selections
|
||||||
Creates a new Column with the specified range of rows from the input
|
Creates a new Column with the specified range of rows from the input
|
||||||
Column.
|
Column.
|
||||||
|
@ -414,7 +414,7 @@ type Table
|
|||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
- when: By default, only columns consisting of all blank cells are
|
- when: By default, only columns consisting of all blank cells are
|
||||||
selected. If set to Blank_Selector.Any_Cell_Blank, columns with one or
|
selected. If set to Blank_Selector.Any_Cell, columns with one or
|
||||||
more blank values are selected.
|
more blank values are selected.
|
||||||
- treat_nans_as_blank: specifies whether `Number.nan` is considered as
|
- treat_nans_as_blank: specifies whether `Number.nan` is considered as
|
||||||
blank. By default, it is not.
|
blank. By default, it is not.
|
||||||
@ -427,7 +427,7 @@ type Table
|
|||||||
|
|
||||||
table.select_blank_columns
|
table.select_blank_columns
|
||||||
select_blank_columns : Blank_Selector -> Boolean -> Table ! No_Output_Columns
|
select_blank_columns : Blank_Selector -> Boolean -> Table ! No_Output_Columns
|
||||||
select_blank_columns self (when:Blank_Selector = Blank_Selector.All_Cells_Blank) (treat_nans_as_blank : Boolean = False) =
|
select_blank_columns self (when:Blank_Selector = Blank_Selector.All_Cells) (treat_nans_as_blank : Boolean = False) =
|
||||||
new_columns = self.columns_helper.select_blank_columns_helper when treat_nans_as_blank
|
new_columns = self.columns_helper.select_blank_columns_helper when treat_nans_as_blank
|
||||||
if new_columns.length == 0 then Error.throw (No_Output_Columns) else
|
if new_columns.length == 0 then Error.throw (No_Output_Columns) else
|
||||||
Table.new new_columns
|
Table.new new_columns
|
||||||
@ -440,7 +440,7 @@ type Table
|
|||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
- when By default, only columns consisting of all blank cells are
|
- when By default, only columns consisting of all blank cells are
|
||||||
selected. If set to Blank_Selector.Any_Cell_Blank, columns with one or more blank values are
|
selected. If set to Blank_Selector.Any_Cell, columns with one or more blank values are
|
||||||
selected.
|
selected.
|
||||||
- treat_nans_as_blank: specified whether `Number.nan` is considered as
|
- treat_nans_as_blank: specified whether `Number.nan` is considered as
|
||||||
blank. By default, it is not.
|
blank. By default, it is not.
|
||||||
@ -453,7 +453,7 @@ type Table
|
|||||||
|
|
||||||
table.remove_blank_columns
|
table.remove_blank_columns
|
||||||
remove_blank_columns : Blank_Selector -> Boolean -> Table ! No_Output_Columns
|
remove_blank_columns : Blank_Selector -> Boolean -> Table ! No_Output_Columns
|
||||||
remove_blank_columns self (when:Blank_Selector = Blank_Selector.All_Cells_Blank) (treat_nans_as_blank : Boolean = False) =
|
remove_blank_columns self (when:Blank_Selector = Blank_Selector.All_Cells) (treat_nans_as_blank : Boolean = False) =
|
||||||
new_columns = self.columns_helper.select_blank_columns_helper when treat_nans_as_blank invert_selection=True
|
new_columns = self.columns_helper.select_blank_columns_helper when treat_nans_as_blank invert_selection=True
|
||||||
if new_columns.length == 0 then Error.throw (No_Output_Columns) else
|
if new_columns.length == 0 then Error.throw (No_Output_Columns) else
|
||||||
Table.new new_columns
|
Table.new new_columns
|
||||||
@ -1116,7 +1116,8 @@ type Table
|
|||||||
new_column = column_to_cast.cast value_type on_problems
|
new_column = column_to_cast.cast value_type on_problems
|
||||||
table.set new_column new_name=column_to_cast.name set_mode=Set_Mode.Update
|
table.set new_column new_name=column_to_cast.name set_mode=Set_Mode.Update
|
||||||
|
|
||||||
## Change the value type of table columns to a more specific one, based on
|
## GROUP Standard.Base.Conversions
|
||||||
|
Change the value type of table columns to a more specific one, based on
|
||||||
their contents.
|
their contents.
|
||||||
|
|
||||||
This is most useful for `Mixed` type columns and will allow to narrow
|
This is most useful for `Mixed` type columns and will allow to narrow
|
||||||
@ -1271,7 +1272,7 @@ type Table
|
|||||||
parse_to_columns self column pattern="." case_sensitivity=Case_Sensitivity.Sensitive parse_values=True on_problems=Report_Error =
|
parse_to_columns self column pattern="." case_sensitivity=Case_Sensitivity.Sensitive parse_values=True on_problems=Report_Error =
|
||||||
Split_Tokenize.parse_to_columns self column pattern case_sensitivity parse_values on_problems
|
Split_Tokenize.parse_to_columns self column pattern case_sensitivity parse_values on_problems
|
||||||
|
|
||||||
## GROUP Standard.Base.Conversions
|
## GROUP Standard.Base.Calculations
|
||||||
Expand a column of objects to a new set of columns.
|
Expand a column of objects to a new set of columns.
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
@ -1284,7 +1285,7 @@ type Table
|
|||||||
expand_column self (column : Text | Integer) (fields : (Vector Text) | Nothing = Nothing) (prefix : Prefix_Name = Prefix_Name.Column_Name) =
|
expand_column self (column : Text | Integer) (fields : (Vector Text) | Nothing = Nothing) (prefix : Prefix_Name = Prefix_Name.Column_Name) =
|
||||||
Expand_Objects_Helpers.expand_column self column fields prefix
|
Expand_Objects_Helpers.expand_column self column fields prefix
|
||||||
|
|
||||||
## GROUP Standard.Base.Conversions
|
## GROUP Standard.Base.Calculations
|
||||||
Expand aggregate values in a column to separate rows.
|
Expand aggregate values in a column to separate rows.
|
||||||
|
|
||||||
For each value in the specified column, if it is an aggregate (`Vector`,
|
For each value in the specified column, if it is an aggregate (`Vector`,
|
||||||
@ -1370,8 +1371,8 @@ type Table
|
|||||||
people.filter "age" (age -> (age%10 == 0))
|
people.filter "age" (age -> (age%10 == 0))
|
||||||
@column Widget_Helpers.make_column_name_selector
|
@column Widget_Helpers.make_column_name_selector
|
||||||
@filter Widget_Helpers.make_filter_condition_selector
|
@filter Widget_Helpers.make_filter_condition_selector
|
||||||
filter : (Column | Text | Integer) -> (Filter_Condition|(Any->Boolean)) -> Problem_Behavior -> Table ! No_Such_Column | Index_Out_Of_Bounds | Invalid_Value_Type
|
filter : (Column | Text | Integer) -> (Filter_Condition | (Any -> Boolean)) -> Problem_Behavior -> Table ! No_Such_Column | Index_Out_Of_Bounds | Invalid_Value_Type
|
||||||
filter self column (filter : Filter_Condition | Function = Filter_Condition.Equal True) on_problems=Report_Warning = case column of
|
filter self column (filter : Filter_Condition | (Any -> Boolean) = Filter_Condition.Equal True) on_problems=Report_Warning = case column of
|
||||||
_ : Column ->
|
_ : Column ->
|
||||||
mask filter_column = Table.Value (self.java_table.mask filter_column.java_column)
|
mask filter_column = Table.Value (self.java_table.mask filter_column.java_column)
|
||||||
case filter of
|
case filter of
|
||||||
@ -1567,7 +1568,7 @@ type Table
|
|||||||
table.set double_inventory new_name="total_stock"
|
table.set double_inventory new_name="total_stock"
|
||||||
table.set "2 * [total_stock]" new_name="total_stock_expr"
|
table.set "2 * [total_stock]" new_name="total_stock_expr"
|
||||||
@column Column_Operation.default_widget
|
@column Column_Operation.default_widget
|
||||||
set : Text | Column -> Text -> Set_Mode -> Problem_Behavior -> Table ! Existing_Column | Missing_Column | No_Such_Column | Expression_Error
|
set : Text | Column | Constant_Column | Column_Operation -> Text -> Set_Mode -> Problem_Behavior -> Table ! Existing_Column | Missing_Column | No_Such_Column | Expression_Error
|
||||||
set self column:(Text | Column | Constant_Column | Column_Operation) (new_name : Text = "") (set_mode : Set_Mode = Set_Mode.Add_Or_Update) (on_problems : Problem_Behavior = Report_Warning) =
|
set self column:(Text | Column | Constant_Column | Column_Operation) (new_name : Text = "") (set_mode : Set_Mode = Set_Mode.Add_Or_Update) (on_problems : Problem_Behavior = Report_Warning) =
|
||||||
problem_builder = Problem_Builder.new
|
problem_builder = Problem_Builder.new
|
||||||
unique = self.column_naming_helper.create_unique_name_strategy
|
unique = self.column_naming_helper.create_unique_name_strategy
|
||||||
@ -1839,7 +1840,8 @@ type Table
|
|||||||
self.java_table.crossJoin right.java_table right_prefix java_aggregator
|
self.java_table.crossJoin right.java_table right_prefix java_aggregator
|
||||||
Table.Value new_java_table
|
Table.Value new_java_table
|
||||||
|
|
||||||
## Replaces values in this table by values from a lookup table.
|
## GROUP Standard.Base.Calculations
|
||||||
|
Replaces values in this table by values from a lookup table.
|
||||||
New values are looked up in the lookup table based on the `key_columns`.
|
New values are looked up in the lookup table based on the `key_columns`.
|
||||||
Columns found in the lookup table values are replaced by values from the
|
Columns found in the lookup table values are replaced by values from the
|
||||||
lookup. Columns not found are left unchanged.
|
lookup. Columns not found are left unchanged.
|
||||||
@ -2082,7 +2084,7 @@ type Table
|
|||||||
retyped to the `Mixed` type to indicate that intention. Note that the
|
retyped to the `Mixed` type to indicate that intention. Note that the
|
||||||
`Mixed` type may not be supported by most Database backends.
|
`Mixed` type may not be supported by most Database backends.
|
||||||
union : (Table | Vector Table) -> Match_Columns -> Boolean | Report_Unmatched -> Boolean -> Problem_Behavior -> Table
|
union : (Table | Vector Table) -> Match_Columns -> Boolean | Report_Unmatched -> Boolean -> Problem_Behavior -> Table
|
||||||
union self tables:Vector|Table match_columns=Match_Columns.By_Name keep_unmatched_columns=Report_Unmatched allow_type_widening=True on_problems=Report_Warning =
|
union self tables:(Table | Vector) match_columns=Match_Columns.By_Name keep_unmatched_columns=Report_Unmatched allow_type_widening=True on_problems=Report_Warning =
|
||||||
all_tables = case tables of
|
all_tables = case tables of
|
||||||
v : Vector -> [self] + (v.map t-> Table.from t)
|
v : Vector -> [self] + (v.map t-> Table.from t)
|
||||||
single_table -> [self, single_table]
|
single_table -> [self, single_table]
|
||||||
@ -2105,15 +2107,15 @@ type Table
|
|||||||
Remove rows which are all blank or containing blank values.
|
Remove rows which are all blank or containing blank values.
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
- when: If Blank_Selector.Any_Cell_Blank, then remove any row containing
|
- when: If Blank_Selector.Any_Cell, then remove any row containing
|
||||||
any blank values.
|
any blank values.
|
||||||
If Blank_Selector.All_Cells_Blank, then only remove rows with all blank values.
|
If Blank_Selector.All_Cells, then only remove rows with all blank values.
|
||||||
- treat_nans_as_blank: If `True`, then `Number.nan` is considered as blank.
|
- treat_nans_as_blank: If `True`, then `Number.nan` is considered as blank.
|
||||||
|
|
||||||
? Blank values
|
? Blank values
|
||||||
Blank values are `Nothing`, `""` and depending on setting `Number.nan`.
|
Blank values are `Nothing`, `""` and depending on setting `Number.nan`.
|
||||||
filter_blank_rows : Blank_Selector -> Boolean -> Table
|
filter_blank_rows : Blank_Selector -> Boolean -> Table
|
||||||
filter_blank_rows self when=Blank_Selector.Any_Cell_Blank treat_nans_as_blank=False =
|
filter_blank_rows self when=Blank_Selector.Any_Cell treat_nans_as_blank=False =
|
||||||
Table_Helpers.filter_blank_rows self when treat_nans_as_blank
|
Table_Helpers.filter_blank_rows self when treat_nans_as_blank
|
||||||
|
|
||||||
## ALIAS count
|
## ALIAS count
|
||||||
|
@ -209,5 +209,5 @@ type Excel_Workbook
|
|||||||
- name: the name of the worksheet to read.
|
- name: the name of the worksheet to read.
|
||||||
@name (self-> Single_Choice display=Display.Always values=(self.sheet_names.map t-> Option t t.pretty))
|
@name (self-> Single_Choice display=Display.Always values=(self.sheet_names.map t-> Option t t.pretty))
|
||||||
sheet : Text | Integer -> Table
|
sheet : Text | Integer -> Table
|
||||||
sheet self name:(Text|Integer) =
|
sheet self name:(Text | Integer) =
|
||||||
self.read_section (Excel_Section.Worksheet name 0 Nothing)
|
self.read_section (Excel_Section.Worksheet name 0 Nothing)
|
||||||
|
@ -6,7 +6,7 @@ import project.Data.Column_Ref.Column_Ref
|
|||||||
import project.Data.Expression.Expression_Error
|
import project.Data.Expression.Expression_Error
|
||||||
import project.Data.Set_Mode.Set_Mode
|
import project.Data.Set_Mode.Set_Mode
|
||||||
import project.Data.Table.Table
|
import project.Data.Table.Table
|
||||||
from project.Errors import No_Such_Column, Existing_Column, Missing_Column
|
from project.Errors import Existing_Column, Missing_Column, No_Such_Column
|
||||||
|
|
||||||
## PRIVATE
|
## PRIVATE
|
||||||
A helper type allowing to resolve column references in a context of an underlying table.
|
A helper type allowing to resolve column references in a context of an underlying table.
|
||||||
@ -62,8 +62,8 @@ type Table_Ref
|
|||||||
|
|
||||||
## PRIVATE
|
## PRIVATE
|
||||||
Set a column.
|
Set a column.
|
||||||
set : Any -> Set_Mode -> Problem_Behavior -> Table_Ref ! Existing_Column | Missing_Column | No_Such_Column | Expression_Error
|
set : Any -> Text -> Set_Mode -> Problem_Behavior -> Table_Ref ! Existing_Column | Missing_Column | No_Such_Column | Expression_Error
|
||||||
set self column new_name set_mode=Set_Mode.Add_Or_Update on_problems=Report_Warning =
|
set self column new_name:Text set_mode:Set_Mode=Set_Mode.Add_Or_Update on_problems:Problem_Behavior=Report_Warning =
|
||||||
new_underlying = self.underlying.set column new_name set_mode=set_mode on_problems=on_problems
|
new_underlying = self.underlying.set column new_name set_mode=set_mode on_problems=on_problems
|
||||||
Table_Ref.from new_underlying
|
Table_Ref.from new_underlying
|
||||||
|
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
from Standard.Base import all
|
from Standard.Base import all
|
||||||
|
|
||||||
## PRIVATE
|
## PRIVATE
|
||||||
|
Internal class to represent a constant value as a column.
|
||||||
type Constant_Column
|
type Constant_Column
|
||||||
|
## PRIVATE
|
||||||
Value value:Any
|
Value value:Any
|
||||||
|
|
||||||
## PRIVATE
|
## PRIVATE
|
||||||
|
@ -83,7 +83,7 @@ expand_to_rows table column at_least_one_row=False =
|
|||||||
Fan_Out.fan_out_to_rows table column row_expander at_least_one_row column_builder=builder
|
Fan_Out.fan_out_to_rows table column row_expander at_least_one_row column_builder=builder
|
||||||
|
|
||||||
## PRIVATE
|
## PRIVATE
|
||||||
create_table_from_objects : Any -> ((Vector Text) | Nothing) -> Table
|
create_table_from_objects : Convertible_To_Rows -> (Vector Text | Nothing) -> Table
|
||||||
create_table_from_objects (value : Convertible_To_Rows) (fields : Vector | Nothing) = if fields.is_nothing.not && fields.is_empty then Error.throw (Illegal_Argument.Error "The fields parameter cannot be empty.") else
|
create_table_from_objects (value : Convertible_To_Rows) (fields : Vector | Nothing) = if fields.is_nothing.not && fields.is_empty then Error.throw (Illegal_Argument.Error "The fields parameter cannot be empty.") else
|
||||||
len = value.length
|
len = value.length
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ make_double_builder initial_size java_problem_aggregator=(Missing_Required_Argum
|
|||||||
NumericBuilder.createDoubleBuilder initial_size java_problem_aggregator
|
NumericBuilder.createDoubleBuilder initial_size java_problem_aggregator
|
||||||
|
|
||||||
## PRIVATE
|
## PRIVATE
|
||||||
make_long_builder : Integer -> Bits -> NumericBuilder
|
make_long_builder : Integer -> Bits -> ProblemAggregator -> NumericBuilder
|
||||||
make_long_builder initial_size bits java_problem_aggregator=(Missing_Required_Argument.ensure_present "java_problem_aggregator") =
|
make_long_builder initial_size bits java_problem_aggregator=(Missing_Required_Argument.ensure_present "java_problem_aggregator") =
|
||||||
integer_type = Storage.from_value_type_strict (Value_Type.Integer bits)
|
integer_type = Storage.from_value_type_strict (Value_Type.Integer bits)
|
||||||
NumericBuilder.createLongBuilder initial_size integer_type java_problem_aggregator
|
NumericBuilder.createLongBuilder initial_size integer_type java_problem_aggregator
|
||||||
|
@ -4,7 +4,7 @@ import Standard.Base.Errors.Illegal_Argument.Illegal_Argument
|
|||||||
import project.Data.Type.Storage
|
import project.Data.Type.Storage
|
||||||
import project.Data.Type.Value_Type.Value_Type
|
import project.Data.Type.Value_Type.Value_Type
|
||||||
import project.Data.Type.Value_Type_Helpers
|
import project.Data.Type.Value_Type_Helpers
|
||||||
from project.Errors import Missing_Input_Columns, Unexpected_Extra_Columns, Floating_Point_Equality, No_Common_Type, No_Output_Columns
|
from project.Errors import Floating_Point_Equality, Missing_Input_Columns, No_Common_Type, No_Output_Columns, Unexpected_Extra_Columns
|
||||||
|
|
||||||
polyglot java import org.enso.table.data.table.join.lookup.LookupColumnDescription
|
polyglot java import org.enso.table.data.table.join.lookup.LookupColumnDescription
|
||||||
|
|
||||||
|
@ -199,13 +199,13 @@ type Table_Column_Helper
|
|||||||
Arguments:
|
Arguments:
|
||||||
-TODO docs
|
-TODO docs
|
||||||
- when: By default, only columns consisting of all blank cells are
|
- when: By default, only columns consisting of all blank cells are
|
||||||
selected. If set to Blank_Selector.Any_Cell_Blank, columns with one or more blank values are
|
selected. If set to Blank_Selector.Any_Cell, columns with one or more blank values are
|
||||||
selected.
|
selected.
|
||||||
- treat_nans_as_blank: If `True`, then `Number.nan` is considered as
|
- treat_nans_as_blank: If `True`, then `Number.nan` is considered as
|
||||||
blank.
|
blank.
|
||||||
- invert_selection: If `True`, then the selection is inverted.
|
- invert_selection: If `True`, then the selection is inverted.
|
||||||
select_blank_columns_helper : Blank_Selector -> Boolean -> Boolean -> Vector
|
select_blank_columns_helper : Blank_Selector -> Boolean -> Boolean -> Vector
|
||||||
select_blank_columns_helper self (when:Blank_Selector = Blank_Selector.All_Cells_Blank) treat_nans_as_blank:Boolean invert_selection:Boolean=False =
|
select_blank_columns_helper self (when:Blank_Selector = Blank_Selector.All_Cells) treat_nans_as_blank:Boolean invert_selection:Boolean=False =
|
||||||
blanks = self.internal_columns.map_with_index ix-> internal_column->
|
blanks = self.internal_columns.map_with_index ix-> internal_column->
|
||||||
column = self.make_column internal_column
|
column = self.make_column internal_column
|
||||||
blank_indicator = column.is_blank treat_nans_as_blank
|
blank_indicator = column.is_blank treat_nans_as_blank
|
||||||
@ -225,8 +225,8 @@ type Table_Column_Helper
|
|||||||
|
|
||||||
# Maximum is equivalent to Exists and Minimum is equivalent to Forall.
|
# Maximum is equivalent to Exists and Minimum is equivalent to Forall.
|
||||||
col_aggregate = case when of
|
col_aggregate = case when of
|
||||||
Blank_Selector.Any_Cell_Blank -> Aggregate_Column.Maximum _
|
Blank_Selector.Any_Cell -> Aggregate_Column.Maximum _
|
||||||
Blank_Selector.All_Cells_Blank -> Aggregate_Column.Minimum _
|
Blank_Selector.All_Cells -> Aggregate_Column.Minimum _
|
||||||
aggregates = blanks.map blanks_col-> col_aggregate blanks_col.name
|
aggregates = blanks.map blanks_col-> col_aggregate blanks_col.name
|
||||||
|
|
||||||
aggregate_result = just_indicators.aggregate aggregates on_problems=Problem_Behavior.Report_Error
|
aggregate_result = just_indicators.aggregate aggregates on_problems=Problem_Behavior.Report_Error
|
||||||
@ -450,8 +450,8 @@ filter_blank_rows table when treat_nans_as_blank =
|
|||||||
case cols.not_empty of
|
case cols.not_empty of
|
||||||
True ->
|
True ->
|
||||||
merge = case when of
|
merge = case when of
|
||||||
Blank_Selector.Any_Cell_Blank -> (||)
|
Blank_Selector.Any_Cell -> (||)
|
||||||
Blank_Selector.All_Cells_Blank -> (&&)
|
Blank_Selector.All_Cells -> (&&)
|
||||||
missing_mask = cols.map (_.is_blank treat_nans_as_blank) . reduce merge
|
missing_mask = cols.map (_.is_blank treat_nans_as_blank) . reduce merge
|
||||||
non_missing_mask = missing_mask.not
|
non_missing_mask = missing_mask.not
|
||||||
table.filter non_missing_mask Filter_Condition.Is_True
|
table.filter non_missing_mask Filter_Condition.Is_True
|
||||||
|
@ -29,14 +29,14 @@ spec setup =
|
|||||||
table_builder [a, b, c, d, e, f]
|
table_builder [a, b, c, d, e, f]
|
||||||
|
|
||||||
Test.specify "filter_blank_rows should drop rows that contain at least one missing cell" <|
|
Test.specify "filter_blank_rows should drop rows that contain at least one missing cell" <|
|
||||||
d = t0.filter_blank_rows when=Blank_Selector.Any_Cell_Blank
|
d = t0.filter_blank_rows when=Blank_Selector.Any_Cell
|
||||||
d.row_count . should_equal 1
|
d.row_count . should_equal 1
|
||||||
d.at "a" . to_vector . should_equal [5]
|
d.at "a" . to_vector . should_equal [5]
|
||||||
d.at "b" . to_vector . should_equal [False]
|
d.at "b" . to_vector . should_equal [False]
|
||||||
d.at "c" . to_vector . should_equal [" "]
|
d.at "c" . to_vector . should_equal [" "]
|
||||||
|
|
||||||
Test.specify "filter_blank_rows should drop rows that are all blank" <|
|
Test.specify "filter_blank_rows should drop rows that are all blank" <|
|
||||||
d2 = t0.filter_blank_rows when=Blank_Selector.All_Cells_Blank
|
d2 = t0.filter_blank_rows when=Blank_Selector.All_Cells
|
||||||
d2.at "a" . to_vector . should_equal [0, 1, Nothing, 42, 5]
|
d2.at "a" . to_vector . should_equal [0, 1, Nothing, 42, 5]
|
||||||
d2.at "b" . to_vector . should_equal [True, Nothing, True, False, False]
|
d2.at "b" . to_vector . should_equal [True, Nothing, True, False, False]
|
||||||
d2.at "c" . to_vector . should_equal ["", "foo", "bar", Nothing, " "]
|
d2.at "c" . to_vector . should_equal ["", "foo", "bar", Nothing, " "]
|
||||||
@ -49,12 +49,12 @@ spec setup =
|
|||||||
t1.row_count . should_equal 3
|
t1.row_count . should_equal 3
|
||||||
t1.at "X" . to_vector . should_equal [Nothing, Nothing, Nothing]
|
t1.at "X" . to_vector . should_equal [Nothing, Nothing, Nothing]
|
||||||
|
|
||||||
t2 = t1.filter_blank_rows when=Blank_Selector.Any_Cell_Blank
|
t2 = t1.filter_blank_rows when=Blank_Selector.Any_Cell
|
||||||
t2.row_count . should_equal 0
|
t2.row_count . should_equal 0
|
||||||
t2.at "X" . to_vector . should_equal []
|
t2.at "X" . to_vector . should_equal []
|
||||||
|
|
||||||
t3 = table_builder [["X", ["", "", Nothing]]]
|
t3 = table_builder [["X", ["", "", Nothing]]]
|
||||||
t4 = t3.filter_blank_rows when=Blank_Selector.All_Cells_Blank
|
t4 = t3.filter_blank_rows when=Blank_Selector.All_Cells
|
||||||
t4.row_count . should_equal 0
|
t4.row_count . should_equal 0
|
||||||
t4.at "X" . to_vector . should_equal []
|
t4.at "X" . to_vector . should_equal []
|
||||||
|
|
||||||
@ -72,7 +72,7 @@ spec setup =
|
|||||||
r1.columns.map .name . should_equal ["f"]
|
r1.columns.map .name . should_equal ["f"]
|
||||||
r1.at "f" . to_vector . should_equal [Nothing, "", Nothing, ""]
|
r1.at "f" . to_vector . should_equal [Nothing, "", Nothing, ""]
|
||||||
|
|
||||||
r2 = t1.select_blank_columns when=Blank_Selector.Any_Cell_Blank
|
r2 = t1.select_blank_columns when=Blank_Selector.Any_Cell
|
||||||
r2.columns.map .name . should_equal ["a", "b", "d", "e", "f"]
|
r2.columns.map .name . should_equal ["a", "b", "d", "e", "f"]
|
||||||
r2.at "d" . to_vector . should_equal [Nothing, True, False, True]
|
r2.at "d" . to_vector . should_equal [Nothing, True, False, True]
|
||||||
|
|
||||||
@ -81,7 +81,7 @@ spec setup =
|
|||||||
r1.columns.map .name . should_equal ["a", "b", "c", "d", "e"]
|
r1.columns.map .name . should_equal ["a", "b", "c", "d", "e"]
|
||||||
r1.at "a" . to_vector . should_equal [1, Nothing, 3, 4]
|
r1.at "a" . to_vector . should_equal [1, Nothing, 3, 4]
|
||||||
|
|
||||||
r2 = t1.remove_blank_columns when=Blank_Selector.Any_Cell_Blank
|
r2 = t1.remove_blank_columns when=Blank_Selector.Any_Cell
|
||||||
r2.columns.map .name . should_equal ["c"]
|
r2.columns.map .name . should_equal ["c"]
|
||||||
r2.at "c" . to_vector . should_equal [10, 20, 30, 40]
|
r2.at "c" . to_vector . should_equal [10, 20, 30, 40]
|
||||||
|
|
||||||
@ -93,12 +93,12 @@ spec setup =
|
|||||||
table_builder [c, g, h]
|
table_builder [c, g, h]
|
||||||
if test_selection.is_nan_and_nothing_distinct then
|
if test_selection.is_nan_and_nothing_distinct then
|
||||||
Test.specify "should not treat NaNs as blank by default" <|
|
Test.specify "should not treat NaNs as blank by default" <|
|
||||||
r1 = t3.filter_blank_rows when=Blank_Selector.Any_Cell_Blank
|
r1 = t3.filter_blank_rows when=Blank_Selector.Any_Cell
|
||||||
# We cannot use `Vector.==` because `NaN != NaN`.
|
# We cannot use `Vector.==` because `NaN != NaN`.
|
||||||
r1.at "X" . to_vector . to_text . should_equal "[1.5, NaN]"
|
r1.at "X" . to_vector . to_text . should_equal "[1.5, NaN]"
|
||||||
r1.at "Y" . to_vector . should_equal [2.0, 5.0]
|
r1.at "Y" . to_vector . should_equal [2.0, 5.0]
|
||||||
|
|
||||||
r2 = t3.filter_blank_rows when=Blank_Selector.All_Cells_Blank
|
r2 = t3.filter_blank_rows when=Blank_Selector.All_Cells
|
||||||
r2.at "X" . to_vector . to_text . should_equal "[2.0, 1.5, NaN, NaN]"
|
r2.at "X" . to_vector . to_text . should_equal "[2.0, 1.5, NaN, NaN]"
|
||||||
r2.at "Y" . to_vector . should_equal [Nothing, 2.0, Nothing, 5.0]
|
r2.at "Y" . to_vector . should_equal [Nothing, 2.0, Nothing, 5.0]
|
||||||
|
|
||||||
@ -106,37 +106,37 @@ spec setup =
|
|||||||
r3.columns.map .name . should_equal ["c", "g", "h"]
|
r3.columns.map .name . should_equal ["c", "g", "h"]
|
||||||
r3.at "g" . to_vector . to_text . should_equal "[NaN, 1.0, 2.0, 3.4]"
|
r3.at "g" . to_vector . to_text . should_equal "[NaN, 1.0, 2.0, 3.4]"
|
||||||
|
|
||||||
r4 = t4.remove_blank_columns when=Blank_Selector.Any_Cell_Blank
|
r4 = t4.remove_blank_columns when=Blank_Selector.Any_Cell
|
||||||
r4.columns.map .name . should_equal ["c", "g"]
|
r4.columns.map .name . should_equal ["c", "g"]
|
||||||
r4.at "g" . to_vector . to_text . should_equal "[NaN, 1.0, 2.0, 3.4]"
|
r4.at "g" . to_vector . to_text . should_equal "[NaN, 1.0, 2.0, 3.4]"
|
||||||
|
|
||||||
r5 = t4.select_blank_columns when=Blank_Selector.Any_Cell_Blank
|
r5 = t4.select_blank_columns when=Blank_Selector.Any_Cell
|
||||||
r5.columns.map .name . should_equal ["h"]
|
r5.columns.map .name . should_equal ["h"]
|
||||||
r5.at "h" . to_vector . to_text . should_equal "[NaN, Nothing, NaN, Nothing]"
|
r5.at "h" . to_vector . to_text . should_equal "[NaN, Nothing, NaN, Nothing]"
|
||||||
|
|
||||||
Test.specify "should allow to treat NaNs as blank if asked" <|
|
Test.specify "should allow to treat NaNs as blank if asked" <|
|
||||||
r1 = t3.filter_blank_rows when=Blank_Selector.Any_Cell_Blank treat_nans_as_blank=True
|
r1 = t3.filter_blank_rows when=Blank_Selector.Any_Cell treat_nans_as_blank=True
|
||||||
# We cannot use `Vector.==` because `NaN != NaN`.
|
# We cannot use `Vector.==` because `NaN != NaN`.
|
||||||
r1.at "X" . to_vector . should_equal [1.5]
|
r1.at "X" . to_vector . should_equal [1.5]
|
||||||
r1.at "Y" . to_vector . should_equal [2.0]
|
r1.at "Y" . to_vector . should_equal [2.0]
|
||||||
|
|
||||||
r2 = t3.filter_blank_rows when=Blank_Selector.All_Cells_Blank treat_nans_as_blank=True
|
r2 = t3.filter_blank_rows when=Blank_Selector.All_Cells treat_nans_as_blank=True
|
||||||
r2.at "X" . to_vector . to_text . should_equal "[2.0, 1.5, NaN]"
|
r2.at "X" . to_vector . to_text . should_equal "[2.0, 1.5, NaN]"
|
||||||
r2.at "Y" . to_vector . should_equal [Nothing, 2.0, 5.0]
|
r2.at "Y" . to_vector . should_equal [Nothing, 2.0, 5.0]
|
||||||
|
|
||||||
r3 = t4.remove_blank_columns when=Blank_Selector.All_Cells_Blank treat_nans_as_blank=True
|
r3 = t4.remove_blank_columns when=Blank_Selector.All_Cells treat_nans_as_blank=True
|
||||||
r3.columns.map .name . should_equal ["c", "g"]
|
r3.columns.map .name . should_equal ["c", "g"]
|
||||||
r3.at "g" . to_vector . to_text . should_equal "[NaN, 1.0, 2.0, 3.4]"
|
r3.at "g" . to_vector . to_text . should_equal "[NaN, 1.0, 2.0, 3.4]"
|
||||||
|
|
||||||
r4 = t4.select_blank_columns when=Blank_Selector.All_Cells_Blank treat_nans_as_blank=True
|
r4 = t4.select_blank_columns when=Blank_Selector.All_Cells treat_nans_as_blank=True
|
||||||
r4.columns.map .name . should_equal ["h"]
|
r4.columns.map .name . should_equal ["h"]
|
||||||
r4.at "h" . to_vector . to_text . should_equal "[NaN, Nothing, NaN, Nothing]"
|
r4.at "h" . to_vector . to_text . should_equal "[NaN, Nothing, NaN, Nothing]"
|
||||||
|
|
||||||
r5 = t4.remove_blank_columns when=Blank_Selector.Any_Cell_Blank treat_nans_as_blank=True
|
r5 = t4.remove_blank_columns when=Blank_Selector.Any_Cell treat_nans_as_blank=True
|
||||||
r5.columns.map .name . should_equal ["c"]
|
r5.columns.map .name . should_equal ["c"]
|
||||||
r5.at "c" . to_vector . should_equal [10, 20, 40, 30]
|
r5.at "c" . to_vector . should_equal [10, 20, 40, 30]
|
||||||
|
|
||||||
r6 = t4.select_blank_columns when=Blank_Selector.Any_Cell_Blank treat_nans_as_blank=True
|
r6 = t4.select_blank_columns when=Blank_Selector.Any_Cell treat_nans_as_blank=True
|
||||||
r6.columns.map .name . should_equal ["g", "h"]
|
r6.columns.map .name . should_equal ["g", "h"]
|
||||||
r6.at "h" . to_vector . to_text . should_equal "[NaN, Nothing, NaN, Nothing]"
|
r6.at "h" . to_vector . to_text . should_equal "[NaN, Nothing, NaN, Nothing]"
|
||||||
|
|
||||||
|
@ -81,10 +81,10 @@ spec =
|
|||||||
c.to_sql.prepare . should_equal ['SELECT CAST(COALESCE("T1"."B", ?) AS TEXT) AS "B" FROM "T1" AS "T1"', ["not-applicable"]]
|
c.to_sql.prepare . should_equal ['SELECT CAST(COALESCE("T1"."B", ?) AS TEXT) AS "B" FROM "T1" AS "T1"', ["not-applicable"]]
|
||||||
|
|
||||||
Test.specify "filter_blank_rows should drop rows that contain at least one missing column in a Table" <|
|
Test.specify "filter_blank_rows should drop rows that contain at least one missing column in a Table" <|
|
||||||
t2 = t1.filter_blank_rows when=Blank_Selector.Any_Cell_Blank
|
t2 = t1.filter_blank_rows when=Blank_Selector.Any_Cell
|
||||||
t2.to_sql.prepare . should_equal ['SELECT "T1"."A" AS "A", "T1"."B" AS "B", "T1"."C" AS "C" FROM "T1" AS "T1" WHERE (NOT ((("T1"."A" IS NULL) OR (("T1"."B" IS NULL) OR ("T1"."B" = \'\'))) OR ("T1"."C" IS NULL)))', []]
|
t2.to_sql.prepare . should_equal ['SELECT "T1"."A" AS "A", "T1"."B" AS "B", "T1"."C" AS "C" FROM "T1" AS "T1" WHERE (NOT ((("T1"."A" IS NULL) OR (("T1"."B" IS NULL) OR ("T1"."B" = \'\'))) OR ("T1"."C" IS NULL)))', []]
|
||||||
|
|
||||||
t3 = t1.filter_blank_rows when=Blank_Selector.All_Cells_Blank
|
t3 = t1.filter_blank_rows when=Blank_Selector.All_Cells
|
||||||
t3.to_sql.prepare . should_equal ['SELECT "T1"."A" AS "A", "T1"."B" AS "B", "T1"."C" AS "C" FROM "T1" AS "T1" WHERE (NOT ((("T1"."A" IS NULL) AND (("T1"."B" IS NULL) OR ("T1"."B" = \'\'))) AND ("T1"."C" IS NULL)))', []]
|
t3.to_sql.prepare . should_equal ['SELECT "T1"."A" AS "A", "T1"."B" AS "B", "T1"."C" AS "C" FROM "T1" AS "T1" WHERE (NOT ((("T1"."A" IS NULL) AND (("T1"."B" IS NULL) OR ("T1"."B" = \'\'))) AND ("T1"."C" IS NULL)))', []]
|
||||||
|
|
||||||
Test.group "[Codegen] Sorting" <|
|
Test.group "[Codegen] Sorting" <|
|
||||||
|
@ -305,7 +305,7 @@ spec =
|
|||||||
Test.group "Dropping Missing Values" <|
|
Test.group "Dropping Missing Values" <|
|
||||||
Test.specify "should correctly handle NaNs with mixed type columns" <|
|
Test.specify "should correctly handle NaNs with mixed type columns" <|
|
||||||
t = Table.new [["X", [1, 2, 3, 4, 5]], ["Y", ["A", "", Nothing, Number.nan, 0]]]
|
t = Table.new [["X", [1, 2, 3, 4, 5]], ["Y", ["A", "", Nothing, Number.nan, 0]]]
|
||||||
t1 = t.filter_blank_rows when=Blank_Selector.Any_Cell_Blank treat_nans_as_blank=False
|
t1 = t.filter_blank_rows when=Blank_Selector.Any_Cell treat_nans_as_blank=False
|
||||||
t1.at "X" . to_vector . should_equal [1, 4, 5]
|
t1.at "X" . to_vector . should_equal [1, 4, 5]
|
||||||
# Comparing text value because `Number.nan != Number.nan`.
|
# Comparing text value because `Number.nan != Number.nan`.
|
||||||
t1.at "Y" . to_vector . to_text . should_equal "[A, NaN, 0]"
|
t1.at "Y" . to_vector . to_text . should_equal "[A, NaN, 0]"
|
||||||
@ -314,7 +314,7 @@ spec =
|
|||||||
c.to_vector . should_equal [False, True, True, True, False]
|
c.to_vector . should_equal [False, True, True, True, False]
|
||||||
c.value_type . should_equal Value_Type.Boolean
|
c.value_type . should_equal Value_Type.Boolean
|
||||||
|
|
||||||
t2 = t.filter_blank_rows when=Blank_Selector.Any_Cell_Blank treat_nans_as_blank=True
|
t2 = t.filter_blank_rows when=Blank_Selector.Any_Cell treat_nans_as_blank=True
|
||||||
t2.at "X" . to_vector . should_equal [1, 5]
|
t2.at "X" . to_vector . should_equal [1, 5]
|
||||||
t2.at "Y" . to_vector . should_equal ['A', 0]
|
t2.at "Y" . to_vector . should_equal ['A', 0]
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user