Commit 2671b6d
Add Arrow Flight SQL ODBC driver
Co-authored-by: alinalibq <[email protected]>
Co-authored-by: rscales <[email protected]>
Co-authored-by: justing-bq <[email protected]>
Co-authored-by: vic-tsang <[email protected]>
ODBC commits squashed into 1 to make rebasing to main easier.
Add initial framework for odbc dll
- Add ARROW_FLIGHT_SQL_ODBC option. If we set `ARROW_FLIGHT_SQL_ODBC=ON`, the flightsql odbc folder will be built
- Add odbc api layer for entry_point.cc
- builds odbc dll file, with ODBC APIs exported in odbc.def
Address James' comments
Fix `odbcabstraction` build errors and partially fix `flightsql_odbc` errors
Fix boost-variant not found error
- Adding dependencies from odbc/vcpkg.json to cpp/vcpkg.json
- Fix whereami.cc and .h dependency; ported lates code
Update whereami.cc
- use `long` instead of `int64`. Fixed namespace issues.
- PR CI fix: Add `parquet-testing` back
Partial build fix for `flight_sql` folder
- Replaced `namespace arrow` and `namespace odbcabstraction` with `using namespace ...`
- fix flight_sql_connection.cc
Fix `util::nullopt` to use `std::nullopt`
- fix std::optional
- fix BufferReader
- Fix GetSchema
- fix json_converter.cc
- partial fix configuration.h
- partial fix get_info_cache.cc
- Fix winsock build error
- Comment out `flight_sql` files that cannot build
- Comment out configuration and unit tests
- Comment out get info cache and system trust store
Create initial odbc tests folder
Implement SQLAllocEnv
Fix cmake build
Implement SQLFreeEnv
Fix rest of build errors from `flightsql-odbc`
- Fix get info errors
- Fix for configuration window
- added odbcinst library
- Fix system trust store
- unit test fixes
- Add dependency of ARROW_COMPUTE. `arrow/compute/api.h` is used in
`flight_sql`. Adding `ARROW_COMPUTE=ON` during build fixed run time unit
tests failures.
Implement SQLAllocConnect and SQLFreeConnect
Fix build issue from static flight sql driver
Lint and code style fixes
Re-add deleted submodule parquet-testing
clang-format lint fix
cpplint lint fix
Exclude whereami in rat exclude list
C++/CLI lint fix
Update parquet-testing to match commit from `main`
Address Kou's comments
ODBC directory lint fixes
Catching the lint fixes outside of `flightsql-odbc` code
Fix build warnings that get treated as error
Implement SQLSetEnvAttr and SQLGetEnvAttr
Implement use of ExecuteWithDiagnostics
Doxygen Error Fixes and Address comments from Kou and James
Address comments from Kou
- Updates License.txt
- Update cmake toolchain
- Move whereami to `vendored`
- Use string_view instead of NOLINT std::string
Remove `whereami.cc` from arrow util build
We are building whereami.cc as part of odbc
Fix include headers to replace <> with ""
Address comments from James
Implement SQLGetDiagField
SQLDriverConnect, SQLConnect and SQLDisconnect
Implement stubs for SQLGetInfo, SQLGetDiagField and SQLGetDiagRec
Separate RegisterDsn and UnregisterDsn from windows build
Update code to save driver value from connection string
Add ReadMes for ODBC and tests
Fix test issues with string_view
Address code reviews
Update entry_points.cc to fix build issue
Remove Dremio references
Use emplace properly
Address comment from Rob and add SQLDisconnect test case
Add odbc.def and cmd file to rat_exclude
Nit - remove duplicate lines
Accidentally committed the change during git rebase
Nit - remove usage of nullptr
DSN window implementation
Add licenses to `.cmd` and `.def` files
Implement SQLGetDiagRec
Build ODBC in Windows Workflow
Tests are skipped for now.
Updates for SQLGetDiagFieldW
Enable Driver Logging
Add todo to update logging system later
Add logs
Implement ODBC API with debug logging
Enable mock test
* Add todo for noauth validation
* mock server with token auth
Add tests
* run same test with both modes
* Enable ODBC tests in workflow
* Switch current test cases to use FlightSQLODBCTestBase
So the tests can be skipped when `TEST_CONNECT_STR` is not set.
* Change tests to run on both mock and remote modes
Wrap usage of TEST_CONNECT_STR where possible
* Rename test fixtures and make connection string functions virtual
* Fix lint issue
* Attempt to enable ODBC build on Windows platforms
* Attempt to fix clang64 and MinGW errors
* Attempt to register ODBC
* Address James' comments
Use constant string for token
* use ServerMiddleware to validate token
Fix connection issues to DBT Labs
PopulateCallOptions before making a connection
Fix dsn window bug with advance properties
Fix seg fault issue from empty string
Implement SQLAllocStmt
Follow-up DBT Labs connection fix
Implement SQLGetDiag Rec and Field for statement
Unicode support for DSN ODBC APIs
* Let compiler append `W` to ODBC APIs where applicable.
Initialize Kernel functions
As per changes from #46261, we need to initialize Kernel library explicitly to get the functions registered
Implement SQLSetConnectAttr and SQLGetConnectAttr
ODBC Test Segfault Fix
* Move `connection_test.cc` to last in `CMakeLists.txt`, this resolves the seg fault. The seg fault was not reproducible on my local environment, even when I use the msys2 shell.
* Rename test executable to flight_sql_odbc_test
SQLExecDirect implementation
* SQLGetStmtAttr stub implementation
* Fix missing break statement in SQLGetDiagRec
* Run ShutdownProtobufLibrary as part of test environment
* Add comment for GH-46889
* Pass call options to executed prepared statement
`call_options_` contains the authentication token which is needed
Implement SQLGetInfo
SQLGetInfo Workflow Fixes
SQLFetch & SQLGetData Implementation
SQLGetStmtAttr stub implementation
Stub call for SQLGetStmtAttr
Enable statement handle allocation
Implement SQLExecDirect - test hang issue
Update odbc_api.cc
Run `ShutdownProtobufLibrary` after all ODBC tests
Resolves test hanging problem
Fix missing break statement in SQLGetDiagRec
Add tests
Lint fixes
Run ShutdownProtobufLibrary as part of test environment
Add debug messages
Draft code
Remove drafts
Add comment
Add comment for GH-46889
Update statement test headers
Pass call options to executed prepared statement
`call_options_` contains the authentication token which is needed
SQLFetch & SQLGetData initial impl
EVERYTHING before this commit is for SQLExecDirect
SQLFetch and SQLGetData TestSQLExecDirectSimpleQuery test
Make GetData() return SQLRETURN
`TestSQLExecDirectDataQuery` for remote and mock servers
Remove unneeded test case
Add more data types
* Add SQL_GUID in getCTypeForSQLType
* Add data types in query
* Add checks for columns 1 to 25
* Update statement_test.cc
Add varbinary test
* Implement SQLNumResultCols
Will leave tests for later
* Implement SQLRowCount
* Implement SQLMoreResults
* Work on date retrieval fix
The `TestSQLExecDirectDataQuery` checks for date is not working.
* Fix date retrieval error by importing fix from Paul
* imported fix from dremio/flightsql-odbc@d44d862, an Apache-Licensed repository
* Add more checks for get data
* Add more tests
* Continue work on float truncation test
* Disable float truncation test
* Address comments from James
- do not return errors for invalid rowCountPtr and columnCountPtr
- add static cast for columnCount
- Add tests with SQL_C_DEFAULT as target type
- Add test checks for indicator
- Fix SQL_NUMERIC, SQL_BIT, SQL_FLOAT target type
* Fix build issues in CI
* More fix for CI
* Add test for invalid buffer length
SQLPrepare & SQLExecute Implementation
* Add tests
* Address comments from Rob
Code Style fixes
* Move ifdefs outside of test cases
* use `stmt`
* Move logs to first line
* fix test for `SQL_DRIVER_HSTMT`
* Use camel case for tests
Implement SQLGetStmtAttr and SQLSetStmtAttr
SQLBindCol Implementation
* SQL_UNBIND implementation + tests
* Add tests for `SQL_ATTR_ROW_ARRAY_SIZE`
* Add check for `SQL_ATTR_ROWS_FETCHED_PTR`
Enable TestCloseConnectionWithOpenStatement test case
SQLFetchScroll Implementation
* Add checks for SQL_ATTR_ROWS_FETCHED_PTR
* SQLFetchScroll is supposed to return the number of rows fetched using SQL_ATTR_ROWS_FETCHED_PTR
SQLExtendedFetch Implementation
* Implement rowCountPtr and rowStatusArray for SQLExtendedFetch
* Add tests for SQLExtendedFetch
* `SQLExtendedFetch` doesn't return `SQL_SUCCESS_WITH_INFO` for error state 22002.
* Add tests for `SQL_ROWSET_SIZE`
* Address comments from James
GH-46584 Iterate endpoint
* use suggestion from James for one-liner change to return `Status::OK` directly
* fix for iterating endpoints, it is based on JDBC's fix for the same bug
* save value of `FlightClientOptions`
* Use `TestFlightServer`
Add `arrow_flight_sql_shared` to enable usages for `TestFlightServer`
* Fix build errors from missing `gmock`
* Add checks for array data
Update flight_sql_stream_chunk_buffer_test.cc
Add `FlightStreamChunkBufferTest` unit test
Draft test with `FlightSQLODBCMockEndpointTestBase`
* Reference GH-47117 and Clean up code
* Add driver and DSN to built-in properties to not pass driver/dsn as attributes to server
* Allow `=` in values inside connection strings, fixes connectivity problems
* Address comments from Rob
SQLColumns Implementation
* Initial impl for SQLColumns
* Add test for SQLColumns
* Add columns test with all supported column types
- mock server doesn't support schema
* Address comments from James
- Test different data type return value for SQLColumns
- Add todo comment for SQLDescribeCol tests
---------
Co-authored-by: rscales <[email protected]>
Fix bug of DSN not read properly
* Fix reading DSN bug
Use a simpler, more robust way to load the DSN
SQLColAttribute implementation
* SQLColAttribute initial impl
* Switch to use `GetAttributeSQLWCHAR` to be unicode-compatible
* Add SQLColAttribute tests and fix bugs in `flightsql-odbc` impl
* Fixed bug with incorrect column count. It was returning column count + 1.
* Fixed bug with incorrect numPrecRadix. It was returning SQL_NO_TOTAL (maps to -4) for non-numeric columns, but the correct value is 0.
* Fixed bug with unsigned column to return true for unsigned columns (non-numeric columns or unsigned numeric columns) and false for signed columns (numeric columns)
* Fixed bug with incorrect non-concise data type return value for date time type types. The correct return is SQL_DATETIME for all date time types
* Address comments from James
* use const for `ConvertToWString`
* add nullptr check in odbc_api.cc layer
* Add support for `SQL_COLUMN_LENGTH`, `SQL_COLUMN_PRECISION`, and `SQL_COLUMN_SCALE`. The driver will return the same values for ODBC2 and ODBC3.
* Add tests for ODBC v2 SQLColAttributes values
* I converted tests that can be run on remote servers where possible
* Address comment from Rob
Implement SQLTables
Use C++ 20 standard for ODBC
* Add support for building with C++20
* Upgrade spdlogs version as an attempt to fix build issues
* Fix issue of missing unique_ptr definition
Add tests for SQLMoreResults
Implement SQLNativeSql
Add diagnostic records
* remove `SQLErrors`, as the driver manager is supposed to map `SQLErrors` to `SQLGetDiagRec`
Implement tests for SQLNumResultCols
SQLCloseCursor Implementation
* fix error state to return the correct state 24000.
* add tests for SQLCloseCursor and SQLFreeStmt(SQL_CLOSE)
Add SQLColumns and SQLColAttribute tests with nullptr
* Modify SQLTables test to run on both mock and remote
* reorder error msg alphabetically
Implement tests for SQLRowCount
Fix merge conflicts
Adjust searchable return value
based on GH-46920 fix
Fix `getCTypeForSQLType` return for interval types
- Fix `getCTypeForSQLType` function to return the correct `C type` for interval SQL data types. Previously the function was checking for interval `C type` and returning interval `SQL type`, which was the opposite of the intended functionality.
SQLGetTypeInfo implementation
* Add tests for SQLGetTypeInfo
* fix bug of createParams returning empty string instead of null
* fix bug of non-concise data type being returned for datetime/interval
* fix bug of longvarchar not converted to wlongvarchar when driver has unicode enabled
* Address comments from James and add checks
* test SQL_ALL_TYPES in ODBC 2.x.
* test SQL_TYPE_* in ODBC 2.x, the driver manager reports invalid data type error.
* test SQL_* datetime in ODBC 3.x for backwards compatibility.
* add check for valid/invalid data type.
Fix segfault issue from empty metadata
* Use empty map in bug fix
* Address comments from James
Implement SQLDescribeCol
Add SQLError Tests
* add test to free null handles. Without handle value initialization, segfault error was seen
Move `SQLGetDiagField` and `SQLGetDiagRec` tests to `errors_test.cc`
* Address comments from James
* Add ODBC Ver 2 tests
* update test name to indicate if error handling is from driver manager.
* add tests for warnings.
* fix lint errors.
* remove SQL_ATTR_APP_ROW_DESC that is not applicable to Environment Attribute.
Add tests for SQLGetFunctions
* Using `SQL_FUNC_EXISTS` macro fixed the issue of `api_exists` not read correctly
* Fix SQLGetTypeInfo naming for ODBC ver 2 tests
* Add more tests
Add unsupported API checks.
Add `TestSQLGetFunctionsODBCVer2`.
Add `TestSQLGetFunctionsCheckSingleAPI`.
* Update reset value
* Add SQLDescribeCol function check
Add additional SQLDescribeCol test cases
Add Descriptor support in SQLAllocHandle and SQLFreeHandle
* Descriptor allocation initial impl
* Add descriptor handle tests
* Add diagnostic error test for descriptor handle
* the error is from driver manager as our driver doesn't have descriptor-specific APIs implemented yet
* Add SQLGetDescField test from driver manager
* Add doxygen doc comment
Fix connection issues servers that require data in handshake
* revert back to passing empty string in handshake
Fix bug of system trust store not loaded properly
* Bug: system trust store has default value of "true" regardless of "encryption" value.
* But if encryption is set to false, system trust store cannot be used, so system trust store should be saved as false if user does not enable encryption.
* It may confuse the user if they see encryption is set to false but system trust store is set to true. In this case, the driver will not do system trust store verification. The DSN window should reflect this accurately.
CPack ODBC Windows msi installer
Add ARROW_FLIGHT_SQL_ODBC_INSTALLER environment variable to enable creation of Windows installer.
* Use CPack + WiX to create a `msi` installer.
* run command `cpack` under the build directory to generate the installer.
Register ODBC Driver on Windows in installer
* In `wxs`, cannot use `package`, need to use `fragment` instead
* Use component as feature will automatically be generated
* Set Patch version + add installer instructions
Use Arrow logo banner
* replaces default banner with Arrow logo banner
Indicate Driver Company and Version on Driver Manager
* use versioninfo.rc.in template
* use `1 VERSIONINFO` for it to work properly
* Set version variables
* Add `.rc` to gitignore
* Add `@` variables to rc template
Return nameLengthPtr value as length in characters
Allow spaces while parsing Table Type
mac changes
added changes to build in MacOS
Enable ODBC build on Windows Glib & Ruby workflows
* Fix `boost::get` issue on GLib workflow
* Fix GLib build issue with conflicts
Compile entry_points.cc before odbc_api.cc due to conflict from sql.h and flight/types.h.
Fix build warnings treated as error on Windows
SQLDescribeCol expects `bufCharLen` to be of type `SQLSMALLINT`, so build warnings occur when `bufCharLen` is set to `SQLINTEGER`.
Add more types for Array Conversion
Set column attribute SQL_DESC_TYPE_NAME
[Refactor] Remove reference of `Configuration` in odbc_connection.cc
Remove reference of `Configuration` in odbc_connection.cc which is in library `odbcabstraction`. The reasoning is that `Configuration` is in `arrow_odbc_spi_impl` and this is a library that `odbcabstraction` depends on. I moved the logic for reading DSN values into `odbc_api.cc` instead, since that is a place that will result in no conflicts. The ODBC driver now does not save the DSN value in the connection string if the DSN value is put after Driver value.
* Address comments from James
Simply logic to check for first key value pair only
Add TODO for non-UTC time zone support
* Currently, the driver only supports UTC time zone
Replace `spdlogs` with Arrow's Internal Logging
* Add logging README
* register kernel function conditionally
* Resolves errors of kernel function already registered
Logging files are not supported since GLOG is not enabled on Windows in Arrow repo. We can work + test on log file support on macOS/Linux phase
Remove `RUN_ALL_TESTS` as they are not needed
Previously, tests on Windows were not being run due to #47434. So we added `RUN_ALL_TESTS` as a workaround in early May, before #47434 was raised.
Now that #47434 is resolved, we can remove `RUN_ALL_TESTS` as they are not needed.
Other changes:
* Renamed `arrow_odbc_spi_impl_test` to `odbc_spi_impl_test` so the test executable will be `arrow_odbc_spi_impl_test.exe` instead of `arrow_arrow_odbc_spi_impl_test.exe`
Fix Function & Variable Naming
Fix member variable naming
Address code review comments for Arrow#40939
* Reword comment on null check
Addresses comment #40939 (comment)
* Use `std::memcpy` instead of `memcpy`
Addresses comment #40939 (comment)
* add include cstring
* Remove warpdrive mentions
* Fix lint
* Address Justin's comments
Combine utils and define utils namespace
Use arrow::flight::sql::odbc namespace
Update namespaces driver::flight_sql and driver::odbcabstraction to arrow::flight::sql::odbc.
Fix seg fault from register log
PR to keep apache-odbc in sync with arrow main branch.
I found that, if the driver registers logs before compute kernel registration, segfault somehow occurs at when register kernel function is being used. I am not sure the root cause, but registering the logs after compute kernel registration seems to resolve the issue.
Refactor odbcabstraction and odbc_impl
flight_sql is renamed to odbc_impl. The files inside odbcabstraction have been moved to odbc_impl and odbcabstraction is removed.
Replace boost::variant with std::variant
* Remove `boost-optional` and `boost-variant` dependencies from vcpkg.json
* Replace boost::variant with std::variant
Fix EXPECT_EQ() to have expected on the left and actual on the right
Code style naming convention
Remove underscores in test names
Sync arrow_flight_testing changes from Arrow::main branch
Fix test failure due to typo
Fix `FlightSQLODBCRemoteTestBase.TestSQLExecDirectDataQueryDefaultType` test failure due to typo
The precision should be 38 in the original code. I think it got changed to 0 by accident somewhere.
Disable tests with `DISABLED_`
* Enable `TestSQLGetInfoDriverHdesc`
We missed this test before, enabling the test now
* Disable tests with `DISABLED_`
Fix test assertions
Define Test Fixtures
* Connect/disconnect in SetUp/TearDown
* Define Test Fixtures
Resolve ODBC CI Build Errors
* Fix `ConfigDSNW` not found error
* Fix `TestFreeNullHandles` test
`ConnectionTest` sets up the handles, so the `this->...` handles will not be null at beginning of test.
Define New Base Test Fixtures
Skip tests without connecting/disconnecting
Address general test code review comments
* Use RAII helper for allocating and freeing env/conn handles
Avoids duplicated code
Move test helper functions to anonymous namespace
Add `[[nodiscard]]` for ODBC APIs
Addresses community comment:
https://github.com/apache/arrow/pull/47763/files#r2450014186
Remove `using List=` in test suite definitions
Use static_cast for `SQLWCHAR` in type info test
Use static_cast for `SQLWCHAR` in tables test
* use mutable arrays for places where characters cannot be const
Use static_cast for `SQLWCHAR` in columns test
Update comment
Use static_cast for `SQLWCHAR` in SQLGetInfo test
* Address Justin's comments
* Add fix for skipping the allocation of handles
^ Conflicts:
^ .github/workflows/cpp.yml
^ cpp/src/arrow/flight/sql/odbc/odbc_api.cc
^ cpp/src/arrow/flight/sql/odbc/odbc_impl/attribute_utils.h
^ cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.cc
^ cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.h
^ cpp/src/arrow/flight/sql/odbc/odbc_impl/encoding_utils.h
^ cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection.cc
^ cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection_test.cc
^ cpp/src/arrow/flight/sql/odbc/odbc_impl/main.cc
^ cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_connection.cc
^ cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_connection.h
^ cpp/src/arrow/flight/sql/odbc/odbc_impl/spi/connection.h
^ cpp/src/arrow/flight/sql/odbc/odbc_impl/system_dsn.h
^ cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/dsn_configuration_window.cc
^ cpp/src/arrow/flight/sql/odbc/odbc_impl/util.cc
^ cpp/src/arrow/flight/sql/odbc/odbc_impl/util.h
^ cpp/src/arrow/flight/sql/odbc/tests/connection_test.cc
^ cpp/src/arrow/flight/sql/odbc/tests/odbc_test_suite.cc1 parent 46b033f commit 2671b6d
File tree
102 files changed
+12427
-617
lines changed- .github/workflows
- ci/scripts
- cpp
- cmake_modules
- src/arrow
- flight/sql
- odbc
- install
- odbc_impl
- accessors
- config
- spi
- ui
- tests
- dremio
- vendored/whereami
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
102 files changed
+12427
-617
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
310 | 310 | | |
311 | 311 | | |
312 | 312 | | |
313 | | - | |
| 313 | + | |
| 314 | + | |
314 | 315 | | |
315 | 316 | | |
316 | 317 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
32 | 32 | | |
33 | 33 | | |
34 | 34 | | |
| 35 | + | |
35 | 36 | | |
36 | 37 | | |
37 | 38 | | |
| |||
107 | 108 | | |
108 | 109 | | |
109 | 110 | | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
213 | 213 | | |
214 | 214 | | |
215 | 215 | | |
| 216 | + | |
216 | 217 | | |
217 | 218 | | |
218 | 219 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
720 | 720 | | |
721 | 721 | | |
722 | 722 | | |
723 | | - | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
724 | 726 | | |
725 | | - | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
726 | 730 | | |
727 | 731 | | |
728 | 732 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
180 | 180 | | |
181 | 181 | | |
182 | 182 | | |
| 183 | + | |
183 | 184 | | |
184 | 185 | | |
185 | 186 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
178 | 178 | | |
179 | 179 | | |
180 | 180 | | |
181 | | - | |
| 181 | + | |
| 182 | + | |
182 | 183 | | |
183 | 184 | | |
184 | 185 | | |
| 186 | + | |
185 | 187 | | |
186 | 188 | | |
187 | 189 | | |
| |||
403 | 405 | | |
404 | 406 | | |
405 | 407 | | |
| 408 | + | |
406 | 409 | | |
| 410 | + | |
407 | 411 | | |
| 412 | + | |
408 | 413 | | |
409 | 414 | | |
410 | 415 | | |
| |||
471 | 476 | | |
472 | 477 | | |
473 | 478 | | |
| 479 | + | |
474 | 480 | | |
| 481 | + | |
475 | 482 | | |
| 483 | + | |
476 | 484 | | |
477 | 485 | | |
478 | 486 | | |
| |||
934 | 942 | | |
935 | 943 | | |
936 | 944 | | |
937 | | - | |
| 945 | + | |
| 946 | + | |
| 947 | + | |
938 | 948 | | |
939 | 949 | | |
940 | 950 | | |
| |||
944 | 954 | | |
945 | 955 | | |
946 | 956 | | |
947 | | - | |
| 957 | + | |
| 958 | + | |
948 | 959 | | |
949 | 960 | | |
950 | 961 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
236 | 236 | | |
237 | 237 | | |
238 | 238 | | |
239 | | - | |
| 239 | + | |
| 240 | + | |
240 | 241 | | |
241 | 242 | | |
242 | 243 | | |
| |||
2397 | 2398 | | |
2398 | 2399 | | |
2399 | 2400 | | |
2400 | | - | |
| 2401 | + | |
| 2402 | + | |
2401 | 2403 | | |
2402 | 2404 | | |
2403 | 2405 | | |
2404 | 2406 | | |
2405 | 2407 | | |
2406 | 2408 | | |
2407 | | - | |
2408 | | - | |
2409 | | - | |
| 2409 | + | |
| 2410 | + | |
| 2411 | + | |
2410 | 2412 | | |
2411 | 2413 | | |
2412 | 2414 | | |
2413 | 2415 | | |
| 2416 | + | |
2414 | 2417 | | |
2415 | 2418 | | |
2416 | 2419 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
349 | 349 | | |
350 | 350 | | |
351 | 351 | | |
352 | | - | |
| 352 | + | |
| 353 | + | |
353 | 354 | | |
354 | 355 | | |
355 | 356 | | |
| |||
1043 | 1044 | | |
1044 | 1045 | | |
1045 | 1046 | | |
1046 | | - | |
| 1047 | + | |
| 1048 | + | |
1047 | 1049 | | |
1048 | 1050 | | |
1049 | 1051 | | |
| |||
1160 | 1162 | | |
1161 | 1163 | | |
1162 | 1164 | | |
| 1165 | + | |
1163 | 1166 | | |
1164 | 1167 | | |
1165 | 1168 | | |
| |||
1223 | 1226 | | |
1224 | 1227 | | |
1225 | 1228 | | |
1226 | | - | |
| 1229 | + | |
| 1230 | + | |
1227 | 1231 | | |
1228 | 1232 | | |
1229 | 1233 | | |
1230 | | - | |
| 1234 | + | |
| 1235 | + | |
1231 | 1236 | | |
1232 | 1237 | | |
1233 | 1238 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
58 | 58 | | |
59 | 59 | | |
60 | 60 | | |
61 | | - | |
62 | | - | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
63 | 70 | | |
64 | 71 | | |
65 | 72 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
38 | 38 | | |
39 | 39 | | |
40 | 40 | | |
41 | | - | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
42 | 50 | | |
43 | 51 | | |
44 | | - | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
45 | 64 | | |
46 | 65 | | |
47 | 66 | | |
| |||
75 | 94 | | |
76 | 95 | | |
77 | 96 | | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
0 commit comments