Skip to content

adds support for BLOB #103

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 17 commits into from
Dec 14, 2019
Merged

adds support for BLOB #103

merged 17 commits into from
Dec 14, 2019

Conversation

dmalan
Copy link
Member

@dmalan dmalan commented Dec 12, 2019

Adds support for BLOB whereby values of type bytes or bytearray are converted to hexadecimal strings. Alternatively, we could leave such values as binary and pass them to the underlying SQL engine for just-in-time binding, but then we'd have to display a placeholder to the student in the logger's output, which seems inconsistent, since we pre-process all other (textual) placeholders.

We could, though, abridge the logger's output in cases where students are INSERTing large binary objects. But generally they should be discouraged from doing so, instead using a file system.

E.g.:

with open("cat.jpg", "rb") as file:
    contents = file.read()
    db.execute("INSERT INTO tbl VALUES (?)", contents)

yields:

INSERT INTO foo VALUES ('cat.jpg', x'ffd8ffe000104a46494600010100000100010000ffdb00840009060710101215101012151515151815151515151615151515151615161715161517181d28201a1a251b151521312125292b2e2e2e171f3338332d37282d2e2b010a0a0a0e0d0e1b10101a2d1d20252d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2dffc000110800b9011103012200021101031101ffc4001c0000010501010100000000000000000000050102030406000708ffc4004010000103020403060403060406030000000100021103210405123141516106132271819132a1b1f072c1d114234252b2e1336282f1072492a2c2d2153473ffc400190100030101010000000000000000000000000203010405ffc400221101010002020202020300000000000000000102110321123141513271132261ffda000c03010002110311003f00f300139a9c5ab805350f6a958a26a95880b944a2b973ae84d2289600dd2d346cb2f3645e8209963ac8d50590085153950515394c5527e3e9b5da1ee0d77004c48e614a4acbe638ad759d1c0e9f6eaa5c3e21f4ae0f878b787f6f452bcbdfa567174d038a89c9986c4b6a37537d47107aa7393ef64d690bd40f0acb940f0b02abc284ab3502aee096b519489c5221a50a4628c291a8688e18abb4b16c0e0c91ab92035b19021bbfddfa054b2d7eac4d31bdccfb1297cb7e8d71d4edbd694a98c364e4c42ae948b900b2ba522e4072e5c9100ab922e431cb972e435f3d39a9b0a621321593204f626a56a02dd2288e0cdd0da4afe18dc25a68d7e54e47a82ce652e5a1c395900950560aad415a8b266304d69efaa9e4f77f51471b4e47c3eea3fd9e2ad4b5f5123ea158a7539b7dff00450d6dd1f40d59cfc3bc39bf0f11b4f308ee1314da8d0e1ea388e854388a7a8191f231f34170754d2791ec2771cbcd64be3fa1963e53fd68dca17aab85cd69d5900c11620d8829d5716c1bb87baaa25a8abb946ecc68924778db6f70a99ce70f200aadbf559a0b8522a9ff00c9d1bfef1b6b1ba6623336344ee3984b7a6c9b5d2e00495177a5df0fa73f342e8b9f5bf7953c237a6ce77f89dd3923f83a200d448bf331f4496f9751593c7ba8bb80469833f7b82147d9ca07f6971e0c6fcc9f96c510ad881b1d87431e84a7640c6eaa8f1c481edfee9fd16b494d3d474ca7ad23a57245c8055c91720397245c8055c91720157245c80f01705192a5728cab2644ad48b8202d5257681baa1495da252d6c6a32976cb4f862b2594bb65aac21b2c68a50571aa9505718b580398f87116372d6b88f71f9295f89812411ce2df92a9da5a715a954b8b3c18e4d870fcd536e6f4f702a0e81c23d94add5d3a709bc44bf680f16fbf74073ac2b890e6f0de3ce3f3475d5cf5889127f4f30a0c655d2240926241e44c13ed3eca79647918acc32eab51eda81ba6c03fc44173b81f3d30a966795e96d9e0eb21a184cc3890241e570b5555c4fef1d20c0200317874fac40594cf5951b8aa14c125a0b009b71e31e44fd84fc76fa47924f6158ac21a534819735de22ddac6d04a970782d4f96c1700e738104001a0927e9ee8e66597fef2ab9fb10c74cc59b01c5bcc8bf97aa9703846f7950b1e5ce0cd2444b4ccea1b6d20fbaa79744f1ec1f2ccab59ef35785c4c0e362409e1c115a797546b86a6cb00b0699922e03beaaa767aa96d4a8c12433541024729bf49b73016a68577b4101a36e86e47c40f22627d54f92dd9f0d05e09f52a3a5f37e60dbd02d3616996b6080e1e64fccaaf83632a7ef01d3607d4f21c4fe50ae9c58887dbf10fa903f3598df835303d87610072288e54c0d6db8dfdd00cc9c2a30b5b79e2d3f7f9ad065edd2d6b470007c936f65a2d48a914348a95691cb922e402ae489100aba522e402cae48b900a95357203c09ce519728cd44dd6ae9a694a0a803d3839605ca455ba4550a4e5769158d6832a76cb5d823658bcadcb5d97bac95a3540abac2a8502adb1cb407e7ed1a24c5b69ea23f3597caf09a9d23870331fa85a0ed2621a1ad693726ca960e8f76dd5c4ed04fb445973f2dd64e8e1fc56dd500006d00f97902a9567ff193e11064dbc85f9d93c3cbcdae073e3d109cf1ce6b4689df603605dabcb8fcd4a76a5415312d6c38483705d1fcc0021b3b0bb4fa2a19ee58f345b89a675b98d9e208682d2481fcd07d8ab99fd0353065d4b7a601b0b803e21cff00d95eecab7bec1b5ce172d2d3fe61207b582acea6d2bdf41f8cc48a9470cf8f89aef119d2d3a40bf3249036214380c50a146b552e3a5ad696ba26492fdedbec1265b9755661dd4aab47eeea92c264800881238efb724fcd3287bf0eca0c321d51a5fc2cd2411ec45fa26e8bdaae49817329bb175243ea1980600da07ce7d0ab782c53489d262fab91f08683ff0054edcbaa7f6eeaf75850d6cc1d22797d8494698a78366a710e2d04340325e4122fd06c3fba3dcd8f5d2f00090e691a402dfc20198201dcfebcd103fbc6691a6763c639dbce500ca4b8360981721a48913c63d78abd42b96c34031c0ec6e06dc799f5494f1559872caa1b2649dcc0f4005c7aad961caca629e1b5699300122dcfe6b518729f1fb2642944a9a556a25584c42ca45cb901cb9724402ae48b900ab924a494039726cae407ce46a2eef154ef128a8ba135b0f4f0f54c3d3c3d6011a2f57e8b908a0f4470ee4b5a3d96beeb5b975458bc03aeb5397544b5ad35172b6c721987a8ad87d90037366778f8e0d17b4851358480208001e9b7250e2eac922f7378dcff00643333cf9987a446ef3b0fcecb9b3972cba74e3a98f63d4aa318d2e79005c92481a42cce33b462acbb0d877556b491de38e8a648de2649f653e5186c4e2a954a988264b09a6c1001b7c46373faa8a955d3806398dd65a0b5cd30753813aa679df7fe608c3193abf6ce5cec9b86e4fdac0f27f68c3c35d673e99ef1a0409d62c7d815a619536861ff00e5aed32e6869dc11200e5758eec957a988a8facfa7a35386964180d683c386f1d6eb4dd8ccddaeaf89c2482c63bc3c80206a03d67dd6f2632656625e2cee53b36856d62e2f6e4038899b72d84ffb2666d8b14dad6304b8191371b718fbb2218ca7a402dde7a6d7438529d33fcc37de3d3744b346b2ecec6e5f49f4db531061ac3de1936b5efd05966b31edabb57fcb614961b0a9525ba8ed611d38deca6ed5e67df63198398a60491fccfe00fa0f9a1fdaca388a8fa6d60069690d0d020d370224c71b0110a9c78e3bfec9727259d622183ed1536b9bdfd07522fb07826a34c70e60abd56bb6a3c161f0f3e041102c06fc37e6aad5c2ebfd9a8b84d4353bd70e21bb5fce4ffd2507ed7d2387acea9409003bc4249697182606c3d12ea5bd1e5be3ba34f66a3a5df13763b7190202d5e5d54398085e6984cd0d522a9b386e07185baecdd6d54e622e9a4b0b6eda6a055995468395b05694f95d299296500e95d29b2b900aba522e402ae48b900ab9357203e62d4bb526255d2448d7291ae5004f056317683d13c33906a0e4530a52d0398275d6972ea8b2b842b43807a4a68d3e1dead3aa58a19867ab65d658d00c7557871040263c361c77940e9e5bdf562f7490ddee385d5dcd7bed44d23736b9990a4c0e5fa1819525ba812e771e7cfee14adf15a4dae64f8ba945d632d990049b1371b5a15f764ee2f755c0d460ef2f52855134de7988bb4f5baccd6fd9f0e668d4d449bb1c6c7d44e93d515cb3302e0036411b806607a724967cc36fe2af3f2ccc8b4b29d0a14019d551ae73cf5805a21657257bb038b0d1fbc3e2060f1b5c9e5257a26131d5b49bb8f00088f53c96533bc0f765f55ed82f168e026787a25f2d6e1a613dc685d8d6bf88250cc563836cd2350f64072dcc9d112aa6758b22fea931c72d9f2b8e83ff006338bc5c5571639cef88036b0d241f3110b7d43b378d68838b669e0e75205fefaa27d1667b3941cf7eba66e39f11331f347b1f89ae662ce11693161cc6dbf97c95b2be5d233193b32b9a5840e75271a951df1d7a97276b0e0d1b721b2c4e65880f7f89c22786e6789e7bab59ae2aa3eda9d3b1864971fc52aa60eb516022bd3b9fe22664fa59531c75d932cb7d2af71dd54869b1f10256f7b2798b4b3472e3cd64f30c1d37b5ae991c20c6eaa60b1e6855f0d8084fee277a7b261deae35cb3592668da8d0415a0a6f9095a9e52ca883938140492ba53252ca01d2ba536574a01d2ba536574a01d2b924ae407cc29534272e92393826a7058c4d44a2985284d344b0a5650358528fe05cb3b852b41978494d1a1c2152e2f1418d24aa8caa1a155c4bcbe06f3cec079936496e8d26d5598b7bda4889699d84c74b2763b337e2298a2d69078b846deb65d8ba6dc3b9af999105a368e32491f42ace1b14d03bca2c69619973a4fa6a16f4dd4b2fb5b1faa5ecfe5584680d2e3de1dc83173e4168709d9ca74dda9a0f3f33ccde10bc2e3a9b9c08a3a49b0371ec375a4a2db5e09e9023ccba484b25becd753d0656eff00be6cb6a3180c100070758c49bc056b32ca0e3291d12d91e191047982a6a777025f5441b0b907871b908ce5efd172e71e1046dd54e61ba7b9ea3c9e961dd86aa30d88a005890f170e8de7928734a2ead55b86c3d20e738497706b79add76f1d4ab52744b5ed1e178b10788f243bfe1fb69d2a3de3e5f51f12ee4d1b34745d1fc5df927fcbfd7c5d96f679d84a407c6f02f10d24ef0392a35b0788359d51b0d6f846973c45ee5c205b92d6e60e63c441f78dd64f311483a3b871208924f2d8ef71ba9f86ab7cf714730a0ed45c607466d3d105c7bfbc219dd83c8968457135e80bce804d890fd3e52d3bf9b5752c53220d1b4c0a8d7ea69ff537e9baac896d987e1031f31005f8c043312f7125c39f0985a9cc30949fe1a2493bb848d40fe174123fd53d104385b968209fe532c70e843b8f404aae29649b20ce1d4dc24d97a8e578e0f683cd78c57a458ed88e86cb5fd91cd88f038a329f2257a635e9e0aa585ab21590e53326052ca8814e940492ba532574a01f2ba53252ca01cb93657203e6609574250174a6e013804a027b42c0e604470ca9302238364959582d80a72b47841a421b96e1d5faae80929e2c32aea7b47555b3a0f1581101ad8924c01fdfa0ba7e5466a34f5b733e5d3aa9fb5383a8f7830348e3b35a399e5f9a8e57b571f48734783a4b59a89882e1227a378facf928b2daefa6e3de1d4e160c10748ff338f8698e9b8e4118a258fa1a4192044830ef7e03a0f740dd148e9734120c861b35bd5fccf4df9f22a717ab996c480c699f8661c7886ece7f9921bd782bb84ce4b409640ddad3bfe2746de56fd46e14eb3aaa497c0d3310de5c3d822786c396ceb01c07cddc27eff24b69a0c333463e038e97913d639f4e83d7929f4d423f76e0678924acc62d9aa4c41b9fa424c3e6b529b0438dbe406e9f1c8b941cc7e426bb4b6b5426778b055b0dd9ea74181b4dce6c75b75b2a6fed2d5000d26e6dfdd50c77682b104061b7154f284b04abbfbb07bc7823d8c2018ccd403a0011c2f1e93fc2791db69b1b52c656350cb8b8f11e46f087e21cc00812623f423ef9218b987c61d645671d0eb6b0d076ddb5a9196bc8f7e209572b0633c345ddd17fc2f04ba85407938c9671b3a458a074de5e487edb380fe203677e21cffba2d45eca0c89d6c37db7ea27636dba744314b1543bbf88063f8b86c4f56f0f36fb2aa6bdf4d61a87f0bdb04c743b38743f22ade27181e00035533b73006fa6797161f307f880cc582c3e08734de370e0388e36f470f9a784a9331a65ade0e6f0e2d23a716fc8aab97d6d2e0e6f0dc1dc7ea158a75355321b71bc1b91cc1e60f3e606c86d3de5b6238711e49a16bd6f22c56b6028d02b19d91c56a6c2d7b1d652a789c14a0a8814f056352029653015c861f296532574a01f2b93257203e6e013805d09405d099c0291a135a14802c056847f28c2ec85e0686a2b619561808958d8bf87a3a5a86e3b181aed37f4dd1ea8e686d8acd3483549236494f1732daa4546b8dba70016933926ad3f0cf4080e6786732835fa6e4827cb80fcd12ca71c5ed0cbcc5ffcbd3cd473fb5b1eba0ac3e2df43c2d00b89b9fe5f2ebd78296b618b9bde1171f54f187eeaa12ebc9b2338aa5e0bf2f9a5b5b2046558b20f8c81d77713f92d1d220c3761f5eab18d73a9d4d5169d57ff0028247d11bcb7319bbcde3fd804b4f1a06e1c151bf02cd331e69b85c5871907dbe8ae537888fbbac905557601bcb821d9ab18c6cc7103c911c5e303260de6079582cee65887b9e582ed920cf3b426601677a9b2e6dc0371c083c3e6abb98c31a7722223ebd512c40041a6773e50239f5523f06052ef00bb403ca4714d292c332cc04801dbefe7cd57c48d1a9808807c137049dafd76f30aee2f164d1151836bea13208dc3820cfabdf9b34820cf9cf1f71f34f8cbf25c9570f54b0973858eed161d08e44702aa62880447c0e33205da78380e046c47ead57f37c4b5a3bb004ee7f441a86280243be176fd0f07056c7d2392ee11e43a0c077fdae07f51ef2ab62190e91b7cc1e49d40dcb5df137e6dfedbf914afa8260ec6dd4723e9faf35ac683b2b8bd2f82bd130cf90bc8f2ba858f1e6bd3b2aada9a0a4c8d88a829e0a8814e052352829653014b2807cae94c95d2807cae4d95c80f9dc04b0952b44aead23b73559c3e1dced822594648faa6c16cf2beceb69c178054f3cf1c54c70b933b93e100201b2d53f2b259629f9ce534dd4cba9785c2e2167b23ed0d46934aa5e2ca3e7e5dc57c7c7aa81efab4de412ac61a9073e4f1fb2a3c6e29b52b01cd5baa1c3e18247d16dbb649a68f1acd54226f1f70b2196e29d877c1b89fb946a96620b07143b1984efe4b05c29cfaaa5fb83d98d2ef69b5ec8245ec9996664ca8c2c7cea16baa19556a987863ee0ee46c15bcdf2a686f7d49de2de024d6ba6efe533b2d0f9276511c04dcfc23e880d2cfea53f038171276ba314333a8e009a6ed2378698f54d78eb272412c1d173648e22cac39f5363e7e5c94197e654dc092e1ab9721c026e2f35df4c58c4fd14ecb14961c708e24979ebbf243f1cfd01a7627c4d6f3875d4789cd882e892e368e03921b8bc435a43ea39ce22435a39db6e9ba69896e4b38570738977f1127840e87d132a66702a5131121a41f91e82e809ac5932fd21c644db7998f97b29096b9ba8bb548871009b01c7aaacc349dc91b4d4b86b8c131078816bf973565eeee25c4c388b0eb64371d9933c22993e1faaad8dc6178d4f17e0a9314ae46e2abea7171dcfcd517d49291e49bdfd92064aae93dadb2a1b1e2df9b797df34ea8792a7b7157b0ec2f1608b04a970aebb4f1dbdb6fbe8bd27b3ef9605e7b83c13f50b2f41c899a5a254f23e23e0a782a2053814864a0a59518296500f94b2a395d280925728e57203c015ecaf0c6a3c001510b43d9cc2b9cf6b5bbb8fb05d39dd4da384dd6e32a61a4c0d63413c4ab352bb8ee0b4fc94b14e8e9a53e22aa6635cb78db92f233cfb7a9861d1acc7020b4c4af3bcc6b1a78971e6519c7d62c26a32638841b3a22a34556ee174f0cd5fdb9f9aee7e8b4aa9159ae5b3a94f6aadbdae0715e7d46bf79066e16df2acdb4d301ed26dc957931bf096167c9f51b4ea1f03b49e20a6e0dc683c9065bc6fba753a07126594f48e68ee0bb34c601ae4cac985f935cbe83e857ab8c2594a96967171fc919c3f67b4320d4712769302518a541ac018d1036b58cab219ea04cf300ff00101e69e6327a25cadf61384c85b4c005809172624efc4a9b1b400b366778e1d510c25506fc6e7ce3637d90ec75616d4439bbdee77903a2db649ba24b7a8cce678175421cc04543c60011c352ab86cab100c3c832677f9ad1d7a8d37937320031ba1f88d24412780f0db89ebd21432e597d4571e3b3da9f754a8189739c47064ca1f473470aae6bdad736480e0d12de8636fec883a840d4c719126fb45ac78816f9f1598c5639adacdadc1c21e208dac4dc7d8598e3e4dcb2d34d8dc361f134c38b0474b1076599a183387ada2658f91d423582c4b1af3ddba58f13e5d4734ec5d3693ab73361b9e9a53e1b9d132efb64338cbb43c160b38c01bccadd651d9da2da4d1599a9e4099b807900a6c9f2176b6d5aed1692d69dc49b13e8b49543c0921d360d8ebb920f28f98579e91bec3ea65949a348600d8d9c3eeca957cae908018d2d368d3b6fee8bd37b09004111001d8b8f2e4667dd46ed2013240d8822c0df7b6db2d63298eecb5173a69f867870f453603b2cda66e67c91b353c5a4b623d787353bdd6d237e3e480a0ccad80abb4981b65529d5325bbc71560540edb7596376b6ca8a50e439b52375619512586dad6a4ba941a92ea4ad4da92ea506a4ba90136a5ca1d4b901e14c5e83ff000f7057354ff08f995e7f4770bd4bb07fe13fd15b9ff02707e492b559c4c9f204fd13f1553c619133c7828730f8ff00d415ca7f10f35e7678c77e3954b528536b0873019e8b15da4c98d369753b8770e4b6d997c3ea87e6ff00e126e1cac672e32bcae8d3eeee4195beec7e60dad4cb1cc16e2b2f53728e7647e272ece4ee3930eab61945487b98408e108f32dcfa7259cc93fc47ad19f8079fe6b31f4dcbd96ab8089b5fcafc652b48702e693a86e26c44d81f55163b66f994cc2f0fc3ff00b262a7c6557536e96902762780f2f7f759ec5d6d45ad6dcc7af9db645313f00fc27fa420787dddf85bfd2b97972b72d7d3a38e498a4acfd0c3c6d79136e3b7043cd7686c18bdbe7efc4a931bf07a0ffc50dc77c63d3fa12487b57a8e2180102db6d24efc4fcbaacdfecaf6d571d72c76a96936bf20515cbbe23e47fa82aaff008a9f9bbea15b0e91cfb4b80c3010c6b5a6083c750e6238ad7e5191869351e0ea10008989e40fd7aac8655ffd83e5ff00895bdc17f8c3ff00c47f5315709da795d44e714da766d401a3886b0360db417739050faf88243c6a74ff002cb41658b81dc459877513fe07fe01f572757da9fe21fd351513370f896824b1c4820869b0d605c93e2dedba56e29a418d66e40d5333c8f216dcaa8edabfe277d0ab35be3a9f87f30b42854ace6bf95a4c8e3372d9e093f6b78716cefbdc47a426e33767e055b15f7ee862669bcb89bf00a6c3d48748b0e4557670f229dc9016ab3ef2a4a15d57afb2661d2d8682c1e975a858954ce975a5d6a20b90c4bad728d7203fffd9')

where cat.jpg is:

cat

@dmalan dmalan merged commit 74e6dd0 into develop Dec 14, 2019
@dmalan dmalan deleted the blob branch December 14, 2019 17:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants