| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
deciaml.IntPart() returns int64, so we have to implement a function to
convert deciaml to uint64 for reading primary id from Raw.
|
| |
|
|
|
|
|
| |
Implement some storage utility functions, including
shift slot, get dynamic byte and get primary key hash.
|
|
|
|
|
| |
Since we have to packing our data in slot, it needs to calculate each
column field's slot and byte offset.
|
|
|
|
| |
Implement load register to input operands, before each op.
|
|
|
|
| |
Move error code to errors.go, and implement Size method for column field.
|
|
|
|
|
| |
It is possible that the number to encode is produced by arithmetic
operations and has negative exponent even when it is an integer.
Properly handle this case and modify test cases to check it.
|
|
|
|
|
| |
These structs will be used in identifier nodes to store references to
objects defined in the schema or the command itself.
|
|
|
|
|
|
|
| |
In order to check foreign keys efficiently during deletion, an index
should be marked when it is referenced by foreign keys. Since we now
have flags which cannot be declared directly from the source code, two
helper functions are added to distinguish between two groups of flags.
|
|
|
|
|
| |
Reorder fields and enums according to the grammar file to make it easier
to check whether all features supported by the grammar are implemented.
|
|
|
|
|
|
|
| |
The number of tables, columns, indices are all limited to 256, so we
don't have to do much memory copying during appending. Drop pointers
from slices to save memory for storing pointers and possibly improve
locality.
|
|
|
|
|
|
| |
ORDER BY and GROUP BY options have to decide whether an expression is a
reference to the column specified in SELECT command by checking whether
it consists of only one integer literal.
|
|
|
|
|
|
|
| |
So Parse now returns a []ast.StmtNode instead of a generic []ast.Node,
which should be clearer on what the return value looks like. This also
adds a field recording the verb use to identify the statement in order
to provide better error messages.
|
|
|
|
|
|
|
|
| |
Now both position and length are both recorded in the error struct,
recording the token in the error struct no longer provides any benefit.
It is easy to find the token when position and length are known, but
requiring all error locations to fill the field is complicated because
they have to access the source code to find the token.
|
| |
|
|
|
|
|
| |
Provide ESCAPE grammar for specifying escape character in like pattern
matching.
|
|
|
|
|
| |
When an error corresponds to a source code token, it should be able to
report the length of the token in addition to the position.
|
|
|
|
|
| |
Since we traverse an AST by calling functions recursively, we have to
protect the parser by limiting the depth of an AST.
|
|
|
|
|
|
|
|
| |
Code generated by pigeon includes many exported symbols which should not
be used by any other code other than the parser itself. To prevent them
from being misused, we used to hide them by editing the generated code
with sed. This commit removes the unreliable sed trick by putting
generated code to internal package.
|
|
|
|
|
|
|
| |
In addition to changes required to move DataTypeEncode and
DataTypeDecode to use TypeNode interface, this commit also unifies the
meaning of 'Size' field in 'FixedBytesTypeNode'. It always counts the
length in bytes now.
|
| |
|
|
|
|
|
|
| |
These symbols are allowed in Microsoft SQL or PostgreSQL, but the SQL
standard doesn't mention them. It is still possible to use these symbols
as identifiers by putting them in double quotes.
|
|
|
|
|
| |
The size of table in db and column/index/sequence in a table is bounded
by uint8. Define types for better readability.
|
|
|
|
| |
Catch the error reported by fmt.Fprintf and report it to the caller.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Now all AST nodes should have position information recorded during
parsing. These fields are intended to be used to report errors and make
debugging easier. However, precise location of each token is currently
unavailable. It can be done in the future if it becomes necessary.
To make it easier to traverse an AST, GetChildren is modified to skip
nil nodes in the output. This means callers of GetChildren don't have
to check for nil in returned slices.
AST printer is modified to print the position and the corresponding
source code token. A few special handling for interfaces are removed
because reflection works better for structs.
|
|
|
|
|
|
|
| |
Since all nodes must be declared as pointers to satisfy the interface,
it is no longer meaningful to use value receivers. It should make the
code look more consistent and reduce the amount of memory copying
during function calls because these structs takes at least 8 bytes.
|
|
|
|
|
|
| |
Since our 'Node' interface includes methods which must be implemented
with pointer receivers, all AST nodes are now referenced with pointers
and the '*' pointer indicator is no longer useful.
|
|
|
|
|
|
|
|
|
|
|
|
| |
This commit implements isAddress function to allow a number literal to
be considered as an address literal. Since Solidity only allows '0x' to
be written in lower case, we remove the handling of upper case '0X' to
keep the behavior in sync with Solidity.
In addition to isAddress implementation, this commit also removes
'String' methods from AST nodes to prevent them from implementing the
builtin 'Stringer' interface. Therefore, our AST printer is now able to
print struct fields of value nodes instead of only one string.
|
|
|
|
|
|
|
|
|
| |
In order to make our AST easier and safer to use, all declarations with
empty interface type are now removed.
This changes also makes it possible to traverse the AST without using
reflection or understanding what each type means because all AST nodes
have at least one common interface.
|
|
|
|
| |
Return error.Error to reveal more information about returned error.
|
|
|
|
|
| |
To cover the pitfall of decimal.fromString, we need to add leading 0 at
'^\.[0-9]+' case.
|
|
|
|
|
| |
The data range is deterministic for specific type, `GetMinMax` is
helper function to generate min, max value for clients.
|
| |
|
| |
|
|
|
|
|
| |
Modify Tuple.Data.Value type from *big.Int to interface{}
and remove Max, Min.
|
|
|
|
|
|
|
| |
After reconstructing commits, we move shared interfaces and params as
first runtime implementation. In this commit we define OP codes, runtime
flow and entrypoint, and basic operand structs and minor helper
components.
|
|
|
|
| |
Implement schema struct and handle its rlp serialization.
|
|
|
|
|
|
|
|
| |
Add encoder/decoder to convert between decimal and bytes. Also handle
issues below.
* Signed & Unsigned
* Padding
* Floating point of fixed
|
|
|
|
|
| |
Implement encode & decode function to convert between type node and
2-bytes type described on spec.
|
|
|
|
|
| |
It is now possible to write AST dump to a writer other than stdout and
use indent string other than 2 spaces.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Our parser is able to process queries with invalid UTF-8, provided that
it is compatible with ASCII. Since doing so requires encoding the input
before passing to pigeon, Parse* functions generated by pigeon are
unexported because they should not be used directly.
Escape sequences in string literals and identifiers are now recognized.
In addition to escape sequences supported by solidity, we support \U
similar to the one supported by Go to allow users to specify non-BMP
Unicode code point without using multiple \x escapes.
AST printer is modified to quote non-printable characters in strings to
prevent control characters from messing up the terminal.
|
|
|
|
|
|
| |
Instead of ignoring errors, errors returned from external functions are
normalized and reported to users. Errors which should be impossible to
occur are converted to panic calls.
|
|
|
|
|
|
|
| |
There are some changes in print ast utility.
1. instead of using optional interface to get detail, use reflect
2. implement a `print` field tag for printer switching detail mode or
not
|
|
|
|
|
|
|
|
| |
In order to avoid putting too many different things in single package
and allow other projects to reuse the syntax tree and the parser, these
two components are moved to different packages and all nodes used in AST
are now exported. A lot of comments are added in this commit to pass
golint checks.
|
|
|
|
|
|
| |
This tool is good enough to format our sqlvm grammar file. It is not
guaranteed to work for all valid pigeon files, and it only process
multi-line Go code blocks.
|
|
|
|
|
|
|
|
|
| |
Add sql language parser prototyping along with
1. grammar file implemented with github.com/mna/pigeon
2. ast node struct definition
3. simple parser test which only test if error existed
4. ast printer utility for visualizing parsing result
|
| |
|
|
Extract stateDB and contract out from core/vm/evm to core/vm,
such that other vm type can use the common modules.
|